android热修复

手把手带你打造一个 Android 热修复框架(上篇)

巧了我就是萌 提交于 2019-12-03 11:29:08
本文来自网易云社区 作者:王晨彦 前言 热修复和插件化是目前 Android 领域很火热的两门技术,也是 Android 开发工程师必备的技能。 目前比较流行的热修复方案有微信的 Tinker,手淘的 Sophix,美团的 Robust,以及 QQ 空间热修复方案。 QQ 空间热修复方案使用Java实现,比较容易上手。 如果还不了解 QQ 空间方案的原理,请先学习 安卓App热补丁动态修复技术介绍 今天,我们就基于 QQ 空间方案来深入学习热修复原理,并且手把手完成一个热修复框架。 本文参考了 Nuwa ,在此表示感谢。 本文基于 Gradle 2.3.3 版本,支持 Gradle 1.5.0-3.0.1。 实战 了解了热修复原理后,我们就开始打造一个热修复框架 关闭dex校验 根据文章中提到的第一个问题,在 Android 5.0 以上,APK安装时,为了提高 dex 加载速度,未引用其他 dex 的 class 将会被打上 CLASS_ISPREVERIFIED 标志。 打上 CLASS_ISPREVERIFIED 标志的 class,类加载器就不会去其他 dex 中寻找 class,我们就无法使用插桩的方式替换 class。 文章给出了解决办法,即让所有类都依赖其他 dex。如何实现呢? 新建一个 Hack 类,让所有类都依赖该类,将该类打包成 dex,在应用启动时优先将该

阿里热修复集成

匿名 (未验证) 提交于 2019-12-03 00:26:01
最近一段时间,心情不是很好,在版本发布的时候,很多细节问题自己没有考虑到,测试也没有发现。 以前看过热更新的文档但是自己没有集成到项目里面过,今天集成做个记录。 阿里热更新 (Mobile Hotfix) 阿里 热更新最新版本3.2.3支持内容: 方法替换、 方法增加减少(需要在生成补丁时勾选强制 冷启动 )、 方法反射调用( 需要在生成补丁时勾选强制 冷启动 )、 即时生效(我没付费,反正我没有)、 多DEX(热更新的原理是将dex文件放入旧版本dex的前面,具体内容请看 点击打开链接 )、 资源更新、 so库更新、所有Android版本、所有机型(这个我不是很信^-^)。 在集成的时候,需要下载一个SDK,我将它放在libs下面,但是后来发现可以直接使用gradle,为了方便的我果断在 app的gradle文件下面添加依赖: compile 'com.aliyun.ams:alicloud-android-hotfix:3.2.3' 同时添加 maven仓库: repositories { maven { url "http://maven.aliyun.com/nexus/content/repositories/releases" } } 如若仓库访问失败, 那么只能用本地依赖的方式进行依赖; //热更新所需权限 <uses-permission android: name

Android 腾讯bugly Tinker 热修复

匿名 (未验证) 提交于 2019-12-02 23:49:02
https://bugly.qq.com/docs/user-guide/instruction-manual-android-hotfix/?v=20180709165613 简介 一、添加插件依赖 二、gradle配置 三、新建tinker-support.gradle 四、初始化SDK 五、AndroidManifest.xml配置 六、混淆配置: 七、生成基准包 八、生成补丁包 九、上传补丁包,见证热更新 一、添加插件依赖 buildscript { repositories { jcenter() } dependencies { classpath "com.tencent.bugly:tinker-support:1.1.5" } } 二、gradle配置 先生成一个jks密钥,然后在app module的“build.gradle”文件中添加(示例配置): android { defaultConfig { ndk { abiFilters 'armeabi' } signingConfigs { release { storeFile file(jks密钥库路径) storePassword 密钥库密码 keyAlias 密钥名 keyPassword 密钥密码 } } buildTypes { release { //应用签名信息 signingConfig

Android 热修复(一)

匿名 (未验证) 提交于 2019-12-02 23:49:02
名词: dex:java文件编译class 然后生成 dex文件在Android上运行; 1.dex分包; 2.找出出现问题的dex文件进行替换操作 3.下载dex文件,静默替换有问题的dex文件,进行修改 热修复详解: 1.确定那些文件是主类,不能出现问题的类; 2.多分包; 3.下载dex文件; 4.写到本并且注入; 二、注入详解:

Android热修复原理

匿名 (未验证) 提交于 2019-12-02 23:32:01
һ. AndFix AndFix的原理就是方法的替换,把有bug的方法替换成补丁文件中的方法。 注:在Native层使用指针替换的方式替换bug方法,已达到修复bug的目的。 AndFix采用native hook的方式,这套方案直接使用dalvik_replaceMethod替换class中方法的实现。由于它并没有整体替换class, 而field在class中的相对地址在class加载时已确定,所以AndFix无法支持新增或者删除filed的情况(通过替换init与clinit只可以修改field的数值)。Andfix可以支持的补丁场景相对有限,仅仅可以使用它来修复特定问题。 二. QZone(插桩方式) 一个ClassLoader可以包含多个dex文件,每个dex文件是一个Element,多个dex文件排列成一个有序的数组dexElements,当找类的时候,会按顺序遍历dex文件,然后从当前遍历的dex文件中找类,如果找类则返回,如果找不到从下一个dex文件继续查找。 理论上,如果在不同的dex中有相同的类存在,那么会优先选择排在前面的dex文件的类,如下图: 在此基础上,我们构想了热补丁的方案,把有问题的类打包到一个dex(patch.dex)中去,然后把这个dex插入到Elements的最前面,如下图: 三. 微信Tinker(差量包) Instant

Android热修复技术

人走茶凉 提交于 2019-11-26 16:23:50
一、基本概念 定义:动态的修复或者更新app的行为 热修复的好处:在用户没有感知的情况下完成bug修复和一些小功能的更新 流行的热修复技术: QQ空间的超级补丁方案 微信的Tinker 阿里的AndFix 美团的Robust、ele的migo、百度的hotfix 技术对比: 二、Tinker核心原理 基于android原生的ClassLoader,开发了自己的ClassLoader 基于android原生的aapt,开发了自己的aapt 微信团队自己基于Dex文件的格式,研发了DexDiff算法 来源: CSDN 作者: One-Heart 链接: https://blog.csdn.net/u011682673/article/details/103241568