Android SDK 开发中的 AAR 与 JAR 区别详解

在 Android SDK 开发中,构建项目时我们常常会看到生成两个不同的文件:一个是 build/outputs/aar/*.aar,另一个是 build/intermediates/aar_main_jar/debug/syncDebugLibJars/classes.jar。很多初学者会疑惑:它们之间有什么区别?为什么构建会生成两个包?本篇博客将从生成路径、结构内容和使用场景三个角度,系统解释 AAR 和 JAR 的差异。


一、生成路径解析

  • AAR 路径:

    • build/outputs/aar/*.aar
    • 这是最终用于发布的 Android 库包,是你写的 SDK 的对外依赖形式。
  • JAR 路径:

    • build/intermediates/aar_main_jar/debug/syncDebugLibJars/classes.jar
    • 这是 AAR 构建过程中的中间产物,只包含编译后的 .class 字节码文件,供内部依赖合并、同步等使用。

二、结构内容区别

内容 .aar classes.jar
Java 编译后的 .class 文件
AndroidManifest.xml
res/ 资源文件(布局、drawable 等)
assets 目录
原生库(.so 文件)
ProGuard 混淆配置文件
AIDL 文件、R 文件

classes.jar 可以看作是 AAR 包中的 Java 部分,它是构建 AAR 时被打包进去的一部分。


三、使用场景区别

✅ 使用 AAR 的情况:
  • 你的库中包含资源文件(如 layout、drawable、string)
  • 你声明了组件(Activity、Service、Provider)
  • 你打算作为 Android SDK 发布给其他开发者
✅ 使用 JAR 的情况:
  • 你开发的是一个纯 Java 工具类库
  • 没有任何资源或 Android 相关特性
  • 可以跨平台使用,例如在 Kotlin/Java 控制台项目中

四、示意图说明

复制代码
AAR 文件结构:

my-sdk.aar
├── AndroidManifest.xml
├── classes.jar      ← 编译后的 Java 类
├── res/             ← 资源文件
├── assets/          ← 资产文件
├── jni/             ← .so 库文件
├── R.txt            ← R 文件映射表
├── proguard.txt     ← 混淆配置文件

classes.jar 是其中的一部分,只包含 Java 类,缺失资源、Manifest 等信息,因此不能单独用于 Android 项目。


五、总结

项目 AAR JAR
是否可直接用于 Android ❌(除非是纯 Java)
是否包含资源文件
是否包含 manifest
是否是最终产物 ❌(是中间产物)

一句话总结: AAR 是完整的 Android 库包,包含 Java 字节码和资源;JAR 是纯 Java 字节码的封装,是构建过程中临时生成的部分内容。

相关推荐
叫我阿柒啊3 小时前
Java全栈开发面试实战:从基础到微服务架构
java·vue.js·spring boot·redis·git·full stack·interview
小凡敲代码3 小时前
2025年金九银十Java面试场景题大全:高频考点+深度解析+实战方案
java·程序员·java面试·后端开发·求职面试·java场景题·金九银十
拉法豆粉3 小时前
在压力测试中如何确定合适的并发用户数?
java·开发语言
爱上纯净的蓝天4 小时前
迁移面试题
java·网络·c++·pdf·c#
chenglin0164 小时前
Logstash_Input插件
java·开发语言
bemyrunningdog5 小时前
Spring文件上传核心技术解析
java
Fireworkitte5 小时前
Java 系统中实现高性能
java
ningqw5 小时前
JWT 的使用
java·后端·springboot
枯骨成佛5 小时前
MTK Android 14 通过属性控制系统设置显示双栏或者单栏
android
雨白6 小时前
Android 自定义 View:范围裁切和几何变换
android