天天看點

Tinker熱修複,配置時的坑

首先,配置時我參考的是這一篇: 微信熱修複Tinker使用

和連結中文章中不同的是【我踩過的坑】以下幾點:

  1. 配置app.gradle 時,需要tinker庫依賴,還需要:
    compile “com.android.support:multidex:1.0.1”
  2. app.gradle 中的 default config 添加:

    multiDexEnabled true

    ,同時添加:

    dexOptions {

    javaMaxHeapSize “2g”

    preDexLibraries = false

    jumboMode=true

  3. app.gradle 中的

    ignoreWarning=false

    ,置為

    ignoreWarning=true

    我第一次編譯 tinkerPatchDebug 時耗費四五個小時,還不行,出現了“遠端主機強制關閉了一個現有連接配接…”。後來把這個參數改了,就很順利了。官方解釋如下:
    Tinker熱修複,配置時的坑
  4. 繼承自

    DefaultApplicationLike

    的類,根本不是Application類型,能使用的生命周期隻有

    onCreate()

    ,如果需要使用Application,仍需在方法中添加:
    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 接入指南