如何使用阿里百川hotfix熱修復功能(三)

     這章我們進行patch補丁操作,參考 :  如何使用阿里百川hotfix熱修復功能(一) 如何使用阿里百川hotfix熱修復功能(二) 

    1.下載打包工具

patch補丁包生成需要使用到打補丁工具BCFixPatchTools-1.3.0.jar, 如還未下載打包工具,請前往文檔SDK下載&版本更新記錄下載Android打包工具,

注意:

*該工具需要在JDK7或以上才能正常使用

*查看補丁工具使用說明   輸入以下命令:           

java -jar BCFixPatchTools-1.3.0.jar -cmd help


2.window用戶使用cmd命令查看幫助,

BCFixPatchTools-1.3.0.jar 目錄下,輸入:

java -jar BCFixPatchTools-1.3.0.jar -cmd help

可以看到對應的window,Linux ,mac生成方法:





3.生成補丁

我們需要根據輸入命令生成補丁,並把補丁在阿里百川后臺發佈

這裏,因爲我的電腦是window7,所以使用window的方法,

3.1 先生成一個簽名的apk(i_zhiyuan_uc-1.6.apk)有問題的apk,保存在自己熟悉的路徑;

3.2 修改過後,再生成一個簽名的apk(i_zhiyuan_huawei-1.6.apk)修改過後沒有問題的apk,並保存在自己熟悉的路徑;

運行以下命令:

java -jar BCFixPatchTools-1.3.0.jar -c patch -s E:\app_android\APP\app\i_yuan_uc-1.6.apk -f E:\app_android\APP\app\i_yuan_huawei-1.6.apk -w patch-out -k E:\Android\keyStore\Key.store -p 123456 -a 123456 -e appkey -l E:\hotfix_app\patch-out\filterClass.txt


參數說明:

  • -c, -cmd: 值爲patch: 打補丁命令 值爲help: 查看使用說明
  • -s, -src_apk:填寫本地的原始APK(有問題的APK). 必選
  • -f, -fixed_apk:已經修復過該問題APK. 必選
  • -w, -wp:輸出patch的路徑, 最後如果打補丁成功會在wp目錄下自動創建的hotfix-working目錄生成baichuan-hotfix-patch.jar補丁文件. 必選
  • -k, -sign_file_url:本地的簽名文件的路徑,不輸入則不做簽名. 可選
  • -p, -sign_file_pass: 證書文件的密碼, 可選
  • -a, -sign_alias: 證書的別名. 可選
  • -e, -sign_alias_pass: 證書別名的密碼. 可選
  • -l, -filterClassFilePath:本地的白名單類列表文件的路徑,放進去的類不會再計算patch,文件格式: 一行一個類名. 可選





add modified class表示的是要修復的類, 




這樣就生成了補丁(baichuan-hotfix-patch.jar補丁文件在patch-out/hotfix-working目錄下);

                                 


注意:這裏使用了1.3的打補丁方法,如果使用1.2的,不支持keystore的簽名方式,若使用了,請參考以下方法修改:


把這個未簽名補丁包重命名爲baichuan-hotfix-patch-unsigned.jar

我們使用(JDK默認簽名工具jarsigner):輸入以下命令:

jarsigner -keystore E:\app/keystore/app.store -storepass 12345 -keypass 12345 -signedjar baichuan-hotfix-patch.jar baichuan-hotfix-patch-unsigned.jar appkey

那麼在當前目錄下就會生成簽名後的baichuan-hotfix-patch.jar,

然後我們就可以使用這個簽名後的補丁包上傳到服務器即可. 新增版本:



4.上傳補丁

將生成的補丁上傳到百川后臺,這樣就完成上傳工作了。






5.我們可以使用官方提供的apk進行測試,連接應用並掃描後,看看返回的code參數,







  • mode: 補丁模式, 0:正常請求模式 1:掃碼模式 2:本地補丁模式
  • code: 補丁加載狀態碼, 詳情查看PatchStatusCode類說明
  • info: 補丁加載詳細說明, 詳情查看PatchStatusCode類說明
  • handlePatchVersion: 當前處理的補丁版本號, 0:無 -1:本地補丁 其它:後臺補丁

這裏列舉幾個常見的code碼說明,

  • code: 1 補丁加載成功
  • code: 6 服務端沒有最新可用的補丁
  • code: 12 當前應用已經存在一箇舊補丁, 應用重啓嘗試加載新補丁
  • code: 13 補丁加載失敗, 導致的原因很多種, 比如UnsatisfiedLinkError等異常, 此時應該嚴格檢查logcat異常日誌
一般code爲9說明有新的補丁,並加載成功,此時重新打開自己的應用,看看是否已經改變,並log對比返回的code參數。
如果已經解決了,說明你已經完成啦,這樣,不用發佈新版本,不用更新,是不是神奇?


ps:
1、在生成補丁的時候要注意參數之間的空格,如果不熟練可以多嘗試幾次。
2、由於官方正在公測中,目前阿里百川還未支持的:
  • 暫時不支持新增方法, 新增字段, 但是支持新增類, 所以需要新增方法/字段可以通過新增類來實現
  • 不支持資源修復, so修復
  • 三星note3,S4,S5的5.0設備以及X86設備不支持(點擊查看具體支持的機型)
  • 參數包括long,double,float基本類型的方法不能被patch, 不包括基本類型封裝類Long,Double,Float
  • 被反射調用的非靜態方法不能被patch
  • 參數超過8的方法不能被patch
  • 構造方法不能被patch
  • 使用註解的方法視情況而定是否支持被patch(詳細說明參考Demo工程BaseBug.md文件中關於註解的說明)
  • 泛型參數的方法如果patch存在兼容性問題
  • 在打包的時候偶爾會存在兩次打包內部類的名字不一致問題,這種情況會導致打AndFix打包失敗,暫時無解
  • 我們建議不要通過GooglePlay發佈帶熱修復SDK的APP,存在政策風險
  • 暫不支持android7.0
可能會遇其他問題:官方問題解決方案



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