热更新AndFix之初体验

转载请注明作者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
这里写图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值