弄个热更新玩玩,研究一下,原来是这样玩的。。分享给大家哈。
为什么采用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/
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/54267.html