1. 程式人生 > >阿里百川HotFix解決方案使用體驗

阿里百川HotFix解決方案使用體驗

最近,我們的應用出了一個相容性的小bug,但是解決這個bug的新版本卻釋出了快一個月,這其中有種種問題導致新的版本釋出不斷拖後,為了解決快速解決線上bug這個問題,查閱了一下資料,什麼androidfix,還有什麼其他的,這個就不囉嗦了,大家可以參考這個文章瞭解一下。

過了一個G20,偶爾逛了一下阿里百川,發現百川釋出的一個sdk,於是懷抱著期待來到這裡分享一下使用阿里百川的hotfix解決方案中的一些梗。

首先分享一下阿里百川hotfix解決方案,這個sdk是基於andfix方案的一個擴充套件,對於andfix進行一些優化,極大的方便了我們的使用,如果順利的話可能幾個小時就可以解決熱修補的問題,當然先關機型的不支援也再所難免,誰讓android這麼開放呢!

目前這個SDK還在公測中,或許會有一些bug,但是總比自己費力的構造要好的多,所以,果斷選擇。
SDK指南如下:阿里百川hotfix

首先,你要成為阿里百川的開發者,成為開發者以後建立你的應用,即可實現後續整合步驟。
Android studio 整合過程中,需要注意阿里系的UTDID這個東西,經常使用友盟或者阿里的東西都知道,這個是個梗。
在新增依賴過程中,使用gradle的同學們,你可以直接在app目錄下的build.gradle 檔案新增
(這裡一定要注意是app目錄下的哦)

repositories {
        maven {
            url "http://repo.baichuan-android.taobao.com/content/groups/public/"
} }

然後就要說一個梗了,官方的介紹是這樣的
官方介紹
然而事實並不是你註釋了compile utdid 的語句就能解決的,如果只compile hotfix,還是會自動依賴utdid,正確的姿勢是這樣的

compile ('com.alibaba.sdk.android.plugins:alisdk-hotfix:1.0.0.3'){
//        exclude module:"alisdk-utdid"
        transitive false
    }
//這裡exclude 這一句和transitive這一句可以二選一

姿勢正確給個滿分!

然後你按照官網的要求配置Manifest節點和許可權就可以初始化了
配置appsecret和rsasecret

<meta-data
android:name="com.taobao.android.hotfix.APPSECRET"
android:value="your-app-secret" />
<meta-data
android:name="com.taobao.android.hotfix.RSASECRET"
android:value="your-rsa-secret" />


新增許可權

<! -- 網路許可權 -->
<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.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

下一步,就是在application 中自定義了
這裡我將官方的程式碼一氣呵成,不明白看註釋。

//初始化
HotFixManager hotFixManager=HotFixManager.getInstance().initialize(application,appVersion,appId, newPatchListener);
/*
application: Application上下文context
appVersion: 應用的版本號
appId: 百川上應用的唯一標識。如何獲取請查詢獲取SDK配置資訊
newPatchListener: 新patch的回撥介面,若不執行任何動作,可為null
*/
//請求最新的patch
hotFixManager.queryNewHotPatch();


//注意:下面這個部分在oncreate外面
NewPatchListener mNewPatchListener = new NewPatchListener() {
        @Override
        public void handlePatch(int patchVersion) {
            // TODO do something
            Toast.makeText(MainApplication.this, "請重啟應用更新補丁", Toast.LENGTH_SHORT).show();
        }
    };
    /*如果客戶端已經有一個patch包在執行,則下一個patch不會立即生效,需要重啟應用生效。所以此時需要進行處理,比如提醒使用者重啟應用或者開發者進行後臺手動殺程序重啟等操作。
    */

混淆設定如下:

#HotFix
-keep class * extends java.lang.annotation.Annotation
-keepclasseswithmembernames class * {
    native <methods>;
}
-keep class com.alipay.euler.andfix.**{
    *;
}
-keep class com.taobao.hotfix.aidl.**{*;}
-keep class com.ta.utdid2.device.**{*;}
-keep class com.taobao.hotfix.HotFixManager{
    public *;
}

到了這裡,你已經完成了所有的整合工作。下面就要看怎麼製作補丁了,以前使用andfix的同學可以濾過了。
首先,你要確定你的JDk版本,JDK版本在1.7以上才會正確使用哦。
這裡,mac使用者開啟你的終端,WIN使用者敲開你的CMD工具。OK let`s go.

關於生成PATCH補丁的問題,需要大家細心細心,因為目前的補丁生成確實是不是很方便。另外一定要保證輸出路徑是空的,因為有可能會刪除該路徑檔案哦
執行的命令如下:

java -jar alisdk-hotfix-android-pack-tools.jar PATCH srcAPK fixedAPK outPatch signInfo outLog

/*srcAPK:填寫本地的原始APK(有問題的APK)的本地路徑,如果檔案找不到會報錯
fixedAPK:已經修復過該問題的APK
outPatch:輸出patch的路徑
signInfo:本地的簽名配置屬性檔案,可選,不輸入或者不正確則不做簽名
outLog:輸出日誌的目錄,可以不填寫,預設為控制檯輸出
*/

這裡是官方的一些解釋:但是,為了你能夠快速順利的完成PATCH,請儘量完整引數,如果報錯說什麼引數

Exception in thread “main” java.lang.reflect.InvocationTargetException
at ···

大部分情況路徑問題或者是簽名檔案的路徑問題,比如路徑多了個空格,或者左斜槓和右斜槓的問題等等,都要注意細心檢查咯。另外要告訴大家,儘量不要將輸出檔案的地址(srcAPK fixedAPK)和輸入檔案的地址(outPatch )做成同一個路徑進行處理,否則執行錯誤可能導致目錄檔案丟失哦。
簽名配置檔案為XXXXXXX.keyinfo,
store.file=yourpath
store.password=yourpassword
key.alias=yourkeyalias
key.password=yourkeypassword

工具異常說明

異常提示 說明
SRC APK FILE IS NOT FOUND
舊的APK沒有找到,最大的可能是填寫的路徑不對
FIXED APK FILE IS NOT FOUND
修復了BUG的APK沒有找到,最大可能是填寫的路徑不對
PATCH OUTPUT PATH IS NOT FOUND
生成PATCH的工作目錄不存在
WORKING PATCH MUST BE A DIFFERENT PATH WITH APK
WORKING目錄必須一個全新存在且沒有檔案的目錄,裡邊放APK或者PATCH 工具會被在完成工作後清除

有問題可以留言交流哦。