Compose For Desktop 实现应用内增量更新

最近使用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)
                }
            }

此时增量更新功能以实现

Comments

No comments yet. Why don’t you start the discussion?

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注