【Android进阶】1小时学会热更新--Tinker

Tinker

玩Dota的应该知道

热更新

热补丁技术也可以理解为一个动态修改代码与资源的通道,它适合于修改量较少的情况。

本文你将获悉

  • 【主流热更新框架的简单比较】
  • 【Tinker能做什么】
  • 【 Tinker不能做什么】
  • 【利用Tinker Platform实现热更新详细步骤】
  • 复杂的热更新原理
  • 繁琐的补丁制作流程
    部分数据来自 tinker官方文档

主流热更新框架的简单比较

image.png

Gitbut表现 (2017-12-08 15:00)

image.png

image.png

image.png

Tinker能做什么

  • 添加删除类,方法
  • 替换so包
  • 资源替换
  • 修改Activity,包括添加和删除
  • 结合Tinker Platform热更新服务平台进行更新包下发
  • 获取更新补丁后,在下次APP重启(线程级)时完成更新
    虽然更修改的项目没多到让你为所欲为的地步,但也足够你应付产品经理的蜜汁需求或者关起门来偷偷改自己埋下的小bug,绝对不告诉别人

Tinker不能做什么

  • Tinker不支持修改AndroidManifest.xml,Tinker不支持新增四大组件(1.9.0支持新增非export的Activity);
  • 由于Google Play的开发者条款限制,不建议在GP渠道动态更新代码;
  • 在Android N上,补丁对应用启动时间有轻微的影响;
  • 不支持部分三星android-21机型,加载补丁时会主动抛出"TinkerRuntimeException:checkDexInstall failed";
  • 对于资源替换,不支持修改remoteView。例如transition动画,notification icon以及桌面图标。

利用Tinker Platform实现热更新

第一步:配置gradle

工程目录下添加插件


image.png
buildscript {
    repositories {
        jcenter()
        google()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.0'
        classpath "com.tinkerpatch.sdk:tinkerpatch-gradle-plugin:1.2.1"
    }
}

app目录下gradle配置依赖compile("com.tinkerpatch.sdk:tinkerpatch-android-sdk:1.2.1"),并添加Tinker配置gradle【tinkerpatch.gradle】

image.png

第二步:API 操作(具体看Demo)

public class App extends Application {
    ApplicationLike tinkerAppLike;

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
    }

    @Override
    public void onCreate() {
        super.onCreate();
        if (BuildConfig.TINKER_ENABLE){
            tinkerAppLike = TinkerPatchApplicationLike.getTinkerPatchApplicationLike();
            TinkerPatch.init(tinkerAppLike)
                    //是否自动反射Library路径,无须手动加载补丁中的So文件
                    //注意,调用在反射接口之后才能生效,你也可以使用Tinker的方式加载Library
                    .reflectPatchLibrary()
                    //设置收到后台回退要求时,锁屏清除补丁,默认是等主进程重启时自动清除
                    .setPatchRollbackOnScreenOff(true)
                    //设置补丁合成成功后,锁屏重启程序,默认是等应用自然重启
                    .setPatchRestartOnSrceenOff(true);
        }
    }
}

在合适的时候获取补丁

TinkerPatch.with().fetchPatchUpdate(true);

在客户端获取补丁后,Tinker会根据配置选择在锁屏的时候或者重启的时候自动完成补丁修补。

第三步:利用插件生成增量APK

image.png

第四不:上传到Tinker Platform平台

发布补丁

实时监控

总结

  • 在一个基础包上可以添加多个补丁
    为什么要选Tinker?
  • 傻瓜式一键生成补丁,AndFix要用apkpatch工具配合命令生成.patch文件
  • 长期维护
  • 长江后浪推前浪,吸取主流框架的经验和教训,独创补丁算法
  • 有信心把热更新做成商业级产品,还有谁

一个框架如果没有良好的维护,那么最开始就不要使用或者早点弃用,在对比了多个主流热更新框架的github上的star数,未解决的issues数后,你就会知道,其实Tinker现在【根本】【没有】【对手】

一个好的框架应该也是一个容易使用的框架,我们的目的是拿来能直接干活,如果使用过于复杂,过多的时间用在了研究原理上就得不偿失了,毕竟热修复不是简单的东西。比起其它热修复框架,Tinker最大优势是多了平台支持,可支持补丁下发及管理,实时监控补丁安装动态,让热修复变得更简单,更接地气,玩家不用自己搭建平台下发更新补丁,绝对是小公司和个人项目的福音。而且Tinker已经平铺在腾讯系产品中,几亿设备上运行,和大厂共进退,不用担心没人维护,有问题无法解决。如果你暂时没有找到合适的,可以一试。

就像阿里技术的万壑说的,专业的事情交给专业的人去做,开发者应该把更多的经历放到自己的核心业务之中。

TinkerDemo

image.png

你可能感兴趣的:(【Android进阶】1小时学会热更新--Tinker)