【Android 热修复】热修复原理 ( 多 Dex 打包机制 | 多 Dex 支持 | Dex 分包设置 | 开发和产品风格设置 | 源码资源 )
文章目录
- 一、Dex 打包设置
- 1、多 Dex 支持
- 2、Dex 分包设置
- 3、开发和产品风格设置 ( 非必须 )
- 二、完整 build.gradle 配置
- 1、build.gradle 配置
- 2、dex.keep 配置
- 二、 源码资源
一、Dex 打包设置
在 【Android 热修复】热修复原理 ( 类加载机制 | PathClassLoader 加载 Dex 机制 | PathDexList 查找 Class 机制 | 类查找的顺序机制 )三、 类查找的顺序机制 博客章节有讲解到 , Android 类加载时 , 必须进行分包操作 , 必须有 111 个主包 , 若干其它分包 , 主包中只包含应用启动少量代码 , 如 Application , MainActivity 等 , 修复包 Dex 文件需要插入到主包后面 , 其它分包前面 , 才能生效 ;
如果主包出现问题 , 只能发布新版本 ;
指定主包的文件 , 主包之外的类打包到其它分包 , 每个分包都有固定大小 , 分包会自动根据大小分为若干分包 ;
1、多 Dex 支持
首先 ,
在 build.gradle 中配置 implementation 'com.android.support:multidex:1.0.2'
依赖 ,
在 android / defaultConfig 层级配置支持多 Dex 设置 multiDexEnabled true
,
在 android / buildTypes / release 层级配置支持多 Dex 设置 multiDexEnabled true
,
android {defaultConfig {multiDexEnabled true}buildTypes {release {multiDexEnabled true}}
}
dependencies {implementation 'com.android.support:multidex:1.0.2'
}
然后 , 在 Application 中进行加载 , 在 attachBaseContext 中调用 MultiDex.install(base)
代码 ,
public class MyApplication extends Application {@Overrideprotected void attachBaseContext(Context base) {MultiDex.install(base);super.attachBaseContext(base);}@Overridepublic void onCreate() {super.onCreate();}
}
2、Dex 分包设置
规则语法 :
在 Module 下的 build.gradle 构建脚本中的 android / buildTypes / release 层级下 , 配置 multiDexKeepFile 设置 ,
通过该设置 , 可以设置 Dex 打包规则 ,
为 multiDexKeepFile 文件 , 定义规则 , 该定义规则有一定的语法 , 哪些 Java 源码文件打包在主 Dex 中 , 可以通过该配置进行定义 ;
在 app 目录下创建 " dex.keep " 文本文件 , 这里设置主包打包的 Java 字节码文件 , 其它的类都打包到分包中 ;
dex.keep 主包打包规则文件内容 :
kim/hsl/hotfix/MainActivity.class
kim/hsl/hotfix/MyApplication.class
build.gradle 配置 :
android {buildTypes {release {// 保留multiDexKeepFile file("dex.keep")}}
}
打包效果 : 生成的 apk 文件中 , classes.dex 是主 Dex 文件 , classes2.dex 是分包 dex ;
3、开发和产品风格设置 ( 非必须 )
productFlavors 设置后 , 可以在开发调试时 , 节省时间 , 不是必须的 , 不设置也不会报错 ;
如果配置了 productFlavors 选项 , 那么必须在 defaultConfig 中配置 flavorDimensions 维度版本号 , 否则在高版本的 Gradle 插件的情况下会报错 ;
android {defaultConfig {// 维度版本号flavorDimensions "1.0"}// 定义不同的开发和产品风格productFlavors {// 开发风格dev {// 开发时使用 minSDKVersion = 21 允许 Android Gradle 插件// 为每个 Module 模块产生一个 APK 安装包 , 可以在 Android Lollipop 系统上进行测试// 无需进行耗时的 dex 合并过程minSdkVersion 21}// 产品风格prod {// 应用实际的最小 SDKminSdkVersion 14}}
}
二、完整 build.gradle 配置
1、build.gradle 配置
plugins {id 'com.android.application'
}android {compileSdkVersion 30buildToolsVersion "30.0.3"defaultConfig {applicationId "kim.hsl.hotfix"minSdkVersion 16targetSdkVersion 30versionCode 1versionName "1.0"multiDexEnabled true// 维度版本号flavorDimensions "1.0"testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"}// 定义不同的开发和产品风格productFlavors {// 开发风格dev {// 开发时使用 minSDKVersion = 21 允许 Android Gradle 插件// 为每个 Module 模块产生一个 APK 安装包 , 可以在 Android Lollipop 系统上进行测试// 无需进行耗时的 dex 合并过程minSdkVersion 21}// 产品风格prod {// 应用实际的最小 SDKminSdkVersion 14}}buildTypes {release {multiDexEnabled true// 保留multiDexKeepFile file("dex.keep")minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}}compileOptions {sourceCompatibility JavaVersion.VERSION_1_8targetCompatibility JavaVersion.VERSION_1_8}
}dependencies {implementation 'androidx.appcompat:appcompat:1.2.0'implementation 'com.google.android.material:material:1.3.0'implementation 'androidx.constraintlayout:constraintlayout:2.0.4'testImplementation 'junit:junit:4.+'androidTestImplementation 'androidx.test.ext:junit:1.1.2'androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'// 使用 Android X 的应用添加该依赖implementation 'pub.devrel:easypermissions:3.0.0'implementation 'com.android.support:multidex:1.0.2'
}
2、dex.keep 配置
kim/hsl/hotfix/MainActivity.class
kim/hsl/hotfix/MyApplication.class
二、 源码资源
源码资源 :
- GitHub 地址 : https://github.com/han1202012/HotFix
- CSDN 源码快照 : https://download.csdn.net/download/han1202012/16676099
( update.dex 更新包在源码工程根目录 )
【Android 热修复】热修复原理 ( 多 Dex 打包机制 | 多 Dex 支持 | Dex 分包设置 | 开发和产品风格设置 | 源码资源 )相关推荐
- 【Android 热修复】热修复原理 ( 合并两个 Element[] dexElements | 自定义 Application 加载 Dex 设置 | 源码资源 )
文章目录 一.合并两个 Element[] dexElements 二. 完整修复包加载工具类 三. 源码资源 一.合并两个 Element[] dexElements 在 [Android 热修复] ...
- 【Android 热修复】热修复原理 ( Dex 文件拷贝后续操作 | 外部存储空间权限申请 | 执行效果验证 | 源码资源 )
文章目录 一.Dex 文件准备 二.外部存储空间权限申请 1.清单文件申请权限 2.动态申请权限 三.文件拷贝 1.文件拷贝 2.执行效果 四. 源码资源 一.Dex 文件准备 在 [Android ...
- 【Android 热修复】热修复原理 ( 修复包 Dex 文件准备 | Dex 优化为 Odex | Dex 文件拷贝 | 源码资源 )
文章目录 一.修复包 Dex 文件准备 二.Odex 优化 三.Dex 文件拷贝 四. 源码资源 一.修复包 Dex 文件准备 异常代码 : 故意写一个异常代码 , 并执行该代码 , 肯定会崩溃 ; ...
- 【Android 安全】DEX 加密 ( Application 替换 | 兼容 ContentProvider 操作 | 源码资源 )
文章目录 一. 命中 ActivityThread 中 installProvider 方法的分支三 1. 原理分析 2. 代码实现 二. 在 ContextImpl 的 createPackageC ...
- 【Android 安全】Android 应用 APK 加固总结 ( 加固原理 | 应用加固完整的实现方案 | 源码资源 )
文章目录 一. APK 加固原理 1. Android 应用反编译 2. ProGuard 混淆 3. 多 dex 加载原理 4. 代理 Application 开发 5.Java 工具开发 6.Ap ...
- PHP开发的站长导航网源码修复版
介绍: PHP开发的站长导航网源码修复版 网盘下载地址: https://zijiewangpan.com/Fux3rvzwPg5 图片:
- android 播放器封装,Android视频播放最全总结:MediaPlayer+TextureView封装一个完美实现全屏、小窗视频播放器,附项目源码...
原标题:Android视频播放最全总结:MediaPlayer+TextureView封装一个完美实现全屏.小窗视频播放器,附项目源码 作者:xiaoyanger 来源:http://www.jian ...
- 【Android 进程保活】应用进程拉活 ( JobScheduler 拉活 | JobScheduler 使用流程 | JobService 服务 | 不同版本兼容 | 源码资源 )
文章目录 一. JobScheduler 用法简介 二. JobScheduler 拉活完整代码 1. JobService 2.清单文件 3.启动 JobScheduler 任务 4.运行效果 三. ...
- 【Android 进程保活】应用进程拉活 ( 账户同步拉活 | 账号添加 | 源码资源 )
文章目录 一. 账号添加 二. 代码示例 1. 账号添加工具类 2. 权限注册 3. 在 Activity 中调用上述工具类 4. 运行效果 三. 源码资源 一. 账号添加 在上一篇博客 [Andro ...
最新文章
- JAVA对象转为Java String的几种常用方法
- python中等高线填充颜色_Python matplotlib使用colormap更改contourf plot中指定值的颜色...
- python中返回上一步操作的代码_Pycharm代码跳转后退回操作详解
- (AS3)组内成员之间的互斥管理
- 小程序WXML基本使用
- 语言非递归求解树的高度_算法素颜(11):无死角“盘”它!二分查找树
- 将list转为json字符串
- 学术诚信的重要性_关于学术诚信
- Python编程的例子----股票数据接口
- 基于jsp、ssm企业工资管理系统
- Altova XMLSpy2011的破解出现的问题
- 顺序表的类型定义与基本操作
- MetaLife与ESTV建立战略合作伙伴关系并任命其首席执行官Eric Yoon为顾问
- 计算机上无线网络开关在哪里,联想笔记本无线网络开关,教您联想笔记本无线网络开关在哪...
- java volatile理解
- 怎么学好html5和css3,如何提高你的CSS水平
- Unity Recorder屏幕录制问题
- 达人评测i51235u和i51135g7哪个好
- PHP将图片和文字合成到一张背景图上
- Latex图片、公式、参考文献插入技巧