美文网首页
Jetpack Compose for Desktop 开发注意

Jetpack Compose for Desktop 开发注意

作者: 雁过留声_泪落无痕 | 来源:发表于2022-11-17 11:31 被阅读0次

    一、背景

    • 项目地址
    • 开发工具: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")
            }
        }
    }
    
    通过阅读源码发现可以添加模块
    compose.desktop {
        application {
            ...
            nativeDistributions {
                ...
                windows {
                    iconFile.set(file("WIFI.ico"))
                }
            }
        }
    }
    

    示例

    安装后运行截图

    问题

    • TODO

    相关文章

      网友评论

          本文标题:Jetpack Compose for Desktop 开发注意

          本文链接:https://www.haomeiwen.com/subject/owcpxdtx.html