阿裡雲最近推出了移動熱修複服務,聽說這個服務傻瓜式接入,性能相對較好,對新技術比較好奇的我決定嘗試一下。 移動熱修複.png 移動熱修複.png 首先,需要開通這個服務,創建應用 創建應用.png 創建應用.png 然後,在項目中接入服務。按照文檔所述,第一步:gradle遠程倉庫依賴, 打開項目找 ...
阿裡雲最近推出了移動熱修複服務,聽說這個服務傻瓜式接入,性能相對較好,對新技術比較好奇的我決定嘗試一下。
移動熱修複.png
首先,需要開通這個服務,創建應用
創建應用.png
然後,在項目中接入服務。按照文檔所述,
第一步:gradle遠程倉庫依賴, 打開項目找到app的build.gradle文件,添加如下配置:
添加maven倉庫地址:
repositories {
maven {
url "http://maven.aliyun.com/nexus/content/repositories/releases"
}
}
第二步:添加gradle坐標版本依賴:
compile 'com.aliyun.ams:alicloud-android-hotfix:3.0.6'
第三步:在AndroidManifest.xml中添加許可權:
<!-- 網路許可權 -->
<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"/>
<!--讀取手機設備碼-->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
文檔中並沒有提到最後一個許可權,不過我運行項目的時候有提示需要這個許可權。
第四步:配置AndroidManifest文件:
<meta-data
android:name="com.taobao.android.hotfix.IDSECRET"
android:value="App ID" />
<meta-data
android:name="com.taobao.android.hotfix.APPSECRET"
android:value="App Secret" />
<meta-data
android:name="com.taobao.android.hotfix.RSASECRET"
android:value="RSA密鑰" />
這些信息可以在新建的應用中找到
應用信息.png
第五步:混淆配置:
#基線包使用,生成mapping.txt
-printmapping mapping.txt
#生成的mapping.txt在app/buidl/outputs/mapping/release路徑下,移動到/app路徑下
#修複後的項目使用,保證混淆結果一致
#-applymapping mapping.txt
#hotfix
-keep class com.taobao.sophix.**{*;}
-keep class com.ta.utdid2.device.**{*;}
#防止inline
-dontoptimize
第六步:在Application中初始化:
initialize的調用應該儘可能的早,必須在Application.attachBaseContext()或者Application.onCreate()的最開始進行SDK初始化操作,否則極有可能導致崩潰。
// initialize最好放在attachBaseContext最前面
SophixManager.getInstance().setContext(this)
.setAppVersion(appVersion)
.setAesKey(null)
.setEnableDebug(true)
.setPatchLoadStatusStub(new PatchLoadStatusListener() {
@Override
public void onLoad(final int mode, final int code, final String info, final int handlePatchVersion) {
// 補丁載入回調通知
if (code == PatchStatus.CODE_LOAD_SUCCESS) {
// 表明補丁載入成功
} else if (code == PatchStatus.CODE_LOAD_RELAUNCH) {
// 表明新補丁生效需要重啟. 開發者可提示用戶或者強制重啟;
// 建議: 用戶可以監聽進入後臺事件, 然後應用自殺
} else if (code == PatchStatus.CODE_LOAD_FAIL) {
// 內部引擎異常, 推薦此時清空本地補丁, 防止失敗補丁重覆載入
// SophixManager.getInstance().cleanPatches();
} else {
// 其它錯誤信息, 查看PatchStatus類說明
}
}
}).initialize();
// queryAndLoadNewPatch不可放在attachBaseContext 中,否則無網路許可權,建議放在後面任意時刻,如onCreate中
SophixManager.getInstance().queryAndLoadNewPatch();
到此,集成完畢。
接下來,開始測試。
我剛開始直接在原有項目中擼了一遍,結果跟友盟有衝突(看來嘗試新東西還是得新建項目,偷不得懶)。。。所以又新建了一個項目,重新擼一遍。。。
1.舊版本:不顯示“HelloWord”;
2.新版本:顯示“HelloWord”;
3.下載補丁工具:https://help.aliyun.com/document_detail/53247.html?spm=5176.doc53240.6.548.o2zESp
4.使用補丁工具生成補丁。
5.上傳補丁文件。在APP列表中,點擊“管理”,添加版本(版本要和app版本一致)。
添加版本.png
點擊對應版本的“查看詳情”,上傳補丁。
上傳補丁.png
點擊對應補丁版本的“查看詳情”,裡面可以發佈補丁。
6.發佈補丁。
最後手機上的APP沒有立即顯示“HelloWord”,關閉重啟APP後成功顯示“HelloWord”。雖然沒有即時生效,但至少成功更新了。