【Kotlin】增量更新_android
接下来的栗子在AS中进行。​​​使用 Kotlin 进行 Android 开发​

引入Anko

创建新kotlin项目SmartAppUpdate,首先我们引入Anko。​​Github地址​

首先app/build.gradle引入

implementation "org.jetbrains.anko:anko:$anko_version"

然后项目下的build.gradle的build.script增加

ext.anko_version='0.10.8'

版本可以这样查看
【Kotlin】增量更新_android_02

集成​​SmartUpdateDemo​

得到差分包

​下载bsdiff4.3-win32​​ 提取码:hscv

打开下载好的文件,​​在当前文件夹中打开cmd​​,运行命令如下:

//命令格式:bsdiff oldFile newFile patchFile
bsdiff.exe v7.5.4.apk v7.5.6.apk toutiao.patch

于是我们就得到了toutiao.patch
【Kotlin】增量更新_android_03把toutiao.patch放到手机sd卡路径下,手动放置,或命令行实现都可以

adb push toutiao.patch sdcard/

MainActivity.kt

class MainActivity : AppCompatActivity() {
//懒加载初始化
private val mDialog:ProgressDialog by lazy {
ProgressDialog(this)
}

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

//findViewById之后,设置监听
btn_update.onClick {
//集成增量更新
update()
}
}

//增量更新,旧版本+pathch=合并生成新版本apk
fun update(){
var pm:PackageManager = packageManager
//应用程序信息
val appInfo = pm.getApplicationInfo("com.ss.android.article.news",0)
//获取旧版本apk路径
val oldPath:String = appInfo.sourceDir
//指定patch文件保存路径
val patchFile = File(Environment.getExternalStorageDirectory(),"toutiao.patch")
//设置新版本apk保存路径
val newApkFile = File(Environment.getExternalStorageDirectory(),"toutiao_new.apk")
//合并生成新版本

mDialog.show()
//子线程
doAsync {
//合并完成
//旧版本路径;新版本路径;更新包所在路径
val result = PatchUtil.patch(oldPath,newApkFile.absolutePath,patchFile.absolutePath)
//合并成功
if(result == 0){
runOnUiThread{
mDialog.hide()
}
}
}
}
}

xml

<Button
android:id="@+id/btn_update"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="更新"/>

​查看程序包名​​ 手动生成增量更新so库:https://github.com/jiyouliang2/SmartUpdateLib

现在手机上安装的是7.5.4版本
【Kotlin】增量更新_增量更新_04
运行程序(记得打开权限),点击更新
【Kotlin】增量更新_android_05
安装后可以看到版本发生了变化
【Kotlin】增量更新_新版本_06

资源下载