Andfix使用说明
2016-07-07 16:32
363 查看
Andfix使用说明
1Andfix适用范围:
支持Android2.3到6.0+;支持ARMandX86架构指令集;
支持DalvikandART运行时;
2引入:
a在对应的项目build.gradle文件中的dependencies中加入“compile'com.alipay.euler:andfix:0.4.0@aar'”
b由于发现远程的aar文件中可能没有引入所有类型cpu所对应的so文件,所以需要下载源码中的libs文件中的so文件,如下所示:
然后将这些so文件加入自己项目所对应的路径下,如下图所示:
然后请尝试打包,如果报错的话,根据提示,将对应重复的so文件删除。如下图所示:
该错误说明在所应用的aar(通过compile'com.alipay.euler:andfix:0.4.0@aar'引入的)文件中,已经存在了x86类型的libandfix.so文件。所以要将自己项目中单独引入的文件删掉。
cb中所述问题是因为远程引入的aar文件没有包含所有类型cpu支持的so文件引起的,如果没有对应手机所使用的so文件,应用将不能使用andfix,甚至会引起应用不能启动的问题。所以一起要把所有so文件全加入,然后在打包出错时删除多余的so文件,这样不会漏掉对所有类型cpu的支持。
3.使用
尽量早得完成patchmanager初始化的过程,推荐在applicationoncreate时,如下:PatchManagerpatchManager=newPatchManager(this); StringappVersion=""; try{ appVersion=getPackageManager().getPackageInfo(getPackageName(),0).versionName; patchManager.init(appVersion); patchManager.loadPatch();
apatchManager.init(appVersion)中的version——每次appversion变更都会导致所有补丁被删除,如果appversion没有改变,则会加载已经保存的所有补丁。
bpatchManager.loadPatch()要在addPatch之前使用。
c完整的例子
StringAPATCH_PATH="/Dennis.apatch";
StringTAG="PATCH";
PatchManagerpatchManager=newPatchManager(this); StringappVersion=""; try{ appVersion=getPackageManager().getPackageInfo(getPackageName(),0).versionName; patchManager.init(appVersion); patchManager.loadPatch();
//apatch文件的目录
StringpatchFileString=Environment.getExternalStorageDirectory().getAbsolutePath()+APATCH_PATH;
Log.i(TAG,patchFileString);
FileapatchPath=newFile(patchFileString);
if(apatchPath.exists()){
Log.i(TAG,"补丁文件存在");
Toast.makeText(this,"补丁文件存在",Toast.LENGTH_SHORT).show();
try{
//添加apatch文件
patchManager.addPatch(patchFileString);
}catch(IOExceptione){
Log.i(TAG,"打补丁出错了");
e.printStackTrace();
}
}else{
Log.i(TAG,"补丁文件不存在");
}
}catch(PackageManager.NameNotFoundExceptione){
e.printStackTrace();
}
注:补丁文件的名字每次需要不用,如果名字一致,将不能再次打补丁。例子中StringAPATCH_PATH="/Dennis.apatch"写死了,只能示意。
4打补丁
当引入了andfix,想通过打补丁的方式修复bug,打包时需要遵循几点:原始apk,或者叫发布的apk,或者叫有可能有bug的apk——>
a混淆文件中加入如下
-keepclass*extendsjava.lang.annotation.Annotation
-keepclasseswithmembernamesclass*{
native<methods>;
}
-keepclasscom.alipay.euler.andfix.**{*;}
b打包后,保留apk文件,mapping文件
发现bug后,修改bug,打新的apk包——>
a这个包在打包时,要依赖发布包时生成的mapping文件,即上一步中保留的mapping文件,同时在混淆文件中加入如下代码
-applymappingmapping.txt,其中“mapping.txt”为自己所生成的mapping文件名字。
b将本次生成的apk文件保存
生成不定文件——>
a下载补丁工具
b把有bug的apk,没bug的apk,还有keysotre文件放在apkpatch-1.0.3
目录下。
c运行如下命名:
./apkpatch.sh-fNoBug.apk-tBug.apk-oDennis-kkeystore-p111111-a111111-e111111
每个参数含义如下
-f新版本的apk
-t旧版本的apk
-o输出apatch文件的文件夹,可以随意命名
-k打包的keystore文件名
-pkeystore的密码
-akeystore用户别名
-ekeystore用户别名的密码
OK,打补丁成功,把生成的不定文件xx.apatch通过对应的方式,发送到已含bug的手机上即可。
5补充
不支持YunOS无法添加新类(内部类也不行)和新的字段、新的方法
资源文件无法替换
加载过的补丁会被保存到data/packagename/files/apatch_opt目录下,所以下载过来的补丁用过一次就可以删除了。
Andfixgithub地址
参考博客
word文档地址
相关文章推荐
- Python的collections模块中的OrderedDict有序字典
- SpringMVC简单配置
- 遭遇诡异的 EOFException
- hdu1732 Push Box【搜索】
- oracle 用户创建及权限设置
- Jsp页面注册与登录
- 2013年noip第三题货车运输truck(树链剖分LCA+最大生成树)
- 通过HOOK控制进程的创建
- ibatis/mybatis显示sql语句 log4j.properties配置文件
- Log4j简介
- <z:select>级联操作
- 日期加一天
- 1148. 【克罗地亚】INSTRUKCIJE
- python操作oracle完整教程
- struts2---获取参数的三种方式
- android抽屉式侧滑
- Guava_常用
- java继承中的构造方法
- 卡方检验x2检验(chi-square test)
- eclipse启动tomcat奇慢无比