微信熱補(bǔ)丁Tinker -- 項目集成

在上篇文章Android熱補(bǔ)丁方案中介紹了Tinker的原理框架鞋拟,那么我們現(xiàn)在就從初級入門開始,學(xué)習(xí)一下它的項目集成惹资,首先贺纲,我們來看看它官方Demo的使用,體驗一下熱修復(fù)褪测。

體驗官方Demo

步驟:

  • 下載 Sample
    打開Tinker開源代碼地址Tinker猴誊,把 Tinker 項目下載到本地后,使用 AS 導(dǎo)入項目 tinker-sample-android侮措;

  • 設(shè)置 tinkerId
    打開 app 的 build.gradle文件懈叹,找到getTinkerIdValue()方法中:TINKER_ID : gitSha(),將gitSha()替換成自己想要的 tinkerId 命名規(guī)則分扎;

  • 編譯 Base APK
    編譯打包澄成,此時 Tinker 會在工程的 app/build/bakApk/ 目錄下保存打包好的apk文件,先在手機(jī)上安裝該 apk ;

  • 設(shè)置Base APK路徑
    找到剛才生成的 apk 文件墨状,復(fù)制其完整文件名,在 app 的 build.gradle 文件卫漫,設(shè)置:
    tinkerOldApkPath = "${bakPath}/<剛才生成的apk文件名>"

  • 修復(fù) Bug
    在 Base Apk的代碼基礎(chǔ)上修改代碼修復(fù) Bug;

  • 生成補(bǔ)丁
    找到 Gradle 腳本中的tinker目錄下 tinkerPatchDebug雙擊運(yùn)行它將生成 debug 版的 patch (補(bǔ)丁) apk 文件肾砂,在 output/tinkerPatch/debug 下列赎,文件為 patch_signed_7zip.apk

  • 打入補(bǔ)丁
    patch_signed_7zip.apk 這個文件拷貝到 Android 設(shè)備的 ExternalStorageDirectory() 路徑下.文件的路徑可以隨意設(shè)定,只需在 MainActivity 中指明補(bǔ)丁 Apk 路徑即可镐确;隨后點擊 Demo 中 Load Patch 按鈕包吝,提示成功后,點擊 Kill Self 結(jié)束當(dāng)前進(jìn)程源葫,重啟應(yīng)用诗越,即可看到所改的代碼修復(fù)的 Bug 現(xiàn)象。

項目集成

步驟:

(1) 在項目的 build.gradle 中臼氨,添加 tinker-patch-gradle-plugin 的依賴掺喻;

buildscript {
    dependencies {
        classpath ('com.tencent.tinker:tinker-patch-gradle-plugin:${TINKER_VERSION}')
    }
}

TINKER_VERSION 可以在項目 properties 中配置芭届。

(2) 在 app 的 gradle 文件 app/build.gradle 储矩,我們需要添加 Tinker 的庫依賴以及 apply tinke r的 gradle 插件;

dependencies {
    // tinker 熱修復(fù)導(dǎo)入
    compile('com.tencent.tinker:tinker-android-lib:${TINKER_VERSION}') { changing = true }
    compile('com.tencent.tinker:tinker-android-anno:${TINKER_VERSION}') { changing = true }
    // 多dex支持
    compile 'com.android.support:multidex:1.0.1'
}

// apply tinker插件
apply plugin: 'com.tencent.tinker.patch' 

(3) 參照官方 Sample 工程褂乍,把 gradle 文件中剩下的拷貝進(jìn)來(需要的考,已有的不需要考)逃片;
在這里,我們可以定制一些自己的配置褥实,比如 Tinkerid、PatchVersion 等损离,并且記得修改 buildWithTinker() 中 dex 的 loader 修改成自己的 Application 名。

def createTinkerId(){
    return YourTinkerID;
}

def createPatchVersion(){
    return YourPatchVersion;
}

有些具體的gradle配置的參數(shù)貌踏,大家可以參考Tinker介入指南中的表格窟勃,要是你英語夠好的話,可以去看sample中的app/build.gradle的英文介紹眷昆。

(4) 拷貝官方 Sample 項目中的文件并配置;

  • 拷貝 keyStore 文件夾垦藏;

  • 拷貝 keep_in_main_dex.txt 混淆文件且自定義其中的application伞访,并在 proguard-rules 混淆文件加入保護(hù):
    -keepattributes SourceFile,LineNumberTable

  • 拷貝 java 文件,并作適當(dāng)修改弟灼,如修改文件名冒黑、在 service 的 onPatchResult 函數(shù)中加入自己的邏輯

(5) 配置ApplicationLike代理

XXApplicationLike.java 中的注解包名,用于自動生成 Applicaion抡爹,并在 Menifest 中給 Application 節(jié)點設(shè)置 name ,指向自動生成的 Application:

 -public class YourApplication extends Application {
 +public class YourApplicationLike extends DefaultApplicationLike {

同時我們需要將 gradle 的 dex loader 中的 Application 改為新的 YourApplication:

dex {
    loader = ["com.tencent.tinker.loader.*",
        //warning, you must change it with your application
        "tinker.sample.android.YourApplication"
    ]       
}

然后配置一下 ApplicationLike 中 Application 以及 Tinker 配置:

@DefaultLifeCycle(
    application = ".SampleApplication",                       //application類名
    flags = ShareConstants.TINKER_ENABLE_ALL,                 //tinkerFlags
    loaderClass = "com.tencent.tinker.loader.TinkerLoader",   //loaderClassName, 這里使用默認(rèn)即可!
    loadVerifyFlag = false)                                   //tinkerLoadVerifyFlag
public class SampleApplicationLike extends DefaultApplicationLike {

采用 Annotation 生成 Application ,需要將原來的 Application 類刪掉欧穴。
將原本 Application 中的內(nèi)容全部拷貝到 ApplicationLike.java 中涮帘。

(6) 編譯和補(bǔ)丁

  • 每次編譯或發(fā)包將安裝包與mapping文件備份笑诅;
  • 若有補(bǔ)丁包的需要,按自身需要修改你的代碼弦叶、庫文件等妇多;
  • 將備份的基準(zhǔn)安裝包與mapping文件輸入到tinkerPatch的配置中;
  • 運(yùn)行tinkerPatchRelease砌梆,即可自動編譯最新的安裝包,并與輸入基準(zhǔn)包作差異桃序,得到最終的補(bǔ)丁包烂瘫。

在打補(bǔ)丁時注意gralde中關(guān)于路徑的修改:


Tinker 接入文檔


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市势誊,隨后出現(xiàn)的幾起案子谣蠢,更是在濱河造成了極大的恐慌,老刑警劉巖眉踱,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件勋锤,死亡現(xiàn)場離奇詭異,居然都是意外死亡叁执,警方通過查閱死者的電腦和手機(jī)谈宛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進(jìn)店門吆录,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人恢筝,你說我怎么就攤上這事巨坊。” “怎么了侄柔?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長移剪。 經(jīng)常有香客問我薪者,道長,這世上最難降的妖魔是什么言津? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任纺念,我火速辦了婚禮,結(jié)果婚禮上陷谱,老公的妹妹穿的比我還像新娘。我一直安慰自己渣窜,他們只是感情好宪躯,可當(dāng)我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著详瑞,像睡著了一般臣缀。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上精置,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天,我揣著相機(jī)與錄音番宁,去河邊找鬼。 笑死蝶押,一個胖子當(dāng)著我的面吹牛政供,可吹牛的內(nèi)容都是我干的朽基。 我是一名探鬼主播离陶,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼招刨,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了沉眶?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤柳击,失蹤者是張志新(化名)和其女友劉穎片习,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體状知,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡孽查,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了西设。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片洲胖。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出腐晾,到底是詐尸還是另有隱情,我是刑警寧澤藻糖,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布巨柒,位于F島的核電站柠衍,受9級特大地震影響晶乔,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜正罢,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望履怯。 院中可真熱鬧裆泳,春花似錦、人聲如沸工禾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽笙隙。三九已至,卻和暖如春竟痰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背坏快。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留昧旨,地道東北人祥得。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像乒疏,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子怕吴,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容