Tinker熱修復示例
阿新 • • 發佈:2019-02-18
這幾天想學習一下Tinker,但我覺得官方給的例子太複雜,作為新手,我只想一個最簡單最直觀的例子。
在下愚鈍,開始整合並不順利,在Tinker的官方技術人員的悉心指導之下,花了一天多的時間終於有點執行出了
我的一個小補丁,還是很開心的。 看圖說話:
(原始介面)
(補丁後介面)
關鍵步驟截圖如下:
(圖一)
(圖二)
(圖三)
(圖四)
整合步驟如下:
1.gradle配置檔案,包括總專案build.gradle,app裡的build.gradle 和 thinkpatch.gradle最簡化的配置就 如我專案裡的,少一點就會出問題。 2.配置好了後,點選右邊Gradle檢視中的build/assembleRelease(如圖三),此時會在build/bakApk裡生成 app-1.0.0-xxxx-xx-xx-xx/release/app-release.apk(mapping 和 R.txt),這裡著重需要說明的是"xxxx-xx-xx-xx" 這個是根據當前時間戳生成的一個字串,所以每次生成時都會不一樣,此事跟下一步的操作有關。(如圖一) 3.步驟2完成了以後,我們就生成了初始安裝包。下一步,我們修改程式碼,例子裡我就寫了 tv_hello.setText("5.25發了個補丁,修復了bug")。 4.接下來一步最為重要:我們要把我們在2步驟裡生成的三個檔案的具體路徑地址把tinkerpatch.gradle的 baseApkFile , baseProguardMappingFile ,baseResourceRFile 三個變數賦值(如圖一)。主要是因為2步驟裡的"xxxx-xx-xx-xx"路徑 每次生成時間戳不一樣,所以這裡要寫死。寫好了以後,我們雙擊Grale視圖裡的tinker/tinkerPatchRelease(如圖三), 此事正常會生成outputs/tinkerPatch/release/patch_signed_7zip.apk 這個就是我們要的補丁的壓縮版。如果那三個變數所指向 的原始包地址不對,會編譯不成功,提示找不到xxx.apk。 5.最後釋出版本。注意版本號要和 tinkerpath.gradle裡的配置 appVersion = "1.0.0" 一致,而不是和 app/build.gradle裡 的versionName一致。(如圖四)
測試步驟:
1. 安裝原程式包 ,檢視原始效果。
2. 到tinkerpatch官網後臺釋出補丁。http://www.tinkerpatch.com
3. 清除專案程序,過5秒左右重新進入專案,正常的話補丁就生效了。
執行成功了,下面我們來看看例子中程式碼幾處重要的地方:
1.Application 文件中說到了Application有兩種實現方式,我用的是 reflectApplication = true這種 public class SampleApplication extends Application,在Application裡面初始化Tinker。 2.注意SampleApplication中新增一個空的建構函式:public SampleApplication() {} 否則AndroidManifest.xml 中會報錯。 3.Tinker和HotFix有點不一樣,補丁不是主動推送下來的,需要我們在關鍵的地方請求一下伺服器是否有補丁。 (官方說明:http://www.tinkerpatch.com/Docs/FAQ) 本例由於我只有一個Activity,所以我就放在onCreate裡面了。