文章目录
一、Dex 打包设置
1、多 Dex 支持
2、Dex 分包设置
3、开发和产品风格设置 ( 非必须 )
二、完整 build.gradle 配置
1、build.gradle 配置
2、dex.keep 配置
二、 源码资源
一、Dex 打包设置
在 【Android 热修复】热修复原理 ( 类加载机制 | PathClassLoader 加载 Dex 机制 | PathDexList 查找 Class 机制 | 类查找的顺序机制 )三、 类查找的顺序机制 博客章节有讲解到 , Android 类加载时 , 必须进行分包操作 , 必须有 1 11 个主包 , 若干其它分包 , 主包中只包含应用启动少量代码 , 如 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 { @Override protected void attachBaseContext(Context base) { MultiDex.install(base); super.attachBaseContext(base); } @Override public 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 { // 应用实际的最小 SDK minSdkVersion 14 } } }
二、完整 build.gradle 配置
1、build.gradle 配置
plugins { id 'com.android.application' } android { compileSdkVersion 30 buildToolsVersion "30.0.3" defaultConfig { applicationId "kim.hsl.hotfix" minSdkVersion 16 targetSdkVersion 30 versionCode 1 versionName "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 { // 应用实际的最小 SDK minSdkVersion 14 } } buildTypes { release { multiDexEnabled true // 保留 multiDexKeepFile file("dex.keep") minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility 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 更新包在源码工程根目录 )