1. 程式人生 > >Android基於TinkerPatch的超詳細熱修復之旅

Android基於TinkerPatch的超詳細熱修復之旅

在我們開始熱修復之旅之前,大家需要先明白的是這篇文章是基於TinkerPatch的,而不是微信的Tinker,雖然TinkerPatch是基於Tinker的專案,但他們終歸是兩碼事。先附上Tinkerpatch的官網地址。

1.整合TinkerPathSDK:

  1. 登入官網,獲取Appkey值;
  2. 在專案,注意不是modelGradle新增倉庫jcenter的依賴:
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
classpath ("com.tinkerpatch.sdk:tinkerpatch-gradle-plugin:
${TINKERPATCH_VERSION}") { changing = true } }

      3.在Module層的Gradle新增依賴:

dependencies { //無需引入tinker的任何庫,使用tinkerpatch sdk即可,如之前專案使用過Tinker,則整合SDK時其他的tinker庫需要刪除,否則會報錯 compile("com.tinkerpatch.sdk:tinkerpatch-android-sdk:${TINKERPATCH_VERSION}") { changing = true } compile "com.android.support:multidex:1.0.1" } //這個.gradle檔案可以直接複製,無需修改,只是在生成補丁時修改部分內容 apply from: 'tinkerpatch.gradle'      4.然後引入tinkerpatch.gradle,放在module層中

然後需要更改一下內容,後面再細說;

         5.然後再自己的Application類,他與微信的Tinker區別就是你不用自己去安裝微信的要求重新定義Application比較簡單,然後寫上相應的程式碼:

@Override public void onCreate() { super.onCreate(); // 我們可以從這裡獲得Tinker載入過程的資訊 if (BuildConfig.TINKER_ENABLE) { tinkerApplicationLike = TinkerPatchApplicationLike.getTinkerPatchApplicationLike(); // 初始化TinkerPatch SDK TinkerPatch.init(tinkerApplicationLike) .reflectPatchLibrary() .setPatchRollbackOnScreenOff(true) .setPatchRestartOnSrceenOff(true); // 每隔3個小時去訪問後臺時候有更新,通過handler實現輪訓的效果 new FetchPatchHandler().fetchPatchWithInterval(3); } }

注意寫到這裡,如果你沒有仔細閱讀他們的文件,會遇到一個大坑。待會再細說。

6.配置簽名


基本到這就整合完成了。

2.打包:基礎包以及補丁包

1.找到專案的Gradle檢視,找到build一層,雙擊打包,此包為基礎包,也就是你假裝有bug的包,你可以自己先做個標記,代表這是有問題的基礎包。我這裡是以Debug版本為例的。


 

此時就會在下圖生成打包好的基礎包,app後面的則是你當時打包成功後生成的時間戳,這個後面會用到。


        2.  然後再來修改tinkerpatch.gradle中的 baseInfo程式碼,將你剛打好包的時間戳填入程式碼中

def bakPath = file("${buildDir}/bakApk/")
def baseInfo = "app-1.0.8-1110-17-18-39"
def variantName = "release"
        3. 再修改  appVersion ,記住與你Module中的build.gradle 中的versionName 一致。然後再修改一下程式碼,將之前基礎包上的bug修復好。
appVersion = ""

4. 打補丁包。還是在這個檢視,選中tinker目錄下的圈圈部分,雙擊666。靜待打包完成


大概半分鐘後,打好的補丁包則在這裡了:path_signed_7zip.apk 便是了。


3.上傳補丁包,修復bug

1. 進到Tinkerpatch官網,找到自己的APP,如下圖。因為我已經上傳過補丁了。此時大家可以點選旁邊的新增APP版本,然後根據自己的情況輸入版本號。


新增好之後生成下圖


然後上傳之前打包好的補丁包:path_signed_7zip.apk 。 點選提交,然後殺掉手機上已經安裝好基礎包的APP程序,再開啟等待表演開始。

也許你這時等了好久發現,咋沒成功呀。程序殺死了N遍啊,是我開啟的方式不對?

告訴你,此時你把此文往上翻,找到我標紅的文字那裡,是不是有個坑?

再去閱讀他們的開發文件,你會發現:



對比一下,去看Application 的配置是不是發現了不一樣?時間!! 問題出在輪詢的時間上。

好了,以上就是大概Android熱修復的全部流程了,由於寫這篇文章與開發時間不一致,好些內容都忘了。希望能幫到大家。

小朋友和小朋友的媽媽都喜歡看~