一、Gradle 依赖类型1、基本介绍compileOnly只在编译时用不打包进 APK省体积annotationProcessor编译时处理注解也不打包// 代码里写了例如 Data编译时编译器要检查这个注解是否存在需要找到 Lombok 的类定义// 简单来说就是找到注解定义// 如果只写 compileOnly注解处理器不执行Lombok 注解无效compileOnlyorg.projectlombok:lombok:1.18.32// 编译时读取 Data、Getter 等注解自动生成 getter、setter、构造方法等 Java 代码// 生成代码后这些类的.class文件里就有了完整的方法实现// 简单来说就是找到注解处理器// 如果只写 annotationProcessor主代码编译时找不到 Lombok 的注解类annotationProcessororg.projectlombok:lombok:1.18.32api编译 运行时都有且会泄露给子模块子模块也能用apicom.alibaba:fastjson:1.2.83implementation编译 运行时都有但不泄露给子模块implementationcom.alibaba:fastjson:1.2.832、补充学习compileOnlyorg.projectlombok:lombok:1.18.32annotationProcessororg.projectlombok:lombok:1.18.32在 Gradle 多模块项目中子模块中声明的 compileOnly 和 annotationProcessor 依赖不会传递给父模块compileOnly 和 annotationProcessor 的依赖范围是模块私有的处理策略是在父模块中也声明 compileOnly 和 annotationProcessor 依赖二、Gradle 传递与去重有一个模块 A 模块 A 被模块 B 通过 api 依赖 模块 A 被模块 C 通过 api 依赖 现在模块 D 通过 implementation 依赖模块 B、模块 C 模块 B、模块 C 它们共同 api 依赖的模块 A 会怎么样冲突模块 D ├── implementation 依赖 B │ └── api 依赖 A └── implementation 依赖 C └── api 依赖 A模块 D 会只有一个模块 A 的副本不会重复三、查看 APK 中的 versionCode 与 versionName1、使用 aaptaapt 是 Android SDK 自带的工具位于build-tools/目录下aapt dump badging 【APK】2、使用 aapt2使用 aapt2aapt2 dump badging 【APK】3、使用 Android Studio使用 Android Studio 打开 APK直接拖入在 AndroidManifest.xml 文件中可以查看 versionCode 与 versionName四、aapt 与 aapt21、基本介绍aapt / aapt2 全程 Android Asset Packaging Tool是 Android SDK 自带的工具位于build-tools/目录下aapt / aapt2 都是用来把资源文件例如布局、图片等编译打包成 APK 的核心工具从 Android Studio 3.0 开始aapt2 就是默认开启的绝大多数开发者无需手动干预2、aaptaapt 是把所有资源一股脑倒进去一次性完成所有处理输出 APKaapt 每次都【全量编译】所有文件3、aapt2aapt2 最核心的变化是拆成了两个清晰的步骤编译与链接编译把每一个资源文件例如strings.xml、icon.png单独编译成一个中间格式文件.flat 链接把所有 .flat 文件合并起来最终打包成一个 APK当只修改了一个文件时它只需重新编译那一个文件再和其他未改动的 .flat 文件快速链接即可即【增量编译】五、Gradle 未及时同步问题在 Android 开发中如果修改了模块级build.gradle文件中的 versionCode 和 versionName但没有点击 Sync NowGradle 同步打包时可能会使用旧的 versionCode 和 versionName但是我实测下来发现打包时会使用新的 versionCode 和 versionName在修改了模块级build.gradle文件后立即执行 Sync Now 是一个好习惯六、aidl.exeaidl.exe是 Android SDK 自带的一个命令行工具它的作用是将编写的.aidl接口文件自动转换成 Java 代码aidl.exe位于【SDK 目录】/build-tools/【版本号】/aidl.exe在较新版本的 Android Gradle Plugin 中AIDL 编译默认是关闭的需要在模块级build.gradle文件中开启android{buildFeatures{aidltrue}}开启后触发构建流程自动调用aidl.exe
Android Gradle - Gradle 依赖类型、Gradle 传递与去重、查看 APK 中的 versionCode 与 versionName、aapt 与 aapt2
发布时间:2026/6/19 2:19:50
一、Gradle 依赖类型1、基本介绍compileOnly只在编译时用不打包进 APK省体积annotationProcessor编译时处理注解也不打包// 代码里写了例如 Data编译时编译器要检查这个注解是否存在需要找到 Lombok 的类定义// 简单来说就是找到注解定义// 如果只写 compileOnly注解处理器不执行Lombok 注解无效compileOnlyorg.projectlombok:lombok:1.18.32// 编译时读取 Data、Getter 等注解自动生成 getter、setter、构造方法等 Java 代码// 生成代码后这些类的.class文件里就有了完整的方法实现// 简单来说就是找到注解处理器// 如果只写 annotationProcessor主代码编译时找不到 Lombok 的注解类annotationProcessororg.projectlombok:lombok:1.18.32api编译 运行时都有且会泄露给子模块子模块也能用apicom.alibaba:fastjson:1.2.83implementation编译 运行时都有但不泄露给子模块implementationcom.alibaba:fastjson:1.2.832、补充学习compileOnlyorg.projectlombok:lombok:1.18.32annotationProcessororg.projectlombok:lombok:1.18.32在 Gradle 多模块项目中子模块中声明的 compileOnly 和 annotationProcessor 依赖不会传递给父模块compileOnly 和 annotationProcessor 的依赖范围是模块私有的处理策略是在父模块中也声明 compileOnly 和 annotationProcessor 依赖二、Gradle 传递与去重有一个模块 A 模块 A 被模块 B 通过 api 依赖 模块 A 被模块 C 通过 api 依赖 现在模块 D 通过 implementation 依赖模块 B、模块 C 模块 B、模块 C 它们共同 api 依赖的模块 A 会怎么样冲突模块 D ├── implementation 依赖 B │ └── api 依赖 A └── implementation 依赖 C └── api 依赖 A模块 D 会只有一个模块 A 的副本不会重复三、查看 APK 中的 versionCode 与 versionName1、使用 aaptaapt 是 Android SDK 自带的工具位于build-tools/目录下aapt dump badging 【APK】2、使用 aapt2使用 aapt2aapt2 dump badging 【APK】3、使用 Android Studio使用 Android Studio 打开 APK直接拖入在 AndroidManifest.xml 文件中可以查看 versionCode 与 versionName四、aapt 与 aapt21、基本介绍aapt / aapt2 全程 Android Asset Packaging Tool是 Android SDK 自带的工具位于build-tools/目录下aapt / aapt2 都是用来把资源文件例如布局、图片等编译打包成 APK 的核心工具从 Android Studio 3.0 开始aapt2 就是默认开启的绝大多数开发者无需手动干预2、aaptaapt 是把所有资源一股脑倒进去一次性完成所有处理输出 APKaapt 每次都【全量编译】所有文件3、aapt2aapt2 最核心的变化是拆成了两个清晰的步骤编译与链接编译把每一个资源文件例如strings.xml、icon.png单独编译成一个中间格式文件.flat 链接把所有 .flat 文件合并起来最终打包成一个 APK当只修改了一个文件时它只需重新编译那一个文件再和其他未改动的 .flat 文件快速链接即可即【增量编译】五、Gradle 未及时同步问题在 Android 开发中如果修改了模块级build.gradle文件中的 versionCode 和 versionName但没有点击 Sync NowGradle 同步打包时可能会使用旧的 versionCode 和 versionName但是我实测下来发现打包时会使用新的 versionCode 和 versionName在修改了模块级build.gradle文件后立即执行 Sync Now 是一个好习惯六、aidl.exeaidl.exe是 Android SDK 自带的一个命令行工具它的作用是将编写的.aidl接口文件自动转换成 Java 代码aidl.exe位于【SDK 目录】/build-tools/【版本号】/aidl.exe在较新版本的 Android Gradle Plugin 中AIDL 编译默认是关闭的需要在模块级build.gradle文件中开启android{buildFeatures{aidltrue}}开启后触发构建流程自动调用aidl.exe