最近搞了一個下午應用更新的問題,突然想起熱修複這個新技術還沒有嘗試過。就抱着要嘗試下新技術的心态,來試了試騰訊Tinker 熱修複。
【android系統】基于github上tinker-manager的騰訊Tinker 熱修複初體驗----用戶端實作
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIwczX0xiRGZkRGZ0Xy9GbvNGL2EzXlpXazxSP9EVT0kEVPdXRU1UeFpXYzI1MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL4ETO0ETMwUTM3AjMxkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
Tinker是什麼
Tinker是微信官方的Android熱更新檔解決方案,它支援動态下發代碼、So庫以及資源,讓應用能夠在不需要重新安裝的情況下實作更新。當然,你也可以使用Tinker來更新你的插件。
它主要包括以下幾個部分:
- gradle編譯插件:
tinker-patch-gradle-plugin
- 核心sdk庫:
tinker-android-lib
- 非gradle編譯使用者的指令行版本:
tinker-patch-cli.jar
Tinker的github位址:https://github.com/Tencent/tinker
各家熱修複對比
目前市面的熱更新檔方案有很多,其中比較出名的有阿裡的AndFix、美團的Robust以及QZone的超級更新檔方案。下面來看看他們各自的優缺。
內建patchsdk
正好看到github上有實作好了的tinker,并且一整套從背景到用戶端的解決方案。本着不浪費時間精力的情況的下,我們對比選擇了github中tinker-manager的解決方案。
1、下載下傳
github下載下傳位址:https://github.com/baidao/tinker-manager
2、目錄說明
- assets 資源檔案夾
- patchsdk 用戶端接入的sdk
- patchserver 背景代碼
直接下載下傳後的tinker-manager直接編譯會缺少檔案,可以在下面網址下載下傳到缺失的檔案。
飛機票:http://www.bvbcode.com/cn/36t8vp19
3、搭建更新檔背景管理系統
這部分參考另一篇文章:
4、修改ApplicationLike對接背景管理系統
修改這個檔案中的appId和appSecret,與背景管理系統中的對應上。還有伺服器位址(http://xxx.xxx.xxx.xxx:xxxx/hotfix-apis/)也要對應上。
生成更新檔包,并測試
1、編譯調試說明
1.生成基準(oldApk)簽名包。2.是用來生成更新檔檔案的。
編譯完成後生成檔案。
2、生成基礎包和更新檔包
1、執行./gradlew assembleRelease 生成apk
生成基礎包位置
2、修改TinkerDemo中的若幹代碼。./gradlew tinkerPatchRelease 生成patch更新檔apk(需要保證更新檔包tinkerId跟基線版本tinkerId一緻)
修改text,添加了tangtang。
修改工程中的gradle.properties檔案,将基礎包設定成更新檔包基準,然後生成更新檔包
生成基礎包位置
3、熱修複測試方式
1、如果搭建了更新檔管理背景的話,使用背景上傳更新檔包,進行修複,根據log,可以觀察到結果
2、如果沒有搭建更新檔管理背景的話,使用adb push app/build/outputs/tinkerPatch/release/patch_signed_7zip.apk /data/local/tmp/
3、無更新檔管理背景測試
1、添加接口
/**
* 加載Tinker更新檔
*
* @param context
*/
public void Fix(Context context) {
File patchFile = new File("/data/local/tmp/", "patch_signed.apk");
if (patchFile.exists()) {
//SampleTinkerManager. .addPatch(patchFile.getAbsolutePath());
TinkerInstaller.onReceiveUpgradePatch(context, patchFile.getAbsolutePath());
Toast.makeText(context, "File Exists,Please wait a moment ", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(context, "File No Exists", Toast.LENGTH_SHORT).show();
}
}
2、分别生成基礎包和更新檔包
按上面的方法分别生成基礎包和更新檔包。
3、安裝基礎包,運作
通過adb install 指令安裝更新檔包
通過指令monkey運作sample應用
4、将更新檔包拷貝到指定位置
通過adb push指令上傳到/data/local/tmp/位置
5、重新開機應用,這時就完成了熱修複
4、更新檔管理背景測試
1、分别生成基礎包和更新檔包
2、安裝基礎包,運作
3、将更新檔包上傳到更新檔管理背景
這個版本要與背景管理的上傳的版本号對應上
4、重新開機應用,這時就完成了熱修複
結束語
以上就是關于騰訊Tinker 熱修複初體驗,希望對你有用。歡迎大家關注我們微信公衆号,來交流程式員的技術。如果能留言或者點個贊,我也是很開心的,非常感謝!
參考:https://www.jianshu.com/p/194c9d89b227