AndFix實現(xiàn)原理詳解[一]

AndFix應(yīng)用案例接入過程

AndFix是阿里巴巴支付寶團隊推出的熱修復project。利用這個功能我們交付給用戶的版本不再是覆水難收了,具備熱修復的能力。
1、demo演示和說明

  • 文件清單列表

下載文件解壓后,目錄文件清單如下,因為patch文件路徑是hardcode在/sdcrad/out.patch,使用時確保放在這個路徑。

目錄下文件 介紹 操作說明
/APK/app-release.apk 線上使用著的apk(有bug存在) 請安裝到手機上
/APK/app-release_fix.apk 修改bug后簽名打包的apk 不用安裝,生成patch時用到
/apatchtools/apkpatch.sh 生成patch工具類 使用下面接入步驟的命令即可生成.apatch文件到指定目錄
/apatch/out.apatch fixbug后生成的patch文件 請放在 /sdcrad/out.patch
sourcecode 源碼 如果要修改apatch指定路徑可以修改源碼演示

2、接入步驟
一、配置 gradle依賴

dependencies { compile 'com.alipay.euler:andfix:0.3.1@aar'}
  • 1 . 初始 PatchManager:
patchManager = new PatchManager(context);
patchManager.init(appversion);//current version
  • 2 . 加載 patch. 選擇盡早的時機做加載,such as application.oncreate():
patchManager.loadPatch();
  • 3 . 加載 patch. 下載path完畢后即可加載patch
//path of the patch file that be downloaded
patchManager.addPatch(path);

二、ProGuard

  • Andfix使用到的native方法類
com.alipay.euler.andfix.AndFix
  • 注解保留
com.alipay.euler.andfix.annotation.MethodReplace
  • 添加混淆文件聲明
-keep class * extends java.lang.annotation.Annotation-keepclasseswithmembernames class * { native <methods>;}

三、使用生成patch工具類命令

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.

使用舉例:(win環(huán)境下對應(yīng)修改路徑也是一樣的)

./apkpatch.sh -f /Users/e0uoq/AndfixDemo2/app-release.apk -t /Users/e0uoq/AndfixDemo2/app/app-release.apk -o /Users/e0uoq/andfixpatch -k /Users/e0uoq/andfixkey.jks -p andfix_key -a andfixsign -e andfix_sign

此外還提供了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.

下一節(jié)繼續(xù)介紹:實現(xiàn)原理核心代碼詳解(davlik部分)

ps:后面補上github地址。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,094評論 25 709
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,578評論 19 139
  • 項目以飛快的速度迭代,2周進行一次迭代升級。每次開發(fā)完功能跑通,在現(xiàn)有機型上測試沒問題的話,就提交市場。 在以極快...
    張庚閱讀 6,987評論 3 18
  • 背景 當一個App發(fā)布之后,突然發(fā)現(xiàn)了一個嚴重bug需要進行緊急修復,這時候公司各方就會忙得焦頭爛額:重新打包Ap...
    灬丨墨殤丶閱讀 807評論 0 4
  • 一個人坐著發(fā)呆,回憶往事,身旁的同事再吵吵鬧鬧,可我卻陷入了沉思,一點也不受外界的影響。腦海里飄過何為人生,想到這...
    毛志亮閱讀 511評論 2 3

友情鏈接更多精彩內(nèi)容