Android 熱修復Bugly和Sophix介紹

2021-10-25 22:20:22 字數 1925 閱讀 4206

特點:

1、從底層native直接替換原有方法,在原來類的基礎上進行修改。核心在於replacemethod函式,所以只支援方法的替換,對於方法的增刪、資源更新、so檔案更新、類的屬性替換都不支援。

2、可以立即生效,消耗很低,實測上傳官網之後可以立即進行修改

3、補丁包很小,下面的就是之前實際 測試的補丁包,只是修改了乙個方法和布局檔案,內部只包含修改的內容,所以補丁包很小

4、由於更換底層native方法,因此對於深度定製的國產機可能存在機型適配問題

5、andfix只能修復方法的bug,不能修改資源和so檔案的bug,並且已經4年多沒有更新了,存在相容問題;sophix可以修復方法bug、資源、so檔案的問題,但是sophix是收費的,兩者接入都是比較簡單的,

接入:根據官網的接入規則接入包,然後使用sophix提供工具生成修復包,直接上傳官網即可

阿里的emas移動研發平台提供多個功能

1、移動測試:遠**機測試、執行測試、用例測試

2、移動熱修復:熱修復,可以過濾版本機型

3、崩潰分析:崩潰、卡頓、異常

4、效能分析:啟動速度、頁面效能、網路請求、頁面載入耗時

5、遠端日誌:裝置的日誌

6、移動推送:推送相關資訊

7、移動使用者反饋:使用者反饋

8、移動資料分析:統計使用者的資訊,包括日活,使用者操作日誌

9、httpdns:經過阿里雲的網路協議解析

特點:1、讓classloader去載入新的類。這就必須重新啟動,而且是冷啟動。在沒有走到業務邏輯的時候,將變更的補丁和原有的補丁一起組合成新的dex檔案,並且將變更的補丁檔案放在最前面,這樣就能使用補丁檔案,而不會繼續使用後面的原來檔案了,變相達到修復的功能。可以修復各類檔案,包括類、資源檔案、so檔案

2、必須重新啟動才能生效,消耗很低,但是生效需要等待十幾分鐘,而且必須冷啟動

3、因為tinker是開源的,之前的使用者就很多,文件很多

4、占用記憶體很大

5、今年被google play封禁了,不給使用熱修復功能

6、免費的

接入:操作步驟參考官網介紹即可:

搭建的環境(實測有效):

gradle:3.4.0+

5.4.1

as版本:4.1

tinker-support外掛程式版本:1.2

.1classpath "com.tencent.bugly:tinker-support:1.2.1"

tinker版本:1.9

.6// 指定tinker依賴版本(注:應用公升級1.3.5版本起,不再內建tinker)

implementation 'com.tencent.tinker:tinker-android-lib:1.9.6'

bugly版本:

implementation 'com.tencent.bugly:crashreport_upgrade:1.3.5'

implementation 'com.tencent.bugly:nativecrashreport:2.2.0'

multidex版本:

implementation "com.android.support:multidex:1.0.3"

**注意點:**執行補丁任務的時候,是選擇tinker-support下的命令buildetinkerpatchrelease,而不是上面的tinker下面的tinkerpatchrelease,上面的命令生成的不是補丁包,不包含補丁資訊,是無法上傳的

上傳的包也是目錄output/patch下的包,而不是output/apk/tinkerpatch下面的包

bugly提供其他功能:作為商業級應用,二者熱修復功能基本都滿足,包括修復類、資源檔案、so檔案,所以使用全看個人選擇了。

加固 多渠道打包 Bugly統計 熱修復

前言 記錄下專案中使用的方案,本方案是基於樂固進行的加固,在此基礎上多渠道打包,具體使用請看流程圖。下面的方案會在文中有詳細的說明。詳解 一 接入bugly 最後看下bugly提供的功能模組 二 新增reader依賴 獲取渠道號的依賴,walle把它提取出來了,可以單獨使用。dependencies...

Android 熱修復總結

平台阿里 andfix 阿里 hotfix1.x nuwa 美團robust 阿里 hotfix2.x 即時生效 yesyes nono yes看情況 效能損耗 較小較小 較大較小 較小較小 補丁包大小 一般一般 較大較小 較小較小 佔rom體積 較小較小 一般較大 較小看情況 接入複雜度 簡單簡單...

Android 熱修復思路整理

流行的熱修復方式 按技術特點劃分 本文採用的熱修復 思路 載入應用程式的classloder classloader classloader context.getclassloader for file file loadeddex 因為系統通過dexclassloder來載入dex,所以需要將新...