首先,配置時我參考的是這一篇: 微信熱修複Tinker使用
和連結中文章中不同的是【我踩過的坑】以下幾點:
- 配置app.gradle 時,需要tinker庫依賴,還需要:
compile “com.android.support:multidex:1.0.1”
- app.gradle 中的 default config 添加:
,同時添加:multiDexEnabled true
dexOptions {
javaMaxHeapSize “2g”
preDexLibraries = false
jumboMode=true
- app.gradle 中的
,置為ignoreWarning=false
我第一次編譯 tinkerPatchDebug 時耗費四五個小時,還不行,出現了“遠端主機強制關閉了一個現有連接配接…”。後來把這個參數改了,就很順利了。官方解釋如下:ignoreWarning=true
- 繼承自
的類,根本不是Application類型,能使用的生命周期隻有DefaultApplicationLike
,如果需要使用Application,仍需在方法中添加:onCreate()
Application app=getApplication()
大概的一個流程,【好麻煩,千萬别弄錯了】
第一步:運作到手機上,然後取出 build/apk/下的包,放置到配置檔案中,
oldApk
所指定的位置,作為基準包
第二步:進行代碼的修改
第三步:運作右側
Gradule
裡的
app/Tasks/tinker/tinkerPatchDebug
第四步:編譯成功後,取出
build/outputs/tinkerPatch/debug/patch_signed_7zip.apk
,即是生成的差異更新檔包。将更新檔包放入手機中指定的位置。
注意事項:
1. 程式運作如果無誤的話,會在第一次運作時加載更新檔包,第二/三/四次運作時會顯示修改後的程式。同時,放入手機中的更新檔包會自動删除。【這才代表找到更新檔,并且加載更新檔成功】
2. 假設基準包是A,打了更新檔a成功後,還想打第二個更新檔,就必須将修改後的代碼(即更新檔a想要修複的代碼)重新作為基準包B,生成第二個更新檔b。
如果,仍将A作為基準包,則生成的第二個更新檔b,已經打了第一個更新檔的程式将無法加載更新檔b。
Tinker修複成功的機率很高,也不是100%,是以關于如何打更新檔,如何部署更新檔,還需要公司内部權衡。
3. 生成的更新檔包以
.apk
結尾,但釋出時最好不使用這個字尾,
以防被營運商挾持
,Tinker支援任意字尾名。
這些是我收集的關于Tinker資料的參考連結:
原理:微信 Tinker 負責人張紹文關于 Android 熱修複直播分享記錄
源碼解釋:Android 熱修複方案Tinker
接入:微信熱修複Tinker使用
官方接入指南:Tinker 接入指南