美團熱更新Robust Demo演示


1、Android Studio clone 遠程Robust項目源碼

 

 gradle 同步依賴資源,可能需要半個小時左右。

 

2、生成樣例apk包

    配置app module下build.gradle 插件 如下:

  

 執行命令  gradlew clean assembleRelease --stacktrace --no-daemon

 

 3、生成的mapping.txt和methodsMap.robust放到app/robust目錄下

  

 

4.自動生成補丁

  1)修改源碼(這里為了方便查看效果,修改SecondActivity getTextInfo方法

      getTextInfo修改前:

       

     getTextInfo修改后:

  

     

     2)配置app module下build.gradle 插件 如下

   

 

     執行命令  gradlew clean assembleRelease --stacktrace --no-daemon,判斷生成補丁成功,在控制台中有 打印 auto patch end successfully

   奇怪的是執行gradlew clean assembleRelease --stacktrace --no-daemon后,生成了補丁,並可以正常使用這個補丁,但是沒有看到 auto patch end successfully,

     而gradlew clean assembleRelease  就有打印

  

    奇怪的是,補丁生成后,為啥用這暴力方式 拋出異常錯誤來終止后續apk構建,ps :猜想 可以用清空后續tasks來結束后續apk構建,友好些。

 

     生成補丁patch.jar路徑如下:

   

  

     jadx查看補丁patch.jar(jar里面實際是dex文件)源碼

    執行命令 (修改相應apk路徑)

jadx-gui -d out E:\workspace\android_studio\Robust\app\build\outputs\apk\app-release.apk

  全局搜索 getTextInfo,結果如下

 

 

 

5.push 補丁到手機上

   

adb push E:\workspace\android_studio\Robust\app\build\outputs\robust\patch.jar /sdcard/robust/patch.jar

 

2)安裝樣例並運行apk

    (1)點擊patch按鈕,使用android 6.0版本的手機安裝,會出現如下問題:

 

 看log,可以知道權限管理問題,在android 6.0以上版本權限需要手動申請,6.0下版本不會出現以上問題。

   (2)patch成功后,跳轉到SecondActivity界面

  顯示如下圖,說明補丁修復成功:

  

        

     否則修復失敗,查看logcat

com.meituan.robust.sample W/System.err:     Suppressed: java.lang.ClassNotFoundException: Didn't find class "com.meituan.sample.robusttest.p" 
on path: DexPathList[[zip file "/data/app/com.meituan.robust.sample-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]

 可能是 在生成樣例apk,源碼發生變動,沒有同步 把生成的mapping.txt(源碼發生變動,同一個類混淆后的類名可能跟上次混淆后的類名不一樣)和methodsMap.robust放到app/robust目錄下,或者重新push patch.jar到手機上。

   

參考:

https://github.com/Meituan-Dianping/Robust/blob/master/README-zh.md


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM