转载请注明作者AndroidMsky和出处:
http://blog.csdn.net/AndroidMsky/article/details/54377806
前两天刚刚写了一篇Tinker的集成
http://blog.csdn.net/androidmsky/article/details/54135465
今天给大家带来AndFix的集成初体验。
还是这张图,先说说我的初体验吧。首先AndFix的支持范围比起Tinker矮了不止一头,不用多说,AndFix只支持类方法的的修改。AndFix的原理如图:
它仅仅是绕过old Method 用new Method来替代。所以说它仅仅支持修改类的方法(新增类,新增字段都是不可以的),但是回头一想我们的初衷,其实这也够干很多事情了。如果仅仅是想修复线上的bug这种打补丁的方法确实可行。相比Tinker很多东西太花哨了,让人浮想联翩啊,Tinker给我的第一个感觉就是不仅仅是修复,而是搞事情,搞新功能啊(Tinker都支持lib的替换)。而AndFix就像朴实的劳动人民了,老子就是来修bug的不要找我来搞事情哦。
接下来我们就集成一下AndFix并写一个简单的Demo来测试一下
AndFix的官方地址:
https://github.com/alibaba/AndFix
也是跟我节奏四步走:
1.引入依赖:
dependencies {
compile 'com.alipay.euler:andfix:0.5.0@aar'
}
2.新建自己application然后输入如下代码:
public class A extends Application {
PatchManager patchManager;
@Override
public void onCreate() {
super.onCreate();
Log.d("AAA","APPLICATION");
patchManager = new PatchManager(this);
patchManager.init("1.0");//current version
patchManager.loadPatch();
try {
Log.d("AAA","want to");
patchManager.addPatch("/sdcard/zhibo8/a2.apatch");
Log.d("AAA","success");
} catch (IOException e) {
e.printStackTrace();
Log.d("AAA","fail");
}
}
}
这个就是一会我们放差异包的路径(每次都是zhibo8哈哈)
/sdcard/zhibo8/a2.apatch
3.权限必不可少:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
4.把签名配置一下方便点(位置还是和Tinker一样,APP根目录):
signingConfigs {
release {
try {
storeFile file("./keystore/release.keystore")
storePassword "testres"
keyAlias "testres"
keyPassword "testres"
} catch (ex) {
throw new InvalidUserDataException(ex.toString())
}
}
debug {
storeFile file("./keystore/debug.keystore")
}
}
APP这里就准备差不多了。挖槽真的就是这么简单,因为AndFix不支持Gradle,所以我们也不用去配置那么多的Task。不过不支持Gradle一会打差异包就会相对麻烦,其实Tinker支持Gradle是好事,这就是麻烦一次和麻烦多次的关系。
好了打包之七步走:
1.就打debug包好了:
gradle assembleDebug
apk会在这里出现:
2.打了一次之后,将一个方法修改:
public String getString (){
return "old";
}
改为:
public String getString (){
return "new";
}
在菜单中的一个按钮调用的这个方法改变text的值:
else if (id == R.id.nav_send) {
mTextView.setText(getString());
}
3.将之前打好apk命名为old.apk
重新
gradle assembleDebug
并命名为new.apk
4.就是打差异包了不支持gradle我们打包的方式是通过一个jar来打(在官方github下载),首先吧两个apk和我们打包用的工具放在同一个文件夹下:
此时文件夹中应该有这个6个文件,mac还是win分别用sh和bat
5.然后执行命令:
需要配置出处路径,签名信息,旧的包,新的包等。
/Users/wuduogen838/Desktop/AndFix/apkpatch.sh -o /Users/wuduogen838/Desktop/AndFix/ -k debug.keystore -p android -a androiddebugkey -e android -f new3.apk-t old3.apk
执行成功后会提示哪个方法被修改了(我们修改了getString):
这时候会生成一个差异包:
6.然后吧它push到刚刚约定好的目录中:
adb push /Users/wuduogen838/Desktop/AndFix/new3-fa73562e0ca4f66ac9e55ed4f93f36c6.apatch /sdcard/zhibo8/a2.apatch
7.安装old.apk到手机,重启我们的APPLICATION成功输出log:
好了:
页面显示也成功了
由
变为
。。。
我们初次集成也就成功了。
我们看一眼issue,确实是一脸的open啊,而且很少有人解答,确实有很多比较弱弱的问题,但是也有一些真正问题。AndFix表示是支持加固的,Tinker表示不会支持加固,但是AndFix还是有人issue加固的问题,毕竟各家加固大法可能不太一样。
项目最近的提交频率也是不是太高哈。
相比之下,Tinker的issue区干净了许多:
是否引入热更新,选择哪个热更新框架,看来还需根据实际情况自己定夺了。
本文demo Github 链接:
https://github.com/AndroidMsky/AndFixUseMksy
欢迎关注作者。欢迎评论讨论。欢迎拍砖。
如果觉得这篇文章对你有帮助,欢迎打赏, 欢迎star,Fork我的github。 喜欢作者的也可follow
我的自营qq群:
308372687