Sophix熱修復實踐
阿新 • • 發佈:2019-02-01
實踐環境
1 . Android Studio
2 . win10 64位
整合步驟
在阿里雲控制檯新建app
- 獲取appId、secret、以及rsa祕鑰 網址連結
依次點選產品->移動服務->移動熱修復
點選管理控制檯
進入到後臺 新建app 檢視三個配置引數
app配置
1 . 在app中的build.gradle
中配置maven倉庫和依賴
repositories {
maven {
url "http://maven.aliyun.com/nexus/content/repositories/releases"
}
}
dependencies {
...
//如果其它阿里系SDK也可能依賴了utdid這個SDK, 編譯期間報utdid重複, 此時進行如下處理即可,
// 關閉傳遞性依賴,沒有其他可以將大括號刪除:
compile ('com.aliyun.ams:alicloud-android-hotfix:3.0.3') {
exclude(module:'alicloud-android-utdid')
}
...
}
2 . 在AndroidManifest
檔案中新增Sophix
許可權
<!--網路許可權-->
<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"/>
3 . 在AndroidManifest
檔案中配置上個步驟獲取到的appId、secret、rsa祕鑰
<meta-data
android:name="com.taobao.android.hotfix.IDSECRET"
android:value="your id" />
<meta-data
android:name="com.taobao.android.hotfix.APPSECRET"
android:value="your secret" />
<meta-data
android:name="com.taobao.android.hotfix.RSASECRET"
android:value="your rsa" />
4 . 新建Application子類
在
attachBaseContext
初始化SophixManager
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
// 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) {
// 表明新補丁生效需要重啟. 開發者可提示使用者或者強制重啟;
// 建議: 使用者可以監聽進入後臺事件, 然後應用自殺
// SophixManager.getInstance().killProcessSafely();//安全自殺應用推薦
} else if (code == PatchStatus.CODE_LOAD_FAIL) {
// 內部引擎異常, 推薦此時清空本地補丁, 防止失敗補丁重複載入
SophixManager.getInstance().cleanPatches();
} else {
// 其它錯誤資訊, 檢視PatchStatus類說明
Log.d("lzc", code + "");
}
}
}).initialize();
}
注意:上面的appVersion與app版本無關可以自己定義只要與自己控制檯中版本一致即可。我這裡定義的是private static final String appVersion = “1.0.0”;
在
onCreate
中請求差異包
// queryAndLoadNewPatch不可放在attachBaseContext 中,否則無網路許可權,建議放在後面任意時刻,如onCreate中
SophixManager.getInstance().queryAndLoadNewPatch();
5 . 混淆配置
在app目錄下的proguard-rules.pro
檔案下新增如下程式碼:
#基線包使用,生成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
測試Sophix
1 . 下載window 差異打包工具
連結地址
2 . 將新舊差異包差異打包
3 . 這其中可以設定差異包所用到的簽名,簽名必須與app簽名一致 保證安全性
4 . 點選go 就會生成差異包以.jar結尾 路勁就是自己設定的
5 . 將生成的差異包上傳至控制檯
下發差異包之前最好先下載阿里提供的測試工具測試一下差異包是否能用然後在灰度下發在全量下發
6 . 下載阿里差異包測試工具
下載地址
7 . 將舊的apk和除錯工具裝在手機中 開啟除錯工具 輸入包名->連線應用->掃描二維碼 觀察下方輸出的日誌
8 . 成功的話就可以開始下發差異包了,之後就可以觀察手機中舊的apk發生了變化了