Android升级gradle AGP、minSdkVersion 28后,APK包体积变大

AGP4.2后,默认关闭了So文件的压缩,
AGP7.1且minSdkVersion>=28后默认关闭了dex文件压缩,app bundle打包不受影响

现象

升级到AGP7之后发现打包出来的apk变大不少,将apk拖入Android studio中分析
对比下之前的apk发现主要so文件增大、dex文件未压缩

so文件压缩

AGP3.6之后默认关闭了so压缩,声明为true就行了

minSdkVersion < 23 或 Android Gradle plugin < 3.6.0情况下,打包时 android:extractNativeLibs=true;
minSdkVersion >= 23 并且 Android Gradle plugin >= 3.6.0情况下,打包时android:extractNativeLibs=false;
AndroidManifest.xml
    <application
        android:extractNativeLibs="true"
     ...>

或者

android {
    packagingOptions {
        jniLibs {
            useLegacyPackaging true
        }
    }
}

dex 文件压缩

android {
    packagingOptions {
        dex {
            useLegacyPackaging true
        }
    }
}

参考

https://stackoverflow.com/questions/75089735/why-does-minsdkversion-27-28-double-apk-size
https://developer.android.com/reference/tools/gradle-api/7.1/com/android/build/api/dsl/DexPackagingOptions#useLegacyPackaging:kotlin.Boolean
https://blog.csdn.net/zl_china/article/details/125212864
https://www.cnblogs.com/xiaxveliang/p/14583802.html

### Android StudioGradle 的配置原理与构建流程 #### 一、Gradle 工作机制概述 Gradle 是一种基于 Groovy 或 Kotlin DSL 编写的自动化构建工具,它通过定义的任务(Task)来完成一系列操作。在 Android Studio 中,Gradle 被用来管理和执行项目的编译、打以及依赖项解析等工作[^2]。 Gradle 的核心概念之一是 **任务驱动型构建**,这意味着整个构建过程由多个独立的任务组成,这些任务可以被串联起来形成完整的构建流水线。每个任务都有特定的目标,比如编译源代码、运行单元测试或者生成 APK 文件。 #### 二、Gradle 配置文件结构 Android Studio 使用两个主要的 `build.gradle` 文件来进行项目级和应用级的配置: 1. **Project-level build.gradle**: 定义全局设置,例如使用的 Gradle 版本、插件版本以及其他共享属性。 ```groovy buildscript { repositories { google() mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:7.0.4' // 指定 AGP 版本 } } allprojects { repositories { google() mavenCentral() } } ``` 2. **Module-level build.gradle**: 针对具体模块(通常是 app 模块),指定该模块特有的配置选项,如最低 SDK 版本、目标 SDK 版本、构建变体等。 ```groovy android { compileSdkVersion 31 defaultConfig { applicationId "com.example.myapp" minSdkVersion 21 targetSdkVersion 31 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } } dependencies { implementation 'androidx.appcompat:appcompat:1.4.1' } ``` 上述两部分共同构成了 Android 项目的完整构建环境配置。 #### 三、Gradle 构建生命周期 Gradle 的构建过程分为三个阶段:初始化、配置和执行。 1. **Initialization (初始化)** 在此阶段,Gradle 确定了要参与构建的项目列表,并创建相应的 Project 实例对象。如果是一个多模块工程,则会分别加载各个子模块的信息。 2. **Configuration (配置)** 此阶段读取所有的 `build.gradle` 文件并解析其中的内容,从而建立好所有 Task 对象及其之间的依赖关系图谱。这一环节非常重要,因为它决定了后续哪些具体的 Tasks 将会被触发执行。 3. **Execution (执行)** 根据前面所形成的 DAG(有向无环图 Directed Acyclic Graph),按照拓扑顺序依次调用对应的 Tasks 来实现最终产物——APK/APKS/Bundle 的生产或其他预设动作[^1]。 #### 四、优化 Gradle 构建性能的技术手段 为了提升大型项目的构建效率,可以从以下几个方面入手: - 启用增量构建功能; - 利用 Daemon 进程保持 JVM 常驻内存减少启动开销; - 开启 Parallel Execution 并行处理不同 Modules 下的任务; - 设置合适的 Java Heap Size 参数避免频繁 GC 影响速度; - 移除不必要的 Debug Symbols 减少输出体积等等。 ```groovy // Example of enabling parallel execution and daemon usage in gradle.properties file. org.gradle.parallel=true org.gradle.daemon=true ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值