一 : 首先创建好kotlin工程
引入anko
开源地址:(https://github.com/Kotlin/anko)按照文档提示集成。
settled in your gradle file at the project level:ext.anko_version='0.10.8'
implementation "org.jetbrains.anko:anko:$anko_version"
二 : 采用谷歌的SmartAppUpdates
开源地址::(https://github.com/jiyouliang2/SmartUpdateDemo)仔细按照文档集成即可
1. 在project的build.gradle添加如下代码
allprojects {
repositories {
maven { url "https://jitpack.io" }
}
}
2. 在Module的build.gradle添加依赖
implementation 'com.github.jiyouliang2:SmartUpdateDemo:1.0.1'
3.添加权限
4.代码中使用
PatchUtil.patch(旧版本, 新版本, 差分包);
三 :生成patch包
下载生成patch包的工具 链接 : (https://download.csdn.net/download/qq_18983205/10244386)解压并进去目录如图
然后进入cmd执行命令如下图所示:(C:\Users\Administrator\Desktop\tools\bsdiff-4.3、bsdiff4.3-win32、bzip2-1.0.6\bsdiff4.3-win32-src\Release>bsdiff.exe jason_208.apk jason_226.apk jason.patch)
如图所示:
jason_208.apk (旧版本)
jason_226.apk(新版本)
jason.patch(执行命令以后的增量包)
运行最后的demo ,把增量包放到(adb push yuedao.patch sdcard/)sdcard下,模拟下载好的增量包,
jason_new.apk(合并以后生成的最新包,合并成的新包和最新版本的包大小一致)
四:具体代码实例
class MainActivity : AppCompatActivity() {
private val mDialog:ProgressDialogby lazy {
ProgressDialog(this)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
btn_show.onClick {
update() //adb shell dumpsys window w /findstr \/ |findstr name(cmd 命令行查看包名字)
}
}
fun update(){//com.ss.android.article.news
var pm:PackageManager =packageManager
//应用程序的信息
val applicationInfo = pm.getApplicationInfo("包名", 0)
//旧版本的路径
val sourceDir = applicationInfo.sourceDir
/ /path文件的保存
val file = File(Environment.getExternalStorageDirectory(), "jason.patch")
//生成新版本
val newfile = File(Environment.getExternalStorageDirectory(), "jason_new.apk")
//合并:jni 来操作 so库
//子线程
mDialog.show()
doAsync {
//PatchUtil.patch(旧版本, 新版本, 差分包);
val result = PatchUtil.patch(sourceDir,newfile.absolutePath,file.absolutePath)
if (result ==0){
runOnUiThread{
mDialog.dismiss()
//安装 意图
val intent = Intent()
intent.action ="android.intent.action.VIEW"
intent.addCategory("android.intent.category.DEFAULT")
intent.setDataAndType(Uri.parse("file://" + newfile.absoluteFile),
"application/vnd.android.package-archive")
startActivity(intent)
}
}
}
//生成patch包(查看步骤三)
}
革命尚未成功,通知仍需努力谢谢