接下来的栗子在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'
版本可以这样查看
集成SmartUpdateDemo
得到差分包
下载bsdiff4.3-win32 提取码:hscv
打开下载好的文件,在当前文件夹中打开cmd,运行命令如下:
//命令格式:bsdiff oldFile newFile patchFile
bsdiff.exe v7.5.4.apk v7.5.6.apk toutiao.patch
于是我们就得到了toutiao.patch
把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版本
运行程序(记得打开权限),点击更新
安装后可以看到版本发生了变化
资源下载