Tinker是微信前段時間開源的Android熱補丁方案,它支持動態(tài)下發(fā)代碼、So庫以及資源,讓應(yīng)用能夠在不需要重新安裝的情況下實現(xiàn)更新。當(dāng)然,你也可以使用Tinker來更新你的插件。
同時,還有許多其他公司使用的熱補丁方案,如比如QZone,AndFix,Dexposed等等;網(wǎng)上有許多他們之間的比較文章,大家可以參考后選擇適合自己的。本文就簡單介紹下Tinker的使用。
添加依賴
這一步很簡單,照著 github接入指南 上做就好了。
- 首先在項目的build.gradle中添加 tinker-patch-gradle-plugin 依賴
buildscript {
dependencies {
classpath ('com.tencent.tinker:tinker-patch-gradle-plugin:1.7.1')
}
}
* 然后在app的**gradle**文件 **app/build.gradle**添加tinker的庫依賴以及apply tinker的gradle插件.
>```
dependencies {
//可選,用于生成application類
compile('com.tencent.tinker:tinker-android-anno:1.7.1')
//tinker的核心庫
compile('com.tencent.tinker:tinker-android-lib:1.7.1')
}
...
...
//apply tinker插件
apply plugin: 'com.tencent.tinker.patch'
- 在app/builde.gradle文件的dependencies外面添加一些配置 :
tinkerPatch {
//有問題的apk的地址
oldApk = "F://app_bug.apk"
ignoreWarning = false
useSign = true
buildConfig{
tinkerId = "1.0"
}
packageConfig{
configField("TINKER_ID", "1.0")
}
dex{
dexMode = "jar"
pattern = ["classes.dex", "assets/secondary-dex-?.jar"]
loader = ["com.tencent.tinker.loader.", "com.tinkertest.Application"]
}
lib{
pattern = ["lib/armeabi/.so","lib/arm64-v8a/.so","lib/armeabi-v7a/.so","lib/mips/.so","lib/mips64/.so","lib/x86/.so","lib/x86_64/.so"]
}
res{
pattern = ["res/", "assets/*", "resources.arsc", "AndroidManifest.xml"]
largeModSize = 100
}
sevenZip{
zipArtifact = "com.tencent.mm:SevenZip:1.1.10"
}
##### 自定義Application類
1.寫一個SimpleAppLike類繼承自DefaultApplicationLike,并添加注解。使用注解生成application類*demo.com.tinkerdemo.SimpleApp*,并將其添加到manifest中
> 
2.重寫SimpleAppLike里面的*onBaseContextAttached(Context base)*方法,并添加*registerActivityLifecycleCallbacks(Application.ActivityLifecycleCallbacks callback)*方法。
> ```
@Override
public void onBaseContextAttached(Context base) {
super.onBaseContextAttached(base);
MultiDex.install(base);
TinkerInstaller.install(this);
}
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
public void registerActivityLifecycleCallbacks(Application.ActivityLifecycleCallbacks callback) {
getApplication().registerActivityLifecycleCallbacks(callback);
}
3.在SimpleAppLike中實現(xiàn)你Application 類需要實現(xiàn)的內(nèi)容。
簡單使用
1.先將你的app運行到手機(jī)上,并復(fù)制一份到第一步中的oldApk目錄
2.修改app的代碼,例如修改文字,Toast等,在實際中即修復(fù)bug。
2.在android-studio右邊點開gradle窗口,選擇tinkerPatchDebug,并運行生成補丁包

3.在app->build->outputs->tinkerPatch目錄下選擇patch_signed_7zip.apk;并拷到指定手機(jī)目錄(指定的運行目錄,見步驟5)

4.在app中執(zhí)行更新,退出后再進(jìn)入app,就能看到修改后的效果。
5.圖中path為指定目錄,在執(zhí)行TinkerInstaller.onReceiverUpgradePatch()修復(fù)時需要傳入的path即為存放生成的補丁包的位置。

結(jié)語
以上介紹了Tinker的使用方法,作者是個菜鳥,難免有講的不好的地方,請見諒。
示例Demo
這是Tinker的項目地址,也有很好的講解,可以深入學(xué)習(xí)。
官方demo:tinker-sample-android
注:官方demo 需要作為project單獨打開