文档章节

热修复

android-key
 android-key
发布于 2017/07/07 13:28
字数 537
阅读 8
收藏 0
点赞 0
评论 0

1.接入Tinker

接入tinker目前给了两种方式,一种是基于命令行的方式,类似于AndFix的接入方式;一种就是gradle的方式。

1.1)命令行接入

  1. 对于API: 一般来说,我们接入热修库,会在Application#onCreate中进行一下初始化操作。然后在某个地方去调用类似loadPatch这样的API去加载patch文件。
  2. 对于patch的生成:简单的方式就是通过两个apk做对比然后生成;需要注意的是:两个apk做对比,需要的前提条件,第二次打包混淆所使用的mapping文件应该和线上apk是一致的。

1.2)依赖引入

dependencies {
    // ...
    //可选,用于生成application类
     provided('com.tencent.tinker:tinker-android-anno:1.7.11')
    //tinker的核心库
   compile('com.tencent.tinker:tinker-android-lib:1.7.11') 
}

1.3)添加签名配置,这里我直接采用Tinker给的签名文件

signingConfigs {
        release {
            try {
                storeFile file("release.keystore")
                storePassword "testres"
                keyAlias "testres"
                keyPassword "testres"
            } catch (ex) {
                throw new InvalidUserDataException(ex.toString())
            }
        }
    }

    buildTypes {
        release {
            minifyEnabled true
            signingConfig signingConfigs.release
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug {
            debuggable true
            minifyEnabled true
            signingConfig signingConfigs.release
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

1.4)Api的引入主要进行初始化和loadpacth

@DefaultLifeCycle(application = ".SimpleTinkerInApplicationLike",
                  flags = ShareConstants.TINKER_ENABLE_ALL,
                  loadVerifyFlag = false
                )
public class SimpleTinkerInApplicationLike extends ApplicationLike{
    public SimpleTinkerInApplicationLike(Application application, int tinkerFlags, boolean tinkerLoadVerifyFlag, long applicationStartElapsedTime, long applicationStartMillisTime, Intent tinkerResultIntent) {
        super(application, tinkerFlags, tinkerLoadVerifyFlag, applicationStartElapsedTime, applicationStartMillisTime, tinkerResultIntent);
    }

    @Override
    public void onBaseContextAttached(Context base) {
        super.onBaseContextAttached(base);
    }

    @Override
    public void onCreate() {
        super.onCreate();
    }
}

ApplicationLike通过名字你可能会猜,并非是Application的子类,而是一个类似Application的类。

tinker建议编写一个ApplicationLike的子类,你可以当成Application去使用,注意顶部的注解:@DefaultLifeCycle,其application属性,会在编译期生成一个SimpleTinkerInApplication类。

因此我们需要去AndroidManifest.xml配置

<application
        android:name=".SimpleTinkerInApplication"
        .../>

上述,就完成了tinker的初始化,那么调用loadPatch的时机,我们直接在Activity中添加一个Button设置:

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    }

    public void loadPacth(View v){
        TinkerInstaller.onReceiveUpgradePatch(getApplicationContext(),
                Environment.getExternalStorageState()+"/patch_signed.apk");
    }
}

这样就把patch文件直接push到sdcard根目录(如果是6.0以上自己去动态的申请权限)

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

除以以外,有个特殊的地方就是tinker需要在AndroidManifest.xml中指定TINKER_ID。

到此API相关的就结束了,剩下的就是考虑patch如何生成。

 

 

 

© 著作权归作者所有

共有 人打赏支持
android-key
粉丝 6
博文 88
码字总数 154324
作品 0
孝感
全面了解Android热修复技术

作者:赵裕, 腾讯移动客户端开发 商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处。 原文链接:http://wetest.qq.com/lab/view/338.html WeTest 导读 本文探讨了Android热修复技术...

腾讯WeTest ⋅ 2017/09/26 ⋅ 0

Android 插件化和热修复知识梳理

概述 在Android开发中,插件化和热修复的话题越来越多的被大家提及,同时随着技术的迭代,各种框架的发展更新,插件化和热修复的框架似乎已经日趋成熟,许多开发者也把这两项技术运用到实际开...

IAM四十二 ⋅ 2017/11/28 ⋅ 0

“百川解码”第一期 热修复的坑和阿里的解

热修复是很多开发者关心的技术,8月27日晚,阿里百川组织了“百川解码”在线直播,以“热修复的坑和阿里的解”为主题,邀请了三位业界嘉宾对热修复技术进行了探讨,并介绍了阿里百川全面接受...

阿里百川 ⋅ 2016/09/12 ⋅ 5

Android 热修复 - 各框架原理学习及对比

写在开头 从15年开始各技术大佬们开始研究热修复技术,并陆续开源了许多的热修复框架。如和Jasonross 的[Nuwa][1],美团的[Robust][2],阿里的[Andfix][3],腾讯的[Tinker][4] 等等...均是A...

GoileoLee ⋅ 2017/12/12 ⋅ 0

程序员扪心自问:给你一份月薪40k的工作,你能胜任吗?

  最近打算换工作,搜了搜招聘网上安卓工程师的岗位,好多岗位月薪30k-40k,搜狗、新浪、爱奇艺、美团、挖财等都在招人,看得我激动      你是不是也心动了?也想得到这样的offer?打开...

Android群英传 ⋅ 2017/11/21 ⋅ 0

dhtmlxSuite 4.5.1/dhtmlxVault 2.4.1 发布

dhtmlxSuite 4.5.1/dhtmlxVault 2.4.1 发布,这些版本都是热修复版本,修复了一些重要的问题,强烈建议更新到最新版本。 这些热修复版本:swf 的 XSS 漏洞修复。此外,dhtmlxVault 还有一些值...

叶秀兰 ⋅ 2015/11/22 ⋅ 2

Android热修复技术选型——三大流派解析

2015年以来,Android开发领域里对热修复技术的讨论和分享越来越多,同时也出现了一些不同的解决方案,如QQ空间补丁方案、阿里AndFix以 及微信Tinker,它们在原理各有不同,适用场景各异,到底...

阿里百川 ⋅ 2016/09/12 ⋅ 0

【直播预告】云栖直播:阿里热修复产品HotFix2.0升级详解

全面——你知道吗?1891年,卡尔森纳做出的第一把瑞士军刀,只有螺丝刀和开罐器。经过一代又一代能工巧匠的打磨,这把刀陆续增加了锯子、剪刀、镊子、放大镜、改锥,甚至内藏激光、LED手电筒...

阿里百川 ⋅ 2016/12/01 ⋅ 0

支付宝漏洞 - 问题剖析&热修复解决方案

事件概述 事件开始于知乎的一个问题:如何看待支付宝 1 月 10 日被曝光的非密码登录模式下可能出现的账户安全风险? 打开支付宝登录界面,输入帐号后点击忘记密码 输入帐号后直接点无法接收短...

稀土君 ⋅ 2017/01/10 ⋅ 0

笔记 深入探索Android热修复技术原理

阿里电子书《深入探索Android热修复技术原理》整理的笔记 1.热修复技术介绍 代码修复两大主要方案 代码修复底层替换方案 代码修复类加载方案 资源修复 SO库修复:本质上是对native方法的修复和...

幻海流心 ⋅ 05/23 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

浅谈springboot Web模式下的线程安全问题

我们在@RestController下,一般都是@AutoWired一些Service,由于这些Service都是单例,所以并不存在线程安全问题。 由于Controller本身是单例模式 (非线程安全的), 这意味着每个request过来,...

算法之名 ⋅ 今天 ⋅ 0

知乎Java数据结构

作者:匿名用户 链接:https://www.zhihu.com/question/35947829/answer/66113038 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 感觉知乎上嘲讽题主简...

颖伙虫 ⋅ 今天 ⋅ 0

Confluence 6 恢复一个站点有关使用站点导出为备份的说明

推荐使用生产备份策略。我们推荐你针对你的生产环境中使用的 Confluence 参考 Production Backup Strategy 页面中的内容进行备份和恢复(这个需要你备份你的数据库和 home 目录)。XML 导出备...

honeymose ⋅ 今天 ⋅ 0

JavaScript零基础入门——(九)JavaScript的函数

JavaScript零基础入门——(九)JavaScript的函数 欢迎回到我们的JavaScript零基础入门,上一节课我们了解了有关JS中数组的相关知识点,不知道大家有没有自己去敲一敲,消化一下?这一节课,...

JandenMa ⋅ 今天 ⋅ 0

火狐浏览器各版本下载及插件httprequest

各版本下载地址:http://ftp.mozilla.org/pub/mozilla.org//firefox/releases/ httprequest插件截至57版本可用

xiaoge2016 ⋅ 今天 ⋅ 0

Docker系列教程28-实战:使用Docker Compose运行ELK

原文:http://www.itmuch.com/docker/28-docker-compose-in-action-elk/,转载请说明出处。 ElasticSearch【存储】 Logtash【日志聚合器】 Kibana【界面】 答案: version: '2'services: ...

周立_ITMuch ⋅ 今天 ⋅ 0

使用快嘉sdkg极速搭建接口模拟系统

在具体项目研发过程中,一旦前后端双方约定好接口,前端和app同事就会希望后台同事可以尽快提供可供对接的接口方便调试,而对后台同事来说定好接口还仅是个开始、设计流程,实现业务逻辑,编...

fastjrun ⋅ 今天 ⋅ 0

PXE/KickStart 无人值守安装

导言 作为中小公司的运维,经常会遇到一些机械式的重复工作,例如:有时公司同时上线几十甚至上百台服务器,而且需要我们在短时间内完成系统安装。 常规的办法有什么? 光盘安装系统 ===> 一...

kangvcar ⋅ 昨天 ⋅ 0

使用Puppeteer撸一个爬虫

Puppeteer是什么 puppeteer是谷歌chrome团队官方开发的一个无界面(Headless)chrome工具。Chrome Headless将成为web应用自动化测试的行业标杆。所以我们很有必要来了解一下它。所谓的无头浏...

小草先森 ⋅ 昨天 ⋅ 0

Java Done Right

* 表示难度较大或理论性较强。 ** 表示难度更大或理论性更强。 【Java语言本身】 基础语法,面向对象,顺序编程,并发编程,网络编程,泛型,注解,lambda(Java8),module(Java9),var(...

风华神使 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部