微信熱修復tinker及 tinker server 的快速接入方法

當前熱修復方案很多,今天研究了下微信的tinker,使用效果還是不錯的,配合tinker server服用更佳。本文介紹兩者的使用,以便大家快速接入。

目錄


1.tinker接入指南

?安裝tinker gradle插件
?配置tinker task
?生成Application
?打補丁包
?安裝及卸載補丁
?加載補丁
?清除補丁
?查看補丁是否加載

2.tinker serve接入及使用

?gradle配置環境
?代碼初始化
?請求更新補丁

3.參考

image
image

tinker 接入指南


安裝tinker

gradle插件

1.在項目的build.gradle中, 添加tinker-patch-gradle-plugin的依賴。

buildscript {
    dependencies {
        classpath ('com.tencent.tinker:tinker-patch-gradle-plugin:1.7.5')
    }
}

2.然后在app的gradle文件app/build.gradle,我們需要添加tinker的庫依賴以及apply tinker的gradle插件。

//apply tinker插件

apply plugin: 'com.tencent.tinker.patch'

dependencies {
    //可選,用于生成application類
    provided('com.tencent.tinker:tinker-android-anno:1.7.5')
    //tinker的核心庫
    compile('com.tencent.tinker:tinker-android-lib:1.7.5')
}

配置tinker task

配置基礎包, tinkerid, dexMode等,詳見gradle配置:

tinker task 配置

我做了如下修改:

1.修改tinkerid為版本號, 跳過了需要commit一次的坑:smile:

def getTinkerIdValue() {
    //版本作為id
    return android.defaultConfig.versionName
}

2.移動備份文件到/tinker/bakApk/下, 防止clean掉基礎包文件。

3.重命名備份文件, 比如 base-app-debug-v1.0.1-2016-1125.apk , 當然自動生成的是 app-debug-v1.0.1-2016-1125.apk , 需要手動添加前綴作為基礎包, 后面多次編譯不會把基礎包覆蓋掉, 也不會像官方demo里那樣以秒命名產生很多文件。

?4.修改tinker message 為 I am the patch apk-v版本號

5.修改patchVersion為版本號, 這個在tinker server需要。

-configField("patchVersion", "1.0.7")
+configField("patchVersion", android.defaultConfig.versionName)

注意 里面有些修改的地方, 包名修改為你的包名等, 我用todo做了標記。

生成 Application

如果你有Application類, 那么需要自定義一個DefaultApplicationLike, 讓tinker
幫你生成Application。

正如項目里的 public class SampleApplicationLike extends DefaultApplicationLike { 并對類添加注解, 比如添加如下注解:

@DefaultLifeCycle(
application = "tinker.sample.android.app.SampleApplication",             
//application name to generate
flags = ShareConstants.TINKER_ENABLE_ALL)

編譯后, 會生成一個SampleApplication, 用這個作為你的Application, 寫入清單文件。

好了, tinker到這里就配置好了, 下面開始打補丁。

打補丁包

1 命令行

打debug補丁: ./gradlew tinkerPatchDebug

打release補丁: ./gradlew tinkerReleaseDebug

?這里需要注意, 命令在linux和mac下最好是 ./gradlew , 意思是當前項目的gradlew, 如果寫成 gradlew 可以會去下載gradle等, 因為那是全局的, 比如AS2.2.2帶的版本是2.14.1。而我現在的是最新版本3.2.1, 可輸入 ./gradlew -vgradlew -v 查看而windows就可以是 gradlew。

注意 debug和release配置的基包不同, 和他們一一對應, 另外, release還需要配置mapping文件。

2 雙擊對應task

就是去gradle projects里找到對應task, 雙擊執行就可以, 如下圖:

image

比如, 打debug補丁, 雙擊 tinkerPatchDebug 就可以了。下一次打補丁時就可以從快捷欄選擇,然后點擊右側運行, 如下圖:

?
image

安裝及卸載補丁

1.加載補丁

第二個參數是補丁包存放路徑, 名稱任意, 可以不以 .bak 結尾。

TinkerInstaller.onReceiveUpgradePatch(getApplicationContext(), patchPath);

還可以自定義加載成功等交互, 請參考 SampleResultService , 別忘記添加進清單。

2.清除補丁

當補丁出現異常或者某些情況,我們可能希望清空全部補丁,調用方法為:

Tinker.with(context).cleanPatch();

當然我們也可以選擇卸載某個版本的補丁文件:

Tinker.with(context).cleanPatchByVersion();

在升級版本時我們也無須手動去清除補丁,框架已經為我們做了這件事情。需要注意的是,在補丁已經加載的前提下清除補丁,可能會引起crash。這個時候更好重啟一下所有的進程。

3.查看補丁是否加載
?

boolean isPatched = tinker.isTinkerLoaded();

tinker server接入及使用


tinker server提供tinker補丁包下發及監控等, 使用也是很簡單。

gradle 配置環境

1.gradle遠程倉庫依賴jcenter:

repositories {
    jcenter()
}

?
2.再添加sdk庫的dependencies依賴:

dependencies {
    compile("com.tencent.tinker:tinker-server-android:0.3.0")
}

?
3.在TinkerPatch 平臺中得到的 AppKey 以及AppVersion,將他們寫入 buildConfig 中:比如:

buildConfigField "String", "APP_KEY", "\"f938475486f91936\""
buildConfigField "String", "APP_VERSION",  "\"3.0.0\""

平臺鏈接: tinkerpatch.com

新增app后可以得到AppKey, 至于AppVersion, 就是補丁的版本。

4.清單配置網絡及sd卡讀寫權限 代碼初始化

TinkerServerManager.installTinkerServer(getApplication(), Tinker.with(getApplication()), 3);

后面的3表示每隔3小時請求一次服務器, 檢查是否有更新包。

請求更新補丁

1.主動請求更新

TinkerServerManager.checkTinkerUpdate(true);

2.獲取新增參數

TinkerServerManager.getDynamicConfig(new ConfigRequestCallback() {...

下面來一個該demo的tinker server 截圖:

image

參考


更多使用及問題請參考官方文檔:
Tinker -- 微信Android熱補丁方案
Tinker 接入指南
Tinker API概覽
Tinker 自定義擴展
Tinker 常見問題
Tinker Platform 平臺使用文檔

代碼就是Tinker官方示例,我做了一些修改,可點擊這里查看:github.com/jp1017/tink…

?神奇的安卓開發網站:androidcat.com/

安卓開源庫收集整理:github.com/XXApple/And…

(文章轉載自:https://juejin.im/post/5838298d61ff4b006b442b53

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,002評論 6 542
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,400評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,136評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,714評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,452評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,818評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,812評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,997評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,552評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,292評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,510評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,035評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,721評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,121評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,429評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,235評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,480評論 2 379

推薦閱讀更多精彩內容