AndFix應(yīng)用案例接入過程
AndFix是阿里巴巴支付寶團(tuán)隊(duì)推出的熱修復(fù)project。利用這個(gè)功能我們交付給用戶的版本不再是覆水難收了剖效,具備熱修復(fù)的能力。
1璧尸、demo演示和說明
- 文件清單列表
下載文件解壓后,目錄文件清單如下爷光,因?yàn)閜atch文件路徑是hardcode在/sdcrad/out.patch,使用時(shí)確保放在這個(gè)路徑。
目錄下文件 | 介紹 | 操作說明 |
---|---|---|
/APK/app-release.apk | 線上使用著的apk(有bug存在) | 請安裝到手機(jī)上 |
/APK/app-release_fix.apk | 修改bug后簽名打包的apk | 不用安裝欢瞪,生成patch時(shí)用到 |
/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. 選擇盡早的時(shí)機(jī)做加載重贺,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合并的命令,將多個(gè)apatch合并為一個(gè)
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ù)介紹:實(shí)現(xiàn)原理核心代碼詳解(davlik部分)
ps:后面補(bǔ)上github地址抒巢。