天天看點

Android APP熱修複程式庫——AndFix

AndFix 是一種線上修複錯誤的解決方案,而不是重新分發 Android 應用程式。它作為 Android 庫

分發。

Andfix是一個縮寫“而固醇熱-修複”。

AndFix支援從2.3到7.0的Android版本,ARM和X86架構,Dalvik和ART運作時,32位和64位。

AndFix 的更新檔壓縮檔案格式為.apatch。它從您自己的伺服器發送到用戶端以修複您的應用程式的錯誤。

原則

AndFix的實作原理是方法體的替換

Android APP熱修複程式庫——AndFix

方法替換

AndFix判斷方法應該替換為java自定義注解,通過hook來替換。AndFix

art_replaceMethod

在 ART 或

dalvik_replaceMethod

Dalvik 中有一個本地方法。

有關更多詳細資訊,請

點選此處

Android APP熱修複程式庫——AndFix

一體化

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'
}
      

如何使用?

  1. 初始化 PatchManager,
patchManager = new PatchManager(context);
patchManager.init(appversion);//current version
      
  1. 加載更新檔,
patchManager.loadPatch();
      

您應該盡早加載更新檔,通常在應用程式的初始化階段(例如

Application.onCreate()

)。

  1. 添加更新檔,
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.
      

運作示例

  1. 将 samplesI/AndFixDemo 導入您的 IDE,使用 AndFix(庫項目或 aar)附加 AndFixDemo 依賴項。
  2. 建構項目,将包儲存為1.apk,然後安裝在裝置/模拟器上。
  3. 修改com.euler.test.A,參考com.euler.test.Fix。
  4. 建構項目,将包儲存為2.apk。
  5. 使用 apkpatch 工具制作更新檔。
  6. 将更新檔檔案重命名為out.apatch,然後複制到sdcard。
  7. 運作 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 。

繼續閱讀