Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android不發版也能在線修Bug?——AndFix 框架

Android不發版也能在線修Bug?——AndFix 框架

編輯:關於Android編程

 

title=

之前跟大家介紹一個Alibaba的框架dexposed框架,此框架能夠動態的從線上完成一些補丁的工作。但是,由於它的性能和兼容性(不支持ART)所以,很多朋友都決定不再研究此框架。

今天,這裡我再次給大家介紹一個Alibaba的開源框架——AndFix。和Dexposed一樣,此框架一樣是為了能夠在線的打補丁。即發現了bug之後,通過線上補丁修復本地的邏輯代碼的工具庫。

原理與Dexposed類似,這裡我們不做詳解,如果不清楚的童鞋,可以看我的另兩篇文章:
http://blog.csdn.net/yzzst/article/details/47954479
http://blog.csdn.net/yzzst/article/details/47659987

如果你要問我,為什麼alibaba內部團隊要做兩個差不多的東西?
我只能回答,如果你也在大公司干過,你應該知道有一種悲哀叫——KPI。


AndFix的Github地址:https://github.com/alibaba/AndFix

如何使用?
筆者翻譯的官方文檔,如下:


AndFix

AndFix是一個Android App的在線熱補丁框架。使用此框架,我們能夠在不重復發版的情況下,在線修改App中的Bug。AndFix就是 “Android Hot-Fix”的縮寫。

就目前來說,AndFix支持Android 2.3到6.0版本,並且支持arm 與 X86系統架構的設備。完美支持Dalvik與ART的Runtime。

AndFix 的補丁文件是以 .apatch 結尾的文件。


AndFix原理

AndFix的原理很簡單。就是針對項目中原有方法的替換取代工作:

title=

而我們打一個在線的補丁包,也就有了如下的步驟邏輯:

title=


整合項目使用

直接添加 AndFix aar 到項目中的 編譯依賴庫中。

maven 依賴:


    com.alipay.euler
    andfix
    0.3.0
    aar

或者是Gradle依賴

dependencies {
    compile 'com.alipay.euler:andfix:0.3.0@aar'
}

如何使用

1 . 初始化PatchManager:

patchManager = new PatchManager(context);
patchManager.init(appversion);//current version

2 . 載入補丁包
越早的載入補丁包越好,通常來說,我們一般都會在自定義的Application中的onCreate方法裡面載入補丁包。即:

patchManager.loadPatch();

3 . 添加補丁包
新的補丁包,下載後調用addPatch方法添加補丁。這個補丁會立即生效。

patchManager.addPatch(path);//path of the patch file that be downloaded

ProGuard混淆設置

確保一些class文件在使用的時候不被proguard所混淆,當然,proguard的混淆配置如下所示:

原生method
com.euler.cloudfix.CloudFix
annotation
com.euler.cloudfix.annotation.MethodReplace
-keep class * extends java.lang.annotation.Annotation
-keepclasseswithmembernames class * {
    native ;
}

開發使用工具

別以為補丁就是我們直接開發一個apk就好了,制作補丁是需要專門的工具的。這裡有一個工具,叫做 apkpatch的工具,用來制作AndFix的補丁。

地址:https://github.com/alibaba/AndFix/raw/master/tools/apkpatch.zip

如何使用該工具

生成.apatch 文件

 usage: apkpatch -f  -t  -o -k  -p <***> -a  -e <***>
 -a,--alias      alias.
 -e,--epassword <***>   entry password.
 -f,--from         new Apk file path.
 -k,--keystore     keystore path.
 -n,--name        patch name.
 -o,--out 
output dir. -p,--kpassword <***> keystore password. -t,--to old Apk file path.

merge .apatch 文件

 usage: apkpatch -m  -k  -p <***> -a  -e <***>
 -a,--alias      alias.
 -e,--epassword <***>   entry password.
 -k,--keystore     keystore path.
 -m,--merge     path of .apatch files.
 -n,--name        patch name.
 -o,--out 
output dir. -p,--kpassword <***> keystore password.

運行 sample

import samples/AndFixDemo 到自己的IDE中,設置AndFixDemo 依賴於AndFix(library project or aar)。 build項目,保存編譯後的結果為1.apk,安裝apk到設備中。 修改com.euler.test.A, 引用com.euler.test.Fix。 build 項目, 保存為 2.apk. 使用apkpatch工具制作一個補丁。 重命名補丁文件為out.apatch,然後將文件拷貝到sd卡中。 運行 1.apk 查看logcat。

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved