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 字节码的封装,是构建过程中临时生成的部分内容。

相关推荐
嘻哈∠※1 小时前
0061基于 SpringBoot 的投稿与稿件处理系统设计与实现
java·spring boot·后端
白狐_7982 小时前
408数据结构第8章:排序②——性质对比秒杀、场景选择与外部排序
java·数据结构·算法
zander2582 小时前
LeetCode 84:柱状图中的最大矩形——单调栈如何确定左右边界
java·数据结构·算法
码匠许师傅3 小时前
【C++ 面试真题】聊聊 C++ 的拷贝构造与拷贝赋值
java·c++·面试
极创信息4 小时前
系统安全隐患全方位排查方案:标准化渗透测试全流程
java·opencv·struts·数据挖掘·eclipse·语音识别·hibernate
汉字萌萌哒5 小时前
2019CCF-CSP入门级C++试题解析
java·开发语言·c++
喜欢的名字被抢了5 小时前
程序出问题怎么查,以及如何让它不掉线
java·运维·数据库
wxson72825 小时前
【Android视频监控系统技术总结】
android·音视频
数据知道6 小时前
反序列化漏洞:Java、PHP、Python 三条线各讲透
java·网络·python·安全·网络安全·php