Android热修复Tinker接入文档
一、接入
按照官方文档https://bugly.qq.com/docs/user-guide/instruction-manual-android-hotfix/?v=20170526100125接入。
接入时使用
enableProxyApplication = true
方式接入tinker-support.gradle
中的bakPath
更改,默认是在build
文件夹下,每次clen
会清空bakPath = file("${rootProject.rootDir}/tinkerApk/") 复制代码
tinker-support.gradle
中的tinkerId
命名规范:- 基准包:tinkerId = "base-"+versionName
- 补丁包:tinkerId = "patch-"+versionName+"补丁序号"
二、Jenkins
打包
正常打包流程还是按照之前的步骤执行
打patch包时增加配置
#打补丁包时打开,格式固定为patch-版本号-序号 export tinkerId=patch-4.8.21-6 #基准包路径 export baseApkDir=app-1124-14-32-57#3.打[基准包]时注释,打[补丁包]需要打开 sed -i '/def baseApkDir/c'"def baseApkDir =\"${baseApkDir}\";" app/tinker-support.gradle #打补丁包时打开,PS:为了和其他tinkerId区分,查找的tinkerId前加了空格 sed -i '/tinkerId/c'"tinkerId =\"${tinkerId}\";" app/tinker-support.gradle 复制代码
tinkerId
按照规范去修改baseApkDie
目录为有Bug
的线上包的路径,拷贝最近一次打包的目录修改执行的
Gradle Task
为buildTinkerPatchOnlineRelease
三、热修复流程
- 发现
Bug
- 基于
tag
拉hotfix
分支 - 在
hotfix
分支打包 - 修复
bug
并提交 - 打补丁包
- 测试补丁
- 全量下发
四、测试流程
1.在AndroidStudio中chek线上bug包代码,在Bugly.init
之后增加
Bugly.setIsDevelopmentDevice(getApplicationContext(), BuildConfig.DEBUG);
复制代码
2.签名一定与线上签名保持一致
3.运行代码
4.将补丁包上传至bugly
热修复平台,选择开发设备下发
5.重启App
,进入主界面之后,等待1-2分钟
6.再次重启App
注:如未修复,请重复5,6步骤两到三次
五、遇到的坑
如果有多
Flavors
配置,需要在tinker-support.gradle
中配置buildAllFlavorsDir = "${bakPath}/${baseApkDir}" 复制代码
去掉一些配置 只有打开
buildAllFlavorsDir
才可以去掉// 编译补丁包时,必需指定基线版本的apk,默认值为空 // 如果为空,则表示不是进行补丁包的编译 // @{link tinkerPatch.oldApk } baseApk = "${bakPath}/${baseApkDir}/app-release.apk"// 对应tinker插件applyMapping baseApkProguardMapping = "${bakPath}/${baseApkDir}/app-release-mapping.txt"// 对应tinker插件applyResourceMapping baseApkResourceMapping = "${bakPath}/${baseApkDir}/app-release-R.txt" 复制代码
涉及到渠道需要上传加固包的比如 360、应用宝,需要在
tinker-support.gradle
中配置isProtectedApp = true 复制代码
注意:这个配置不会影响非加固包
注掉这个属性,官方文档有时候有这个属性,有时候没有。加了这个属性会导致编译不过
// 是否开启反射Application模式enableProxyApplication = false 复制代码
混淆规则使用
proguard-android.txt
不要使用混淆优化proguard-android-optimize.txt
,不然在打差异包再次混淆时会报错proguardFiles getDefaultProguardFile('proguard-android.txt') 复制代码
7z配置
本地配置
sevenZip {zipArtifact = "com.tencent.mm:SevenZip:1.1.10" } 复制代码
Jenkins服务器配置
sevenZip {zipArtifact = "com.tencent.mm:SevenZip:1.1.10"path = "/usr/bin/7za"} 复制代码
资源混淆
AndResGuard
目前暂时不支持资源混淆
六、目前效果
出现过一次线上bug,使用Tinker热修复,配合bugly发布平台,总耗时大概20分钟,到目前为止修复率很高,而且没有引起任何二次bug
复制代码
Android热修复Tinker接入文档相关推荐
- Android 热修复Tinker接入实战
1 热修复原理 热修复的原理一句话总结就是:就是dex的动态替换. 首先,我们知道PC上的JVM是直接解析class字节码的,而android上的JVM是解析dex文件的,因此Android程序要运行 ...
- Android 热修复 Tinker接入及源码浅析
本文已在我的公众号hongyangAndroid首发. 转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/54882693 本文出自 ...
- Android 热修复 Tinker接入及源码浅析最精彩没有之一
接入Tinker 接入tinker目前给了两种方式,一种是基于命令行的方式,类似于AndFix的接入方式:一种就是gradle的方式. 考虑早期使用Andfix的app应该挺多的,以及很多人对grad ...
- Android 热修复 Tinker Gradle Plugin解析
本文已在我的公众号hongyangAndroid原创首发. 转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/72667669 本文 ...
- Android热修复-Tinker简析
一.简介 日常工作工作中难免会遇到项目上线后出现bug问题,如果紧急发版往往由于渠道审核时间问题,导致bug修复不及时,影响用户体验.这时我们需要引入热修复,免去发版审核烦恼. 热更新优势: 让应用能 ...
- Android 微信热修复 Tinker 接入过程及使用方法
一.前言 学习热修复 Tinker 的使用,主要有两个原因: 业务需要:项目会出现一些细小的bug,需要等到发布新版才能修复,因此一直有关注热修复这块的技术. 技术驱动:这是一件需要一直保持的事情,不 ...
- Android热修复Tinker原理分析
目录 1.tinker的class文件修复 2.tinker的资源文件修复 3.几种热修复方案对比 1.tinker的class文件修复 1.1.先说dex文件的加载和类的查找过程 1.1.1.dex ...
- android热修复原理底层替换,Android 热修复 - 各框架原理学习及对比
写在开头 从15年开始各技术大佬们开始研究热修复技术,并陆续开源了许多的热修复框架.如 Jasonross 的 Nuwa,美团的 Robust,阿里的 Andfix,腾讯的 Tinker 等等...均 ...
- Android热修复之Tinker集成最新详解
前言 该文章属于初级集成详解,侧重Tinker的使用,如若想深入了解其原理请自行查阅相关文档Tinker相关文档 当前市面的热补丁方案有很多,其中比较出名的有阿里的 AndFix.美团的 Robust ...
最新文章
- 前端技术选型的遗憾和经验教训
- 【重磅】Tensorflow2.0实现29种深度强化学习算法大汇总
- Linux RPM 常用命令
- php mysql特殊符号过滤微信小程序_微信小程序数据过滤(filter)方法
- centos安装xrdp实现远程桌面访问
- Window 消息大全使用详解(无聊没事做)
- 我的BERT!改改字典,让BERT安全提速不掉分(已开源)
- kvm系列之四:热添加技术
- 【水果识别】基于matlab GUI自助水果超市【含Matlab源码 594期】
- 《Redis开发与运维》学习第一章
- 简约却不简单的科学原理闲谈(A Talk:Principles with simplicity but complicacy)
- python win7 sp1_64位win7需要升级Windows 7 Service Pack 1(sp1)升级包
- 宝塔面板php无法安装,宝塔面板php无法安装怎么办
- es进行curl请求时报错:missing authentication token for REST request
- 小猪短租网requests库使用
- 让你的编程不再乏味:「陪伴姬」来了!
- 第三章 区块链率先敲开金融的大门
- attribute和property的区别 (转载)
- oracle触发器和包,Oracle 学习笔记 19 -- 触发器和包浅析(PL/SQL)
- linux 嵌入式 播放器,基于Linux的嵌入式媒体播放器研究
热门文章
- 多城市教育培训机构行业企业站群系统源码-强大的SEO功能-内置三千多个城市
- 微擎乐慧云智慧农场源码V1.0.1
- 云海轻站V 1.0.17+智慧文章1.0.1插件(公众号同步官方最新版)
- 华北计算机研究所分房,请教公安部第一研究所这样分房合理吗??
- matlab画gds图,如何将图片转换为.gds文件?(转)
- 算法只能应用于计算机吗,把你的原则转换成算法,让计算机和你一起决策
- WordPress百度快速提交插件-加速百度爬虫和收录
- 5.1.1越狱后必装插件!
- vs2008 调试js
- FullCalendar 一: 日程安排FullCalendar