Tinker是微信官方的Android熱補(bǔ)丁解決方案盾戴。使用Tinker熱修復(fù)比Sophix略麻煩油吭,分2鐘情況:
1 接入TinkerSDK勾扭,代碼量會(huì)少一些,但是需要去Tinker Platform創(chuàng)建自己的應(yīng)用要尔,補(bǔ)丁文件會(huì)傳入第三方平臺(tái)舍杜,有費(fèi)用標(biāo)準(zhǔn)新娜,而且是間隔時(shí)間去平臺(tái)查詢補(bǔ)丁,更新有延時(shí)既绩。
2 直接使用Tinker,代碼量多概龄,補(bǔ)丁文件保留在自己的服務(wù)器,每次有更新時(shí)能即時(shí)加載饲握。
先介紹接入TInkerSDK的方式
1 在項(xiàng)目的build.gradle文件中加入
buildscript { repositories { jcenter() }
dependencies { // TinkerPatch 插件 classpath "com.tinkerpatch.sdk:tinkerpatch-gradle-plugin:1.2.2" } }
2 在app的gradle中添加依賴
dependencies {
// 若使用annotation需要單獨(dú)引用,對(duì)于tinker的其他庫都無需再引用
provided("com.tinkerpatch.tinker:tinker-android-anno:1.9.2")
compile("com.tinkerpatch.sdk:tinkerpatch-android-sdk:1.2.2")
}
3 在app目錄下私杜,創(chuàng)建tinkerpatch.gradle 這是tinker的一些配置,可以去SDKdemo里賦值一份救欧。
然后在app的build.gradle中引入
apply from: 'tinkerpatch.gradle'
介紹一些tinkerpatch.gradle中我們會(huì)用到幾個(gè)參數(shù)
baseInfo:基包文件夾名(打補(bǔ)丁包的時(shí)候衰粹,需要修改,這個(gè)會(huì)在后面打補(bǔ)丁再介紹一次)
appKey:進(jìn)入官網(wǎng)注冊(cè)一個(gè)賬號(hào)笆怠,新增APP铝耻,得到對(duì)應(yīng)的appKey。
appVision:這個(gè)一定要保持app版本跟平臺(tái)上編寫的版本一致
4 在application類中初始化Tinker
注意tinkerpatch.gradle中reflectApplication 這個(gè)參數(shù)
reflectApplication = true 的情況
public class SampleApplication extends Application {
...
@Override
public void onCreate() {
super.onCreate();
// 我們可以從這里獲得Tinker加載過程的信息
tinkerApplicationLike = TinkerPatchApplicationLike.getTinkerPatchApplicationLike();
// 初始化TinkerPatch SDK, 更多配置可參照API章節(jié)中的,初始化SDK
TinkerPatch.init(tinkerApplicationLike)
.reflectPatchLibrary()
.setPatchRollbackOnScreenOff(true)
.setPatchRestartOnSrceenOff(true)
.setFetchPatchIntervalByHours(3);
// 每隔3個(gè)小時(shí)(通過setFetchPatchIntervalByHours設(shè)置)去訪問后臺(tái)時(shí)候有更新,通過handler實(shí)現(xiàn)輪訓(xùn)的效果
TinkerPatch.with().fetchPatchUpdateAndPollWithInterval();
}
reflectApplication = false的情況為,接入 Tinker 而改造我們的 Application 類
@SuppressWarnings("unused")
@DefaultLifeCycle(application = "tinker.sample.android.app.SampleApplication",
flags = ShareConstants.TINKER_ENABLE_ALL,
loadVerifyFlag = false)
public class SampleApplicationLike extends DefaultApplicationLike {
@Override
public void onCreate() {
super.onCreate();
// 初始化TinkerPatch SDK, 更多配置可參照API章節(jié)中的,初始化 SDK
TinkerPatch.init(this)
.reflectPatchLibrary()
.setPatchRollbackOnScreenOff(true)
.setPatchRestartOnSrceenOff(true)
.setFetchPatchIntervalByHours(3);
// 每隔3個(gè)小時(shí)(通過setFetchPatchIntervalByHours設(shè)置)去訪問后臺(tái)時(shí)候有更新,通過handler實(shí)現(xiàn)輪訓(xùn)的效果
TinkerPatch.with().fetchPatchUpdateAndPollWithInterval();
}
}
介紹兩個(gè)api
如果你希望補(bǔ)丁更新更佳及時(shí)蹬刷,可以在APP啟動(dòng)或用戶登錄等一些關(guān)鍵路徑瓢捉,使用 fetchPatchUpdate(true) 強(qiáng)制檢查更新
TinkerPatch.with().fetchPatchUpdate(true);
TinkerPatch SDK 默認(rèn)在補(bǔ)丁合成成功后办成,等應(yīng)用的主進(jìn)程重新啟動(dòng)時(shí)生效泡态。若我們希望用戶可以盡快的生效,可以指定用戶鎖屏?xí)r自動(dòng)重啟應(yīng)用:
// 默認(rèn)為false
TinkerPatch.with().setPatchRestartOnSrceenOff(true);
6 項(xiàng)目中添加權(quán)限
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
接下來演示一遍流程
1 將舊代碼打包
打開Studio右側(cè)的Gradle诈火,選擇assemableDebug打包
打正式包要注意配置簽名
完成之后如下
修改baskApk的編號(hào)
完成后打開Gradle兽赁,如下選擇tinkerPatchDebug生成補(bǔ)丁包
補(bǔ)丁的位置
發(fā)布補(bǔ)丁
看完上面的流程可以試一試
熱修復(fù)學(xué)習(xí)(1):Sophix
熱修復(fù)學(xué)習(xí)(2):TinkerSDK
熱修復(fù)學(xué)習(xí)(3):Tinker組件依賴