天天看點

安卓 熱修複-Tinker接入

本文主要講tinker官方Demo的接入使用,沒有用到tinkerPatch更新檔背景管理系統。

1.從git上面下載下傳tinker的官方demo下來,裡面的東西不深究,就直接從他的tinker-sample-android這個demo 開始

2.将其導入as中,一般直接導入進來是無法運作的,他會報錯,這是個什麼錯呢,啥玩意又是tinkerid呢,從上面的wiki裡面可以看出這些參數的意思,如果對build.gradle裡面那些配置參數不懂的都可以在上面的wiki中尋找到,這個tinkerID我的了解就是加密和解密一樣的比對關系,驗證基準apk包的時候判斷是不是更新檔包的tinkerid一樣

安卓 熱修複-Tinker接入

3.這個tinkerid 可以用git版本号,也可以用versionname來定義,這個demo裡面他用的是他的git 版本号,是以直接拿來我們跑肯定是有問題的,我們需要手動修改下這個(如果你有配git的話可以用git版本好來定義,如果沒有的話就用versionname一樣,反正最終都是用一個字元串來表示),如果修改build.gradle裡面的 def gitSha()方法 我用的是git的版本号 

指令行敲指令:git --version ,擷取版本号

安卓 熱修複-Tinker接入

兩種方式設定tinkerID均可,最終都是用一個字元串來表示,如下圖所示:

安卓 熱修複-Tinker接入

4,我們在gradle裡面運作assembleDebug(輕按兩下執行)生成一個apk檔案 我們先将這個apk安裝到手機上;

安卓 熱修複-Tinker接入

5,上一步生成apk包後,在這個 目錄複制.apk的名字和.txt檔案的名字,進入build.gradle裡面将tinkerOldApkpath和tinkerapplyResourcePath的路徑替換成剛才你複制的,這樣就等于指定了後期更新的包 是要替換掉這個前期的包。

安卓 熱修複-Tinker接入
安卓 熱修複-Tinker接入

6,緊接着對項目進行任意修改(價格按鈕,改下圖檔啥的),模拟對項目進行了bug修複,最後就要發更新檔版本了(第4步的是base版本,這一步生成更新檔版本)

我們在gradle裡面運作gradle裡面tinker目錄下的tinkerpatchdebug(輕按兩下執行):

安卓 熱修複-Tinker接入

7,将這個生成的pathc_signed_7zip.apk這個更新檔包放入我們記憶體卡的根目錄中,可以直接将這個apk放入我們的根目錄,也可以執行:adb push apk包全路徑  /storage/sdcard0/

指令來将我們的更新檔包放入sd卡根目錄。 

安卓 熱修複-Tinker接入

8,點選我們一開始安裝的app ,點選LOAD PATCH加載我們的更新檔包,再點選kill self或者徹底退出應用,再重新進入,更新檔即生效!至此熱修複結束

安卓 熱修複-Tinker接入

總結: 一開始我也研究了挺久 ,實際項目使用的熱修複跟官方的demo還是有很大的差别的,因為我不想使用tinkerPatch更新檔背景管理系統,可以直接這樣做:在應用入口Application類,或MainActivity中,加一個檢查更新更新檔的功能,若服務端有最新的包,則下載下傳下來并儲存到sdcard,在讓應用加載更新檔包即可實作熱修複功能。

檢查更新推薦UpdateAppUtils,一行代碼快速實作app版本更新(https://github.com/teprinciple/UpdateAppUtils)