【Android 热修复】热修复原理 ( 多 Dex 打包机制 | 多 Dex 支持 | Dex 分包设置 | 开发和产品风格设置 | 源码资源 )

简介: 【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 类加载时 , 必须进行分包操作 , 必须有 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 ;


image.png




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 更新包在源码工程根目录 )


目录
相关文章
|
28天前
|
算法 Linux 调度
深入探索安卓系统的多任务处理机制
【10月更文挑战第21天】 本文旨在为读者提供一个关于Android系统多任务处理机制的全面解析。我们将从Android操作系统的核心架构出发,探讨其如何管理多个应用程序的同时运行,包括进程调度、内存管理和电量优化等方面。通过深入分析,本文揭示了Android在处理多任务时所面临的挑战以及它如何通过创新的解决方案来提高用户体验和设备性能。
41 1
|
1月前
|
存储 安全 Android开发
探索Android与iOS的隐私保护机制
在数字化时代,移动设备已成为我们生活的一部分,而隐私安全是用户最为关注的问题之一。本文将深入探讨Android和iOS两大主流操作系统在隐私保护方面的策略和实现方式,分析它们各自的优势和不足,以及如何更好地保护用户的隐私。
|
2月前
|
消息中间件 存储 Java
Android消息处理机制(Handler+Looper+Message+MessageQueue)
Android消息处理机制(Handler+Looper+Message+MessageQueue)
44 2
|
4月前
|
API 开发工具 Android开发
视觉智能开放平台产品使用合集之人脸活体检测能力是否支持Android端或者iOS端直接调用
视觉智能开放平台是指提供一系列基于视觉识别技术的API和服务的平台,这些服务通常包括图像识别、人脸识别、物体检测、文字识别、场景理解等。企业或开发者可以通过调用这些API,快速将视觉智能功能集成到自己的应用或服务中,而无需从零开始研发相关算法和技术。以下是一些常见的视觉智能开放平台产品及其应用场景的概览。
|
27天前
|
Linux Android开发 iOS开发
深入探索Android与iOS的多任务处理机制
在移动操作系统领域,Android和iOS各有千秋,尤其在多任务处理上展现出不同的设计理念和技术实现。本文将深入剖析两大平台在后台管理、资源分配及用户体验方面的策略差异,揭示它们如何平衡性能与电池寿命,为用户带来流畅而高效的操作体验。通过对比分析,我们不仅能够更好地理解各自系统的工作机制,还能为开发者优化应用提供参考。
|
2月前
|
消息中间件 存储 Java
Android面试高频知识点(2) 详解Android消息处理机制(Handler)
Android面试高频知识点(2) 详解Android消息处理机制(Handler)
|
2月前
|
消息中间件 存储 Java
Android面试高频知识点(2) 详解Android消息处理机制(Handler)
Android面试高频知识点(2) 详解Android消息处理机制(Handler)
58 1
|
2月前
|
存储 安全 数据安全/隐私保护
探索安卓与iOS的隐私保护机制####
【10月更文挑战第15天】 本文深入剖析了安卓和iOS两大操作系统在隐私保护方面的策略与技术实现,旨在揭示两者如何通过不同的技术手段来保障用户数据的安全与隐私。文章将逐一探讨各自的隐私控制功能、加密措施以及用户权限管理,为读者提供一个全面而深入的理解。 ####
76 1
|
2月前
|
消息中间件 存储 Java
Android消息处理机制(Handler+Looper+Message+MessageQueue)
Android消息处理机制(Handler+Looper+Message+MessageQueue)
59 2
|
3月前
|
存储 缓存 Android开发
Android RecyclerView 缓存机制深度解析与面试题
本文首发于公众号“AntDream”,详细解析了 `RecyclerView` 的缓存机制,包括多级缓存的原理与流程,并提供了常见面试题及答案。通过本文,你将深入了解 `RecyclerView` 的高性能秘诀,提升列表和网格的开发技能。
77 8