最近使用Compose Multiplatform做了一个项目,博主在这之前从来没有接触过桌面平台开发,对于桌面更新逻辑完全不清楚,而安卓开发就是通过apk安装升级,但是kmp项目生成平台的可执行文件后大小都达到了100Mb之上,我就在想有没有什么办法可以进行增量更新,于是写了这篇文章
jpackage打包工具
kmp项目中使用的是jpackage打包,会将jvm以及所有引入的jar包一起打包,当我们执行exe/app后会在当前目录启动jvm并运行jar包,所以我们之需要对jar包进行更新/删除方式就可以进行增量更新
获取App的安装路径
this::class.java.protectionDomain!!.codeSource.location.path
此方法会返回当前项目编译的jar包绝对路径在Mac中路径为/App.app/Contents/runtine/composeApp.jar而Windows中为App/runtime/composeApp.jar,通过此方法就可以获取到项目的安装目录
动态更新/删除项目文件
在服务器中我们需要将项目的dist文件路径以及每个文件的md5返回给客户端
此时通过服务器返回项目中所有文件的路径信息以及md5判断是否有更新
allFile.forEach {
//如果本地文件不存在,则需要更新
if (!File(programWorkDir, it.file).exists()) {
needUpdateFile.add(it.file)
} else {
//或者md5不相同,则需要更新
if (File(programWorkDir, it.file).md5() != it.md5) {
needUpdateFile.add(it.file)
}
}
}
programWorkDir.parentFile.walk().filter { it.isFile }
.forEach { localFile ->
//如果本地文件在最新程序文件中不存在,则需要删除
if (allFile.find {
it.file == localFile.absolutePath.replace(
programWorkDir.absolutePath,
""
)
} == null) {
needDeleteFile.add(localFile.absolutePath)
}
}
此时增量更新功能以实现