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

相关推荐
不爱说话郭德纲11 小时前
告别漫长的HbuilderX云打包排队!uni-app x 安卓本地打包保姆级教程(附白屏、包体积过大排坑指南)
android·前端·uni-app
程序员清风14 小时前
程序员兼职必看:靠谱软件外包平台挑选指南与避坑清单!
java·后端·面试
皮皮林55115 小时前
利用闲置 Mac 从零部署 OpenClaw 教程 !
java
Sinclair15 小时前
简单几步,安卓手机秒变服务器,安装 CMS 程序
android·服务器
雮尘19 小时前
手把手带你玩转Android gRPC:一篇搞定原理、配置与客户端开发
android·前端·grpc
ktl20 小时前
Android 编译加速/优化 80%:一个文件搞定,零侵入零配置
android
华仔啊20 小时前
挖到了 1 个 Java 小特性:var,用完就回不去了
java·后端
SimonKing21 小时前
SpringBoot整合秘笈:让Mybatis用上Calcite,实现统一SQL查询
java·后端·程序员
alexhilton1 天前
使用FunctionGemma进行设备端函数调用
android·kotlin·android jetpack
冬奇Lab1 天前
InputManagerService:输入事件分发与ANR机制
android·源码阅读