Sophix熱修復實踐

實踐環境

1 . Android Studio
2 . win10 64位

集成步驟

在阿里雲控制檯新建app


  1. 獲取appId、secret、以及rsa祕鑰 網址鏈接

依次點擊產品->移動服務->移動熱修復
image

點擊管理控制檯

image

進入到後臺 新建app 查看三個配置參數

image

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 中,否則無網絡權限,建議放在後面任意時刻,如onCreateSophixManager.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 . 將新舊差異包差異打包
image

3 . 這其中可以設置差異包所用到的簽名,簽名必須與app簽名一致 保證安全性
image

4 . 點擊go 就會生成差異包以.jar結尾 路勁就是自己設定的
image

5 . 將生成的差異包上傳至控制檯
image

image

下發差異包之前最好先下載阿里提供的測試工具測試一下差異包是否能用然後在灰度下發在全量下發

6 . 下載阿里差異包測試工具
下載地址

7 . 將舊的apk和調試工具裝在手機中 打開調試工具 輸入包名->連接應用->掃描二維碼 觀察下方輸出的日誌
image

8 . 成功的話就可以開始下發差異包了,之後就可以觀察手機中舊的apk發生了變化了

官方接入指南

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章