記錄文章方便以后使用~~~~
1.嗯痰娱。弃榨。? 第一步肯定是要先有阿里云的賬號澀:https://www.aliyun.com?自行注冊
2.官方文檔: SDK穩(wěn)健接入_快速入門_移動熱修復(fù)-阿里云
? ? 菩收,,快速接入鲸睛,在Android 9.0以上系統(tǒng)會有發(fā)生崩潰的風(fēng)險(xiǎn)坛梁。選擇穩(wěn)健接入方式接入,這點(diǎn)快速接入說明上說的很清楚了
3.集成準(zhǔn)備腊凶,在project的build.gradle文件中添加:url"http://maven.aliyun.com/nexus/content/repositories/releases"
4.添加依賴:implementation'com.aliyun.ams:alicloud-android-hotfix:3.2.13'
5.sophix需要使用到的權(quán)限:READ_EXTERNAL_STORAGE做好動態(tài)獲取權(quán)限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
6.到阿里云控制臺創(chuàng)建產(chǎn)品
7.然后選擇添加應(yīng)用
8.填寫相應(yīng)的信息,提交之后會給你一個json格式的文件拴念。需要下載下來
9.當(dāng)然钧萍,提交的時候沒有下載也可以在應(yīng)用管理里面去下載的,下載后放入對應(yīng)位子
11.在androidmanifest里的application節(jié)點(diǎn)下添加:替換相應(yīng)的value
android:name="com.taobao.android.hotfix.IDSECRET"
android:value="App ID" />
android:name="com.taobao.android.hotfix.APPSECRET"
android:value="App Secret" />
android:name="com.taobao.android.hotfix.RSASECRET"
android:value="RSA密鑰" />
12.混淆配置政鼠,直接復(fù)制扔進(jìn)去
#基線包使用风瘦,生成mapping.txt
-printmapping mapping.txt
#生成的mapping.txt在app/build/outputs/mapping/release路徑下,移動到/app路徑下
#修復(fù)后的項(xiàng)目使用公般,保證混淆結(jié)果一致
#-applymapping mapping.txt
#hotfix
-keep class com.taobao.sophix.**{*;}
-keep class com.ta.utdid2.device.**{*;}
-dontwarn com.alibaba.sdk.android.utils.**
#防止inline
-dontoptimize
-keepclassmembers class com.my.pkg.MyRealApplication {
public ();
}
# 如果不使用android.support.annotation.Keep則需加上此行
# -keep class com.my.pkg.SophixStubApplication$RealApplicationStub
13.創(chuàng)建一個Sophix入口類万搔,專門用于初始化Sophix,不應(yīng)包含任何業(yè)務(wù)邏輯官帘。
* 此類必須繼承自SophixApplication瞬雹,onCreate方法不需要實(shí)現(xiàn)。
* 此類不應(yīng)與項(xiàng)目中的其他類有任何互相調(diào)用的邏輯刽虹,必須完全做到隔離酗捌。
* AndroidManifest中設(shè)置application為此類,而SophixEntry中設(shè)為原先Application類涌哲。
* 注意原先Application里不需要再重復(fù)初始化Sophix胖缤,并且需要避免混淆原先Application類。
* 如有其它自定義改造阀圾,請咨詢官方后妥善處理哪廓。這是官方原話~~~
所以我們這里需要兩個application
第一個初始化阿里熱更新的,并且androidmanifest里面的name也改成此application
需要注意
@Keep
@SophixEntry(MVPApplication.class)? ?初烘、涡真、、账月、综膀、?MVPApplication?是第二個application
static class RealApplicationStub? {}
此application的提示不用管,下面是代碼:
public class SophixStubApplicationextends SophixApplication {
public static final StringTAG ="ALiApplication";
? ? // 此處SophixEntry應(yīng)指定真正的Application局齿,并且保證RealApplicationStub類名不被混淆剧劝。
? ? @Keep
? ? @SophixEntry(MVPApplication.class)
static class RealApplicationStub? {}
@Override
? ? protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
? ? ? ? initSophix();
? ? }
private void initSophix() {
Log.i(TAG, "initSophix: ");
String appVersion ="0.0.0";
? ? ? ? try {
appVersion =this.getPackageManager()
.getPackageInfo(this.getPackageName(), 0)
.versionName;
? ? ? ? }catch (Exception e) {
Log.i(TAG, "initSophix: "+e.getMessage());
? ? ? ? }
final SophixManager instance = SophixManager.getInstance();
? ? ? ? instance.setContext(this).setAppVersion(appVersion).setSecretMetaData(null, null, null).setEnableDebug(true).setEnableFullLog()
.setPatchLoadStatusStub((mode, code, info, handlePatchVersion) -> {
if (code == PatchStatus.CODE_LOAD_SUCCESS) {
Log.i(TAG, "sophix load patch success!");
? ? ? ? ? ? ? ? ? ? }else if (code == PatchStatus.CODE_LOAD_RELAUNCH) {
// 如果需要在后臺重啟,建議此處用SharePreference保存狀態(tài)抓歼。
? ? ? ? ? ? ? ? ? ? ? ? Log.i(TAG, "sophix preload patch success. restart app to make effect.");
? ? ? ? ? ? ? ? ? ? }
}).initialize();
? ? }
}
//? 分割線 ------------------------------------------
public class MVPApplicationextends Application {
@Override
? ? public void onCreate() {
super.onCreate();
? ? ? ? //如果不需要阿里熱修復(fù)? 注釋這行? 并且在AndroidManifest切換Application讥此!
? ? ? ? SophixManager.getInstance().queryAndLoadNewPatch();
? ? ? ? //工具類
? ? ? ? Utils.init(this);
? ? }
}
到此---------------我們就可以開始測試了拢锹,
我的測試方式是請求一個接口,第一個包請求成功不會有任何提示和操作萄喳,第二個包會有一個Toast
請求之后可以看到:
此時前往配置岔包,因?yàn)槲覀€人之前已經(jīng)測試過了卒稳,所以版本是1.2,兩個包的版本必須一致
下一步修改第二個包的代碼他巨。需要更新的地方~
好了充坑。。染突。什么都準(zhǔn)備好了捻爷,如何實(shí)現(xiàn)熱更新呢?? 現(xiàn)在需要一個工具來生成補(bǔ)斗萜蟆:
https://help.aliyun.com/document_detail/93826.html?spm=a2c4g.11186623.2.10.7ad55b841EkGk3前往下載對應(yīng)的系統(tǒng)版本
我已經(jīng)生成了也榄,路徑自行配置,放在這是方便截圖司志,現(xiàn)在拿到補(bǔ)丁了甜紫。回去上傳
上傳之后還需要手動點(diǎn)擊發(fā)布骂远,狀態(tài)是就緒囚霸,還需要自行測試一遍才能真正的發(fā)布
可直接點(diǎn)擊掃描驗(yàn)證補(bǔ)丁下載工具測試,可以看見我這里啟動app會初始化sophix吧史,如果沒有初始化邮辽,那么肯定是有問題的澀
打開app?確認(rèn)初始化了,然后打開補(bǔ)丁測試工具贸营,連接 --?掃描補(bǔ)丁二維碼 --? 應(yīng)用吨述,再次退出自己的app,重新打開钞脂,測試修改過的地方
本地測試通過4г啤!冰啃!如果沒有通過邓夕,請自行查看接入步驟是否有誤?然后現(xiàn)在可以發(fā)布了~
發(fā)布成功后阎毅,卸載重新安裝舊包焚刚,日志會提示sophix preload patch success. restart app to make effect.
更新完成重新啟動生效
中途我也遺漏了幾個地方? ?都補(bǔ)起了步驟? 若還有遺漏的地方? ?望指出
溜了溜了