Android 热更新Tinker简单使用

弄个热更新玩玩,研究一下,原来是这样玩的。。分享给大家哈。

为什么需要热修复?
那就是因为线上应用出现了Bug,不想重新发布包让用户重新下载安装,所以热修复是目前流行的修复方案。

为什么采用Thinker

采用热修复方案的公司有如下:

这里写图片描述

现在市面上热修复框架很多,以下是常见的四种。
这里写图片描述

从上图可以看出

从以上图表格我们可以看出Dexposed方案不支持全平台排除,阿里的不支持类、So、资源替换排除,Q空间的性能损耗太大排除,最后只剩下微信的Tinker。Tinker的优势可以是热修复使用的最广泛的方案了,所以果断选择微信Tinker。

Thinker优势有哪些?
1,支持类、So、资源替换
2,补丁包较小
3,不太复制,成功率还可以,接口齐全。

Thinker配置使用

配置Thiner

这里写图片描述

     classpath "com.tencent.tinker:tinker-patch-gradle-plugin:${TINKER_VERSION}"

这里有一些小技巧

1 使用的 ${THINKER_VERSION} ,该配置信息在 project/gradle.properties 文件中定义。

2 配置文件中使用的是”“引用配置,否则${THINKER_VERSION}无法正确的使用。

module/build.gradle

1,添加依赖

    provided("com.tencent.tinker:tinker-android-anno:${TINKER_VERSION}")
    compile("com.tencent.tinker:tinker-android-lib:${TINKER_VERSION}")
    compile("com.android.support:multidex:1.0.1")

2,配置multiDexEnabled为true

这里写图片描述

3, 复制gradle代码

上gayhub搜索Tinker,打开app/build.gradle查看里面的配置,复制一下代码

这里写图片描述

注意,ignoreWarning=true和tinkerid=’1.0’

4,创建java类DefaultApplicationLike子类
使用DefaultApplicationLike子类替换原有的MyApplication(如果有)
这里写图片描述

然后,我们打开ThinkerTest类看看里面的继承关系,其实TinkerApplication最终继承也是Application。
这里写图片描述

这里写图片描述

然后呢,修改清单文件,声明application属性name:ThinkerTest

这里写图片描述

Tinker示例

这里写图片描述
1,添加点击事件


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //通过TextView的点击完成修复工作(官方是使用:service进行更新的操作)

        findViewById(R.id.tv_error).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //加载补丁包,完成文件加载
           TinkerInstaller.onReceiveUpgradePatch(getApplicationContext(), Environment.getExternalStorageDirectory().getAbsolutePath()+"/test");
            }
        });
    }

2,第一版APK生成,需要添加加载修复文件的代码,由于测试需要访问SDCard,注意权限配置。

 //加载补丁包,指定补丁包的位置,读取补丁包信息,完成文件加载

TinkerInstaller.onReceiveUpgradePatch(getApplicationContext(), Environment.getExternalStorageDirectory().getAbsolutePath()+”/test”);

3,添加权限

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

4,好了,接着可以用真机run了,问题来了

这里写图片描述

解决问题:

问题描述:Error:A problem occurred configuring project ‘:app’.

Tinker does not support instant run mode, please trigger build by assembleDebug or disable instant run in ‘File->Settings…’.

意思是说Tinker不支持 install run 模式,请手动 build assembleDebug 或者把 install run 模式禁用掉。

解决方法:

所以现在需要另外一种方式:点击Android studio 右侧的Gradle的标签,生成基础的apk(可生成Debug版本或者正式版本),有问题需要修复的apk。

这里写图片描述

这里写图片描述

修复错误apk

1.把老APK名称复制到app.gradle里面的old地址里面,那就是修改module中的build配置信息
这里写图片描述

使用命令生成差异文件

在module目录上面使用gradle tinkerPatchDebug命令生成差异文件

这里写图片描述

注意:这里必须要配置gradle环境变量

这里写图片描述

复制出来解压,修改为.test后缀放到SD卡里面。
正常我们是通过创建服务组件,检查服务器是否可以下载,把它下载到SD卡里面的这样的逻辑。

实践

点击事件关闭应用,需要冷启动才能生效。

资料来自http://blog.csdn.net/lvshuchangyin/article/details/52839202

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值