Android 热更新Tinker简单使用

Android 热更新Tinker简单使用弄个热更新玩玩 研究一下 原来是这样玩的 分享给大家哈 为什么需要热修复 那就是因为线上应用出现了 Bug 不想重新发布包让用户重新下载安装 所以热修复是目前流行的修复方案 为什么采用 Thinker 采用热修复方案的公司有如下 现在市面上热修复框架很多 以下是常见的四种

大家好,我是讯享网,很高兴认识大家。

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

为什么采用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环境变量

这里写图片描述

实践

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

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

小讯
上一篇 2025-02-27 21:52
下一篇 2025-03-26 22:41

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/54267.html