使用KMP(kotlin多平台)开发Compose,如何打包成可执行文件?exe、DMG……

上一次的分享中,我分享了,如何在windows平台上直接通过IDE运行compose。

使用的方式是:

双击ctrl,然后,执行 gradle run

详情见:使用KMP(kotlin多平台)在windows上出现:Cannot locate tasks that match ':composeApp:compileJava' as task

有朋友问,我是能够执行了,但是这毕竟是调试方式,它还不是一个可以分享给别人的可执行文件呀,我写一个程序,只能在自己电脑上运行,那没啥意义呀。

那今天我分享一下,如果将compose的代码,打包成一个Windows平台的可执行文件(其他平台同理,看一下就知道)。

第一步:找到打包任务。

首页找到你的IDE(我用的是AndroidStudio,选项卡在右边栏),Gradle选项卡 。在这个选项卡打开之后,找到 我们的项目:composeApp,关于桌面应用的任务 在compose desktop中。

然后我们就看到了一堆以package开头的任务了,然后根据任务的名字,我们就能看出来,这些任务,是给不同平台打包的。

  • Deb 结尾 ------ linux系统下的执行文件
  • ForCurrentOS ------ 自动识别系统,也就是给你当前使用的系统,打包一个执行文件。
  • MSI ------ windows下的执行文件
  • Dmg ------ MacOS下的执行文件

你可以根据自己的系统,打包出自己系统对应的执行文件。也可以打包你想打包的系统的执行文件(比如在Windows上打包macos上的dmg,注意Windows上无法打包ios的安装包,但是可以打包macos的)。

也就是说,被跳过了。所以这里为了保证成功性,就执行,packageDistributionForCurrentOS 这个任务吧!

这里,只需要双击,这个任务让它执行就好了。

第二步,找到可执行文件

在项目目录中,找到,build文件夹,生成的可执行文件就在这里,如上图所示(windows平台)。

复制代码
build/compose/binaries/main/msi/ xxxxxxxxxxxxxxxxxxxx.msi

我们把这个文件拖到桌面上,双击就可以执行了。

第三步,安装可执行文件

在windows平台下,compose生成的并不是一个可以直接运行出我们编写的程序页面的。需要走一个安装过程。

1、双击msi,弹出安装过程

2、 一顿安装,(要记住自己安装的位置)

因为我这个程序,不会生成桌面快捷方式,所以要记住这个位置,一会好去执行。

这里也可以选择其他的位置。反正记住自己选的位置 就好了。

3、执行看效果

找到安装的位置

进入文件夹

在这里我们看到了,一个类型为应用程序的文件,双击这个文件。

执行起来了

你可能遇到的问题

经过上面的步骤,你已经做好了一个Windows平台下的可执行文件了。但是在这个过程中你可能会遇到问题。

1. wix311下载失败

这是用于打包成Windows下可执行文件的工具,如果下载不下来,是不行的。

解决方案 1

让你的电脑能正确方式github。(因为这个包是从github下载的)

解决方案2

手动下载文件,并放置到
GRADLE_HOME\compose-jb\

2. Failed to check JDK distribution: 'jpackage.exe' is missing

这可能是因为你是用的JDK版本问题。

jpackage.exe在低版本中没有此工具。

我安装的是jdk17。

如果安装了还没有,可以换一下其他公司的jdk,比如BellSoft的。

在AndroidStudio中可以直接下载:

点击如图位置,可以下载jdk。

参考:AndroidStudio如何安装其他版本JDK

相关推荐
黄林晴2 小时前
如何判断手机是否是纯血鸿蒙系统
android
火柴就是我2 小时前
flutter 之真手势冲突处理
android·flutter
法的空间2 小时前
Flutter JsonToDart 支持 JsonSchema
android·flutter·ios
循环不息优化不止2 小时前
深入解析安卓 Handle 机制
android
恋猫de小郭3 小时前
Android 将强制应用使用主题图标,你怎么看?
android·前端·flutter
jctech3 小时前
这才是2025年的插件化!ComboLite 2.0:为Compose开发者带来极致“爽”感
android·开源
用户2018792831673 小时前
为何Handler的postDelayed不适合精准定时任务?
android
侃侃_天下3 小时前
最终的信号类
开发语言·c++·算法
叽哥3 小时前
Kotlin学习第 8 课:Kotlin 进阶特性:简化代码与提升效率
android·java·kotlin
Cui晨3 小时前
Android RecyclerView展示List<View> Adapter的数据源使用View
android