1. 程式人生 > >Android熱修復之Tinker

Android熱修復之Tinker

前言

Tencent 開源 “Tinker–微信Android熱補丁方案” 已經很長時間了,無奈自己太懶了,一直沒有時間去嘗試一下。最近公司準備開新專案,我準備接入這個熱修復框架,這樣能夠及時去處理App中在使用過程產生的Bug問題,而不必為了處理一個Bug問題去更新一個新的版本。正式使用之前,自己先搞了一個Demo去嘗試。在使用的過程中也遇到的了很多問題,故記錄下來。廢話不多說,開幹。

接入指南

關於 Tinker 的介紹,以及與其它熱修復框架的比較,這裡就不多說了,不熟悉的可以檢視Github上Tinker的Wiki,官方有詳細解釋。下面是網址:https://github.com/Tencent/tinker/wiki

,但是我感覺官方的接入指南寫的還不是很詳細,也許是我比較菜的原因吧。

gradle接入

gradle是推薦的接入方式,在gradle外掛tinker-patch-gradle-plugin中我們幫你完成proguard、multiDex以及Manifest處理等工作。

新增依賴

首先在專案的build.gradle中,新增tinker-patch-gradle-plugin的依賴:

然後在app的build.gradle中,新增Tinker的庫依賴:

**注意:**TINKER_VERSION代表的是版本號,需要我們在gradle.properties檔案中新增。當我們專案中多次使用這個TINKER_VERSION版本號時,如果需要修改此版本號,那麼只需要修改gradle.properties的配置即可,簡單方便。

app/build.gradle檔案修改

完成上面兩步後,個人建議,將tinker中tinker-sample-android的app/build.gradle拷貝到自己專案中的app/build.geadle中。因為配置熱修復還是很麻煩的,需要你對gradle的知識有一定的瞭解,大牛可以隨意。即使是拷貝示例中的的內容,也是需要修改的。

  1. 修改tinkerId的值–否則會報錯:tinkerId is not set!!!(建議tinkerId的值與versionName一致即可)

  2. 將忽略警告設定為true:

配置簽名檔案:

API引入

接下來就是處理Application檔案,tinker建議編寫一個ApplicationLike的子類,你可以當成Application去使用,注意頂部的@DefaultLifeCycle(),其Application的屬性,會在編譯期生成一個SimpleTinkerInApplication類:

接著在清單檔案中配置編譯器生成的Application,以及新增對sd卡的讀寫許可權,因為在載入補丁包時,需要讀取補丁包。如果你是6.x以上的系統,自己新增上授權程式碼,或者手動在設定頁面開啟SDCard讀寫許可權。

<application
    android:name=".SimpleTinkerInApplication"
    ...>

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

然後我們在Activity中新增一個Load patch的Button,新增一個點選顯示Toast的按鈕。點選Load Patch按鈕時,載入補丁包,成功補丁包後會修改動態修改Toast顯示的內容。(注意:這裡只是測試,正式專案中建議參考官方示例,在Service中載入補丁包)

接著我們直接將專案執行到手機上,此時會生成Apk檔案,找到如下圖所示檔案:

patch生成

修改app/build.gradle檔案,如上圖所示。接著修改Toast要顯示的內容。使用tinkerPatchDebug生成差異包,也就是補丁包。可以使用命令,也可以使用android studio的工具,如圖:

下面就是生成差異包的位置,將該差異包匯入sd中,(該差異包名字可以自定義,只要對應即可)。

點選Load Patch按鈕,停留片刻,程式會自動退出。重新進入程式,點選顯示Toast的按鈕,就會發現Toast顯示的內容已改變。效果圖: