文档章节

热修复

android-key
 android-key
发布于 2017/07/07 13:28
字数 537
阅读 9
收藏 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
粉丝 7
博文 119
码字总数 170926
作品 0
武汉
私信 提问
阿里大牛推荐!业界首部安卓热修复宝典免费下载!

继《阿里巴巴Java开发手册》后,我们为小伙伴们带来了第二份礼物:业界首部全方位完整介绍热修复原理书籍《深入理解Android热修复技术原理》,该书为阿里巴巴手淘技术团队撰写,现已免费开放...

阿里云云栖社区
2017/07/06
0
0
荐书丨深入探索Android热修复技术原理

点击上方“程序人生”,选择“置顶公众号” 第一时间关注程序猿(媛)身边的故事 Android 系统热修复技术之作|移动开发人员人手一本查阅| 详解Sophix 热修复开发实践过程 热修复技术,可以看...

CSDN程序人生
09/01
0
0
全面了解Android热修复技术

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

腾讯WeTest
2017/09/26
0
0
【直播预告】阿里热修复产品HotFix2.0升级详解

热修复技术在移动开发领域一直颇受关注,阿里HotFix是阿里百川旗下全平台App热修复服务方案, 让您无需发版即可修复应用的线上问题。从不断完善修复场景、支持热启动修复,到更稳定的打包工具...

阿里百川博客
2016/12/07
375
0
Android 插件化和热修复知识梳理

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

IAM四十二
2017/11/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

isEmpty和null的区别

isEmpty和null的区别: 1.一个是对象为空(IsNull),一个是值为空(IsEmpty) 2.IsNull指任务类型变量是否为空包括对象类型的变量。 IsNull函数: 功能:返回Boolean的值,指明表达是否不包...

DemonsI
6分钟前
0
0
Centos7 安装mysql与php

https://blog.csdn.net/qq_36431213/article/details/79576025 官网下载安装mysql-server 依次使用下面三个命令安装 wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.r......

Yao--靠自己
16分钟前
0
0
详解如何实现一个简单的 vuex

首先我们需要知道为何要使用 vuex。父子组件通信用 prop 和自定义事件可以搞定,简单的非父子组件通信用 bus(一个空的 Vue 实例)。那么使用 vuex 就是为了解决复杂的非父子组件通信。 仅仅...

嫣然丫丫丫
21分钟前
1
0
算法——RangePartitioner实现之reservoirSample

简介 reservoir的作用是:**在不知道文件总行数的情况下,如何从文件中随机的抽取一行?**即是说如果最后发现文字档共有N行,则每一行被抽取的概率均为1/N? 我们可以:定义取出的行号为cho...

freeli
23分钟前
1
0
Python安装及netcdf数据读写

一、在CentOS7系统上安装Python3 在anaconda官网下载(http://https://www.anaconda.com/download/#linux)(Anaconda指的是一个开源的Python发行版本,是Python的包管理器和环境管理器) 下...

voole
27分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部