AndFix 是一種線上修複錯誤的解決方案,而不是重新分發 Android 應用程式。它作為 Android 庫
分發。
Andfix是一個縮寫“而固醇熱-修複”。
AndFix支援從2.3到7.0的Android版本,ARM和X86架構,Dalvik和ART運作時,32位和64位。
AndFix 的更新檔壓縮檔案格式為.apatch。它從您自己的伺服器發送到用戶端以修複您的應用程式的錯誤。
原則
AndFix的實作原理是方法體的替換
方法替換
AndFix判斷方法應該替換為java自定義注解,通過hook來替換。AndFix
art_replaceMethod
在 ART 或
dalvik_replaceMethod
Dalvik 中有一個本地方法。
有關更多詳細資訊,請
點選此處。
一體化
https://github.com/alibaba/AndFix#how-to-get 怎麼獲得?
直接将 AndFix aar 作為編譯庫添加到您的項目中。
對于您的 maven 依賴,
<dependency>
<groupId>com.alipay.euler</groupId>
<artifactId>andfix</artifactId>
<version>0.5.0</version>
<type>aar</type>
</dependency>
對于您的 gradle 依賴項,
dependencies {
compile 'com.alipay.euler:andfix:0.5.0@aar'
}
如何使用?
- 初始化 PatchManager,
patchManager = new PatchManager(context);
patchManager.init(appversion);//current version
- 加載更新檔,
patchManager.loadPatch();
您應該盡早加載更新檔,通常在應用程式的初始化階段(例如
Application.onCreate()
)。
- 添加更新檔,
patchManager.addPatch(path);//path of the patch file that was downloaded
下載下傳新的更新檔檔案後,它将立即生效
addPatch
https://github.com/alibaba/AndFix#developer-tool 開發者工具
AndFix 提供了一個名為apkpatch的更新檔制作工具。
https://github.com/alibaba/AndFix#how-to-get-1
該
apkpatch
工具可以在
這裡找到。
https://github.com/alibaba/AndFix#how-to-use-1
- 準備兩個android包,一個是線上包,一個是你通過編碼修複bug後的包。
-
通過提供兩個包生成檔案,.apatch
usage: apkpatch -f <new> -t <old> -o <output> -k <keystore> -p <***> -a <alias> -e <***>
-a,--alias <alias> keystore entry alias.
-e,--epassword <***> keystore entry password.
-f,--from <loc> new Apk file path.
-k,--keystore <loc> keystore path.
-n,--name <name> patch name.
-o,--out <dir> output dir.
-p,--kpassword <***> keystore password.
-t,--to <loc> old Apk file path.
現在您獲得了應用程式的救星,更新檔檔案。然後你需要以某種方式将它發送給你的客戶,推或拉。
有時,您的團隊成員可能會修複彼此的錯誤,并且不僅生成一個
.apatch
. 對于這種情況,您可以
.apatch
使用此工具合并檔案,
usage: apkpatch -m <apatch_path...> -o <output> -k <keystore> -p <***> -a <alias> -e <***>
-a,--alias <alias> keystore entry alias.
-e,--epassword <***> keystore entry password.
-k,--keystore <loc> keystore path.
-m,--merge <loc...> path of .apatch files.
-n,--name <name> patch name.
-o,--out <dir> output dir.
-p,--kpassword <***> keystore password.
運作示例
- 将 samplesI/AndFixDemo 導入您的 IDE,使用 AndFix(庫項目或 aar)附加 AndFixDemo 依賴項。
- 建構項目,将包儲存為1.apk,然後安裝在裝置/模拟器上。
- 修改com.euler.test.A,參考com.euler.test.Fix。
- 建構項目,将包儲存為2.apk。
- 使用 apkpatch 工具制作更新檔。
- 将更新檔檔案重命名為out.apatch,然後複制到sdcard。
- 運作 1.apk 并檢視日志。
https://github.com/alibaba/AndFix#notice 注意
https://github.com/alibaba/AndFix#proguard 混淆器
如果您啟用 ProGuard,您必須儲存 mapping.txt,以便您的新版本的建構可以與
"-applymapping" 一起使用并且有必要保持課程如下,
-
本機方法
com.alipay.euler.andfix.AndFix
-
注解
com.alipay.euler.andfix.annotation.MethodReplace
為了確定在運作混淆和靜态分析工具(如 ProGuard)後可以找到這些類,請将以下配置添加到您的 ProGuard 配置檔案中。
-keep class * extends java.lang.annotation.Annotation
-keepclasseswithmembernames class * {
native <methods>;
}
自修改代碼
如果你使用它,比如Bangcle。要生成更新檔檔案,最好使用原始 apk。
https://github.com/alibaba/AndFix#security 安全
以下内容很重要,但超出了 AndFix 的範圍。
- 驗證更新檔檔案的簽名
- 驗證優化檔案的指紋
https://github.com/alibaba/AndFix#api-documentation API 文檔
可以在
此處找到庫 javadoc 。