Tinker是微信前段時(shí)間開源的Android熱補(bǔ)丁方案,它支持動(dòng)態(tài)下發(fā)代碼抗斤、So庫以及資源禽篱,讓應(yīng)用能夠在不需要重新安裝的情況下實(shí)現(xiàn)更新畜伐。當(dāng)然馍惹,你也可以使用Tinker來更新你的插件躺率。
同時(shí)玛界,還有許多其他公司使用的熱補(bǔ)丁方案,如比如QZone,AndFix,Dexposed等等悼吱;網(wǎng)上有許多他們之間的比較文章慎框,大家可以參考后選擇適合自己的。本文就簡單介紹下Tinker的使用后添。
添加依賴
這一步很簡單笨枯,照著 github接入指南 上做就好了。
- 首先在項(xiàng)目的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.寫一個(gè)SimpleAppLike類繼承自DefaultApplicationLike,并添加注解馅精。使用注解生成application類*demo.com.tinkerdemo.SimpleApp*,并將其添加到manifest中
> ![1111.png](http://upload-images.jianshu.io/upload_images/2124523-64f85d7c500447d7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
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中實(shí)現(xiàn)你Application 類需要實(shí)現(xiàn)的內(nèi)容。
簡單使用
1.先將你的app運(yùn)行到手機(jī)上茄蚯,并復(fù)制一份到第一步中的oldApk目錄
2.修改app的代碼压彭,例如修改文字,Toast等渗常,在實(shí)際中即修復(fù)bug壮不。
2.在android-studio右邊點(diǎn)開gradle窗口,選擇tinkerPatchDebug,并運(yùn)行生成補(bǔ)丁包
3.在app->build->outputs->tinkerPatch目錄下選擇patch_signed_7zip.apk皱碘;并拷到指定手機(jī)目錄(指定的運(yùn)行目錄,見步驟5)
4.在app中執(zhí)行更新询一,退出后再進(jìn)入app,就能看到修改后的效果尸执。
5.圖中path為指定目錄家凯,在執(zhí)行TinkerInstaller.onReceiverUpgradePatch()修復(fù)時(shí)需要傳入的path即為存放生成的補(bǔ)丁包的位置。
結(jié)語
以上介紹了Tinker的使用方法,作者是個(gè)菜鳥如失,難免有講的不好的地方绊诲,請見諒。
示例Demo
這是Tinker的項(xiàng)目地址褪贵,也有很好的講解掂之,可以深入學(xué)習(xí)。
官方demo:tinker-sample-android
注:官方demo 需要作為project單獨(dú)打開