1. 程式人生 > >Tinker熱修復示例

Tinker熱修復示例

這幾天想學習一下Tinker,但我覺得官方給的例子太複雜,作為新手,我只想一個最簡單最直觀的例子。

在下愚鈍,開始整合並不順利,在Tinker的官方技術人員的悉心指導之下,花了一天多的時間終於有點執行出了

我的一個小補丁,還是很開心的。 看圖說話:

image

					(原始介面)

image

					(補丁後介面)

關鍵步驟截圖如下:

image

					(圖一)

image

					(圖二)

image

					(圖三)

image

					(圖四)

整合步驟如下:

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裡面了。