Jetpack Compose for Desktop 开发注意事项

一、背景

  • 项目地址
  • 开发工具:IDEA 社区版 2022.2.3
  • 添加插件
  • IDEA 中直接运行用 JDK11 即可,若要打包 msi 或者 exe 安装包则需要 JDK17

二、build.gradle.kts

  • 添加依赖
kotlin {
    jvm {
        compilations.all {
            kotlinOptions.jvmTarget = "11"
        }
        withJava()
    }
    sourceSets {
        val jvmMain by getting {
            dependencies {
                implementation(compose.desktop.currentOs)
                // implementation("com.google.code.gson:gson:2.8.5")
                implementation("com.squareup.retrofit2:retrofit:2.6.0")
                implementation("com.squareup.retrofit2:converter-gson:2.6.0")
            }
        }
        val jvmTest by getting
    }
}
  • 拷贝 wix311.zip,使用 gradlew packageMsi 命令打包安装文件时需要用到该文件,需要从 github 下载,可以手动下载后保存到工程根目录。
// 避免每次 clean 后都需要再次下载, 这里直接在根目录放置下载好的文件, 用 task 进行拷贝
task("copyWix311", Copy::class) {
    from("wix311.zip")
    into("build/wixToolset")
}

// 需要在 afterEvaluate 中处理, 否则报找不到 packageMsi 这个 task 的错误
afterEvaluate {
    tasks.getByName("packageMsi").dependsOn("copyWix311")
    tasks.getByName("downloadWix").enabled = false

    if (file("build/wixToolset/unpacked").exists()) {
        tasks.getByName("unzipWix").enabled = false
    }
}
  • 添加模块,比如 Gson 中使用到了 java.sql 包下的相关类,如 java.sql.Time,但是打包 msi 安装文件时会对标准 java 运行时进行裁剪,默认情况下不会包含 java.sql 模块,这里可以手动添加。
  • 修改 mainClass,如果 MainKt 移动到了某个包下,如 com.xxx.MainKt,这里需要同步修改,否则打包成安装文件安装完成后会运行失败,提示找不到类 MainKt。(在 Git bash 中运行 ./xxx.exe 可以看到提示
compose.desktop {
    application {
        mainClass = "com.xxx.MainKt"
        nativeDistributions {
            targetFormats(TargetFormat.Dmg, TargetFormat.Msi, TargetFormat.Deb, TargetFormat.Exe)
            packageName = "Xxx"
            packageVersion = "1.0.0"

            modules("java.sql")
        }
    }
}
通过阅读源码发现可以添加模块
  • 指定图标,参考清理 WINDOWS 图标缓存 - 知乎 (zhihu.com)
compose.desktop {
    application {
        ...
        nativeDistributions {
            ...
            windows {
                iconFile.set(file("WIFI.ico"))
            }
        }
    }
}

示例

安装后运行截图

问题

  • TODO

你可能感兴趣的:(Jetpack Compose for Desktop 开发注意事项)