微信熱修復(fù)Tinker使用

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中
>  ![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中實現(xiàn)你Application 類需要實現(xiàn)的內(nèi)容。

簡單使用

1.先將你的app運行到手機(jī)上,并復(fù)制一份到第一步中的oldApk目錄
2.修改app的代碼,例如修改文字,Toast等,在實際中即修復(fù)bug。
2.在android-studio右邊點開gradle窗口,選擇tinkerPatchDebug,并運行生成補丁包

222.png

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

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

123.png

結(jié)語

以上介紹了Tinker的使用方法,作者是個菜鳥,難免有講的不好的地方,請見諒。
示例Demo

這是Tinker的項目地址,也有很好的講解,可以深入學(xué)習(xí)。

官方demo:tinker-sample-android 
注:官方demo 需要作為project單獨打開

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.熱修復(fù): 熱修復(fù)從原理上說應(yīng)該是屬于插件化的一類,我們可以用熱修復(fù)來處理線上緊急的bug,而不需要提示用戶重新...
    茴香豆的第五種寫法閱讀 1,577評論 0 1
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,366評論 25 708
  • Tinker使用 前言 寫在前面的話,在上家公司一直在主導(dǎo)組件框架的開發(fā),所以對Android領(lǐng)域組件化,熱更新的...
    徐正峰閱讀 2,079評論 6 6
  • 前言 熱更新能力是Bugly為解決開發(fā)者緊急修復(fù)線上bug,而無需重新發(fā)版讓用戶無感知就能把問題修復(fù)的一項能力。B...
    Smile__EveryDay閱讀 25,143評論 31 19
  • 中國傳統(tǒng)圖案指的是由歷代沿傳下來的具有獨特民族藝術(shù)風(fēng)格的圖案。中國傳統(tǒng)圖案源于原始社會的彩陶圖案,已有6000~7...
    藝伙閱讀 1,439評論 0 6

友情鏈接更多精彩內(nèi)容