文章目录

  • 一、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 分包设置 | 开发和产品风格设置 | 源码资源 )相关推荐

  1. 【Android 热修复】热修复原理 ( 合并两个 Element[] dexElements | 自定义 Application 加载 Dex 设置 | 源码资源 )

    文章目录 一.合并两个 Element[] dexElements 二. 完整修复包加载工具类 三. 源码资源 一.合并两个 Element[] dexElements 在 [Android 热修复] ...

  2. 【Android 热修复】热修复原理 ( Dex 文件拷贝后续操作 | 外部存储空间权限申请 | 执行效果验证 | 源码资源 )

    文章目录 一.Dex 文件准备 二.外部存储空间权限申请 1.清单文件申请权限 2.动态申请权限 三.文件拷贝 1.文件拷贝 2.执行效果 四. 源码资源 一.Dex 文件准备 在 [Android ...

  3. 【Android 热修复】热修复原理 ( 修复包 Dex 文件准备 | Dex 优化为 Odex | Dex 文件拷贝 | 源码资源 )

    文章目录 一.修复包 Dex 文件准备 二.Odex 优化 三.Dex 文件拷贝 四. 源码资源 一.修复包 Dex 文件准备 异常代码 : 故意写一个异常代码 , 并执行该代码 , 肯定会崩溃 ; ...

  4. 【Android 安全】DEX 加密 ( Application 替换 | 兼容 ContentProvider 操作 | 源码资源 )

    文章目录 一. 命中 ActivityThread 中 installProvider 方法的分支三 1. 原理分析 2. 代码实现 二. 在 ContextImpl 的 createPackageC ...

  5. 【Android 安全】Android 应用 APK 加固总结 ( 加固原理 | 应用加固完整的实现方案 | 源码资源 )

    文章目录 一. APK 加固原理 1. Android 应用反编译 2. ProGuard 混淆 3. 多 dex 加载原理 4. 代理 Application 开发 5.Java 工具开发 6.Ap ...

  6. PHP开发的站长导航网源码修复版

    介绍: PHP开发的站长导航网源码修复版 网盘下载地址: https://zijiewangpan.com/Fux3rvzwPg5 图片:

  7. android 播放器封装,Android视频播放最全总结:MediaPlayer+TextureView封装一个完美实现全屏、小窗视频播放器,附项目源码...

    原标题:Android视频播放最全总结:MediaPlayer+TextureView封装一个完美实现全屏.小窗视频播放器,附项目源码 作者:xiaoyanger 来源:http://www.jian ...

  8. 【Android 进程保活】应用进程拉活 ( JobScheduler 拉活 | JobScheduler 使用流程 | JobService 服务 | 不同版本兼容 | 源码资源 )

    文章目录 一. JobScheduler 用法简介 二. JobScheduler 拉活完整代码 1. JobService 2.清单文件 3.启动 JobScheduler 任务 4.运行效果 三. ...

  9. 【Android 进程保活】应用进程拉活 ( 账户同步拉活 | 账号添加 | 源码资源 )

    文章目录 一. 账号添加 二. 代码示例 1. 账号添加工具类 2. 权限注册 3. 在 Activity 中调用上述工具类 4. 运行效果 三. 源码资源 一. 账号添加 在上一篇博客 [Andro ...

最新文章

  1. JAVA对象转为Java String的几种常用方法
  2. python中等高线填充颜色_Python matplotlib使用colormap更改contourf plot中指定值的颜色...
  3. python中返回上一步操作的代码_Pycharm代码跳转后退回操作详解
  4. (AS3)组内成员之间的互斥管理
  5. 小程序WXML基本使用
  6. 语言非递归求解树的高度_算法素颜(11):无死角“盘”它!二分查找树
  7. 将list转为json字符串
  8. 学术诚信的重要性_关于学术诚信
  9. Python编程的例子----股票数据接口
  10. 基于jsp、ssm企业工资管理系统
  11. Altova XMLSpy2011的破解出现的问题
  12. 顺序表的类型定义与基本操作
  13. MetaLife与ESTV建立战略合作伙伴关系并任命其首席执行官Eric Yoon为顾问
  14. 计算机上无线网络开关在哪里,联想笔记本无线网络开关,教您联想笔记本无线网络开关在哪...
  15. java volatile理解
  16. 怎么学好html5和css3,如何提高你的CSS水平
  17. Unity Recorder屏幕录制问题
  18. 达人评测i51235u和i51135g7哪个好
  19. PHP将图片和文字合成到一张背景图上
  20. Latex图片、公式、参考文献插入技巧

热门文章

  1. 关于code reiview
  2. 在 Mac OSX 版的 LispBox 环境上安装配置 SBCL 详细过程
  3. [ant]通过Android命令自动编译出build.xml文件
  4. 响应键盘delete键的删除功能
  5. 与html相关的知识点整理
  6. MYSQL 看书笔记
  7. 将数据文件附加到数据库
  8. string:值类型?引用类型?[转]
  9. 如何使用AWS和Azure的配置存储服务保存读取配置
  10. CodeForces 390E Inna and Large Sweet Matrix(树状数组改段求段)