阿里雲推出了移動熱修復服務,據說這個服務傻瓜式接入,性能相對較好,對新技術比較好奇的我決定嘗試一下。html
第一步:gradle遠程倉庫依賴, 打開項目找到app的build.gradle文件,添加以下配置:添加maven倉庫地址:android
repositories { maven { url "http://maven.aliyun.com/nexus/content/repositories/releases" } }
第二步:添加gradle座標版本依賴:網絡
compile 'com.aliyun.ams:alicloud-android-hotfix:3.0.6'
第三步:在AndroidManifest.xml中添加權限:app
<!-- 網絡權限 --> <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文件:maven
<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密鑰" />
這些信息能夠在新建的應用中找到ide
第五步:混淆配置:工具
#基線包使用,生成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版本一致)。測試
點擊對應版本的「查看詳情」,上傳補丁。gradle
點擊對應補丁版本的「查看詳情」,裏面能夠發佈補丁。
6.發佈補丁。
最後手機上的APP沒有當即顯示「HelloWord」,關閉重啓APP後成功顯示「HelloWord」。雖然沒有即時生效,但至少成功更新了。