阿里云熱修復(fù)官方文檔:
https://www.aliyun.com/product/hotfix?spm=5176.8142029.388261.233.kapzlu
集成步驟
1送挑、在清單文件AndroidManifest.xml添加權(quán)限:
注:6.0以上手機別忘了動態(tài)申請內(nèi)存卡讀寫權(quán)限司澎。
2、在項目根目錄下的build.gradle文件下添加:
maven {//移動熱修復(fù)
? ? ? ? ? ? url "http://maven.aliyun.com/nexus/content/repositories/releases"
}
3围肥、在app目錄下的build.gradle文件添加:
//熱修復(fù)
implementation 'com.aliyun.ams:alicloud-android-hotfix:3.2.12'
然后Sync Now項目,如果報錯,提示無法下載,需要在項目根目錄下build.gradle文件中兩個repositories節(jié)點下都添加如下代碼:
maven{ //阿里云國內(nèi)鏡像
? ? ? ? ? ? url 'http://maven.aliyun.com/nexus/content/groups/public/'
}
4设褐、新建kotlin文件SophixStubApplication外冀,繼承自阿里云的SophixApplication()類
(1)@Keep后面為自己原來的Application類雪隧,這是固定寫法
(2)在attachBaseContext方法中初始化熱修復(fù)相關(guān)代碼西轩,如果需要使用MultiDex,需要在此方法內(nèi)調(diào)用脑沿,原來自己的Application類中不要在初始化藕畔,否則沖突
(3)在SophixStubApplication類中的onCreate()方法中去查詢是否需要熱修復(fù)
完整代碼如下:
其中@Keep為自己原來的Application類,setSecretMetaData后面三個參數(shù)為在阿里云申請的key庄拇、srcret和rsa注服。
5、清單文件中措近,把之前自己的Application類改成SophixStubApplication:
<application
? ? ? ? android:name=".SophixStubApplication">
</application>
6溶弟、如果需要混淆添加如下代碼:
注意事項和錯誤解決:
1、此處SophixEntry應(yīng)指定自己之前的的Application瞭郑,并且保證自己的Application類名不被混淆辜御。
2、自己真實的Applcation不可以繼承MultiDexApplication凰浮,否則沖突我抠。
3、發(fā)布補丁時袜茧,應(yīng)用版本指的是版本名稱versionName菜拓,而不是版本號,代碼中設(shè)置的版本名稱必須和阿里云后臺一致笛厦,之前我測試時候就是因為在阿里云后臺隨便死了個版本名稱纳鼎,導(dǎo)致一致測試失敗。
4裳凸、如果報錯:Error:Program type already present: com.ta.utdid2.b.a.a贱鄙。解決方案有兩個:
(1)如果項目中有支付寶支付,則需要重新下載不包含utdid的sdk包姨谷,支付寶支付sdk下載頁面有說明逗宁。
(2)在app目錄下的build.gradle文件相應(yīng)集成熱修復(fù)的依賴改成,通過代碼方式移除掉utdid沖突問題梦湘。
implementation ('com.aliyun.ams:alicloud-android-hotfix:3.2.12'){
? ? ? ? exclude(module:'alicloud-android-utdid')
? ? }
5瞎颗、如果在編譯或者運行中報kotlin的協(xié)程錯誤
Module with the Main dispatcher is missing. Add dependency providing the Main dispatcher, e.g. ‘kotlinx-coroutines-android’
則盡量去使用阿里云熱修復(fù)的最新版件甥,老版本確實有這個問題。
6哼拔、在使用阿里云補丁生成包工具時引有,盡量勾選冷啟動方式去修復(fù),避免崩潰問題倦逐。