Tinker 熱修復框架 簡單上手教程

yangxi_001發表於2017-02-10

導言

前不久,騰訊推出了”微信小程式”這一概念,對移動原生應用的影響可謂巨大.而幾乎就在同時,
騰訊在GitHub上開源了第一個專案Tinker,
這是一個Android平臺的應用熱修復框架.可以在不重新安裝應用的情況下,對應用的程式碼/庫
/資源進行更新.相關資訊官方也已經給出詳細介紹.
得到這個訊息時,筆者也嘗試學習它給的Sample,希望能夠使用到自己的專案中去.畢竟熱修補是
如今原生應用的一大痛點,有了熱修補技術,類React Native應用的優勢將縮小.
這是一篇Tinker簡單上手的說明文字,演示如何執行官方的Sample,僅作互相學習交流

匯入Sample工程

將官方給出的Sample工程
在AndroidStudio中開啟.首先一點,在app的build.gradle檔案中找到tinkerId = getTinkerIdValue()
並將其替換成tinkerId = "tinkerId",其中後面的值可以隨意設定.再替換ignoreWarning = false
ignoreWarning = true.(見圖1)
圖1

編譯執行原版apk

按照往常操作一樣,編譯打包debug apk並安裝.此時Tinker會在工程的app/build/bakApk/目錄下
儲存打包好的apk檔案,找到剛才生成的apk檔案,複製其完整檔名,在app的build.gradle檔案找到
tinkerOldApkPath這一項設定,並將其設定為tinkerOldApkPath = "${bakPath}/<剛才生成的apk檔名>"(見圖2)
圖2

修改原始碼 生成新版apk 補丁

MainActivity.java中,我們稍作改動,例如將R.string.test_resource對應的字串資源的值修改(見圖3),

1
2
<!--<string name="test_resource">I am in the base apk</string>-->//原值
<string name="test_resource">I am in the patch apk</string>//新值

還可以在MainActivity中新增一行程式碼(見圖3)

1
Log.e(TAG, "i am on patch onCreate");

圖3
你可以自行做出更多的改動(這也是我們需要熱修復的原因),然後再Gradle指令碼中找到’app:/tinker/tinkerPatchDebug’這條命令(見圖4),
雙擊執行,它將生成debug版的patch(補丁)apk檔案.

圖4

執行完畢後,Tinker會告訴你生成的補丁apk檔案所在位置.(見圖5,6)
圖5
圖6
patch_signed_7zip.apk這個檔案拷貝到Android裝置的ExternalStorageDirectory()路徑下.
檔案的路徑可以隨意設定,只需在MainActivity中指明補丁Apk路徑即可.(見圖7)
圖7

安裝熱修復補丁 觀察程式變化

點選APP主介面中的LOAD PATCH載入補丁,提示成功後,點選KILL SELF結束當前程式,
重新啟動後,即可發現變化.可以看到,經過上述修改,原有Apk的應用啟動後在Log中列印為(見圖8):
圖8

而應用補丁後,列印結果為(見圖9):
圖9

而這一切就是應用了熱修復的結果.

萬事開頭難,有了如此強大的框架,相信廣大開發者開發的原生應用將更加強大.

轉自:http://www.trojx.me/2016/09/28/tinker-sample-introduction/

相關文章