天天看點

【android系統】基于github上tinker-manager的騰訊Tinker 熱修複初體驗----用戶端實作

最近搞了一個下午應用更新的問題,突然想起熱修複這個新技術還沒有嘗試過。就抱着要嘗試下新技術的心态,來試了試騰訊Tinker 熱修複。

【android系統】基于github上tinker-manager的騰訊Tinker 熱修複初體驗----用戶端實作

Tinker是什麼

Tinker是微信官方的Android熱更新檔解決方案,它支援動态下發代碼、So庫以及資源,讓應用能夠在不需要重新安裝的情況下實作更新。當然,你也可以使用Tinker來更新你的插件。

它主要包括以下幾個部分:

  1. gradle編譯插件: 

    tinker-patch-gradle-plugin

  2. 核心sdk庫: 

    tinker-android-lib

  3. 非gradle編譯使用者的指令行版本: 

    tinker-patch-cli.jar

Tinker的github位址:https://github.com/Tencent/tinker

各家熱修複對比

目前市面的熱更新檔方案有很多,其中比較出名的有阿裡的AndFix、美團的Robust以及QZone的超級更新檔方案。下面來看看他們各自的優缺。

【android系統】基于github上tinker-manager的騰訊Tinker 熱修複初體驗----用戶端實作

內建patchsdk

正好看到github上有實作好了的tinker,并且一整套從背景到用戶端的解決方案。本着不浪費時間精力的情況的下,我們對比選擇了github中tinker-manager的解決方案。

1、下載下傳

github下載下傳位址:https://github.com/baidao/tinker-manager

2、目錄說明

  • assets 資源檔案夾
  • patchsdk 用戶端接入的sdk
  • patchserver 背景代碼
【android系統】基于github上tinker-manager的騰訊Tinker 熱修複初體驗----用戶端實作

直接下載下傳後的tinker-manager直接編譯會缺少檔案,可以在下面網址下載下傳到缺失的檔案。

飛機票:http://www.bvbcode.com/cn/36t8vp19

【android系統】基于github上tinker-manager的騰訊Tinker 熱修複初體驗----用戶端實作

3、搭建更新檔背景管理系統

這部分參考另一篇文章:

4、修改ApplicationLike對接背景管理系統

【android系統】基于github上tinker-manager的騰訊Tinker 熱修複初體驗----用戶端實作
修改這個檔案中的appId和appSecret,與背景管理系統中的對應上。還有伺服器位址(http://xxx.xxx.xxx.xxx:xxxx/hotfix-apis/)也要對應上。
【android系統】基于github上tinker-manager的騰訊Tinker 熱修複初體驗----用戶端實作
【android系統】基于github上tinker-manager的騰訊Tinker 熱修複初體驗----用戶端實作

生成更新檔包,并測試

1、編譯調試說明

1.生成基準(oldApk)簽名包。2.是用來生成更新檔檔案的。
【android系統】基于github上tinker-manager的騰訊Tinker 熱修複初體驗----用戶端實作
編譯完成後生成檔案。
【android系統】基于github上tinker-manager的騰訊Tinker 熱修複初體驗----用戶端實作
【android系統】基于github上tinker-manager的騰訊Tinker 熱修複初體驗----用戶端實作

2、生成基礎包和更新檔包

1、執行./gradlew assembleRelease 生成apk
【android系統】基于github上tinker-manager的騰訊Tinker 熱修複初體驗----用戶端實作

生成基礎包位置

【android系統】基于github上tinker-manager的騰訊Tinker 熱修複初體驗----用戶端實作
2、修改TinkerDemo中的若幹代碼。./gradlew tinkerPatchRelease 生成patch更新檔apk(需要保證更新檔包tinkerId跟基線版本tinkerId一緻)

修改text,添加了tangtang。

【android系統】基于github上tinker-manager的騰訊Tinker 熱修複初體驗----用戶端實作

修改工程中的gradle.properties檔案,将基礎包設定成更新檔包基準,然後生成更新檔包

【android系統】基于github上tinker-manager的騰訊Tinker 熱修複初體驗----用戶端實作
【android系統】基于github上tinker-manager的騰訊Tinker 熱修複初體驗----用戶端實作

生成基礎包位置

【android系統】基于github上tinker-manager的騰訊Tinker 熱修複初體驗----用戶端實作
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 指令安裝更新檔包

【android系統】基于github上tinker-manager的騰訊Tinker 熱修複初體驗----用戶端實作

通過指令monkey運作sample應用

4、将更新檔包拷貝到指定位置

通過adb push指令上傳到/data/local/tmp/位置

5、重新開機應用,這時就完成了熱修複

4、更新檔管理背景測試

1、分别生成基礎包和更新檔包

2、安裝基礎包,運作

3、将更新檔包上傳到更新檔管理背景

這個版本要與背景管理的上傳的版本号對應上

【android系統】基于github上tinker-manager的騰訊Tinker 熱修複初體驗----用戶端實作
【android系統】基于github上tinker-manager的騰訊Tinker 熱修複初體驗----用戶端實作
4、重新開機應用,這時就完成了熱修複

結束語

以上就是關于騰訊Tinker 熱修複初體驗,希望對你有用。歡迎大家關注我們微信公衆号,來交流程式員的技術。如果能留言或者點個贊,我也是很開心的,非常感謝!
【android系統】基于github上tinker-manager的騰訊Tinker 熱修複初體驗----用戶端實作

參考:https://www.jianshu.com/p/194c9d89b227