前不久,騰訊推出了”微信小程序”這一概念,對移動原生應用的影響可謂巨大.而幾乎就在同時,騰訊在GitHub上開源了第一個項目Tinker,這是一個Android平臺的應用熱修復框架.可以在不重新安裝應用的情況下,對應用的代碼/庫/資源進行更新.相關信息官方也已經給出詳細介紹.得到這個消息時,筆者也嘗試學習它給的Sample,希望能夠使用到自己的項目中去.畢竟熱修補是如今原生應用的一大痛點,有了熱修補技術,類React Native應用的優勢將縮小.這是一篇Tinker簡單上手的說明文字,演示如何運行官方的Sample,僅作互相學習交流
將官方給出的Sample工程在AndroidStudio中打開.首先一點,在app的build.gradle文件中找到tinkerId = getTinkerIdValue()并將其替換成tinkerId = "tinkerId",其中后面的值可以隨意設置.再替換ignoreWarning = false為ignoreWarning = true.(見圖1)
按照往常操作一樣,編譯打包debug apk并安裝.此時Tinker會在工程的app/build/bakApk/目錄下保存打包好的apk文件,找到剛才生成的apk文件,復制其完整文件名,在app的build.gradle文件找到tinkerOldApkPath這一項設置,并將其設置為tinkerOldApkPath = "${bakPath}/<剛才生成的apk文件名>"(見圖2)
在MainActivity.java中,我們稍作改動,例如將R.string.test_resource對應的字符串資源的值修改(見圖3),
12 | <!--<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"); |
你可以自行做出更多的改動(這也是我們需要熱修復的原因),然后再Gradle腳本中找到’app:/tinker/tinkerPatchDebug’這條命令(見圖4),雙擊運行,它將生成debug版的patch(補丁)apk文件.

運行完畢后,Tinker會告訴你生成的補丁apk文件所在位置.(見圖5,6)
將patch_signed_7zip.apk這個文件拷貝到Android設備的ExternalStorageDirectory()路徑下.文件的路徑可以隨意設定,只需在MainActivity中指明補丁Apk路徑即可.(見圖7)
點擊APP主界面中的LOAD PATCH加載補丁,提示成功后,點擊KILL SELF結束當前進程,重新啟動后,即可發現變化.可以看到,經過上述修改,原有Apk的應用啟動后在Log中打印為(見圖8):
而應用補丁后,打印結果為(見圖9):
而這一切就是應用了熱修復的結果.
萬事開頭難,有了如此強大的框架,相信廣大開發者開發的原生應用將更加強大.
轉自:http://www.trojx.me/2016/09/28/tinker-sample-introduction/
新聞熱點
疑難解答