Android 中 AAR、JAR、DEX、APK 之间的区别

Difference between AAR, JAR, DEX, APK in Android

在Android系统或开发环境中,AAR、JAR、DEX、APK文件有什么区别?每个的目的是什么?

AFAIK,JAR 就像是 .class 文件的集合(如 Java)。

AAR 是 JAR 文件 + 资源。但是它的用例是什么?用于分发 Android?

的开发库

APK 似乎类似于 .deb 或 .rpm 等软件包。这是在 Android 上安装应用程序的唯一方法吗?

DEX 文件呢?已编译的应用程序...但是与 JAR 或 AAR 文件有什么区别?

此外,在为 Android 分发 .so(即本机代码)文件时,最好的方法是什么?

JAR are just like a collection of .class files (like in Java).

那是因为它一个Java JAR。

AAR are JAR files + resources

正确。

But what's its usage case? To be used to distribute development libraries for Android?

正确。

APK seems to be similar to packages like .deb or .rpm. Is it the only way to install applications on Android?

一般来说,是的。

What about DEX files?

DEX 文件包含代表应用程序代码的交叉编译的 Dalvik 字节码。开发人员 编写 Java,但 Android 运行 Dalvik 字节码。在 APK 中,您会找到一个代表这些字节码的 DEX 文件。

Moreveor, when distributing .so (i.e. native code) files for Android, what's the best way to do it?

我不知道你所说的"distributing"是什么意思。

如果您的意思是 "distributing an app",您的 .so 个文件将在 APK 中。

如果您的意思是 "distributing as a library for other developers",请使用 AAR 或源代码形式的 Android 项目。

JAR(Java 存档)

JAR 是一种包文件格式,用于在其平台上分发 Java 应用程序。它包含已编译的 Java class 文件 + 一些更多文件,如 MANIFEST。基本上它只是一个有一些限制的 ZIP 存档。

DEX(Dalvik 可执行文件)

DEX是二进制文件格式,所以编译。我们可以说,.dex 文件用于 DVM(Dalvik 虚拟机),类似于 .class 文件用于 JVM.

DEX 文件格式实际上是由 Android SDK 的 dex 编译器从 java CLASS 文件生成的。此编译器将 JVM 字节码转换为 DVM 字节码,并将所有 class 个文件放入一个 dex 文件。

APK(Android 应用程序包)

APK 是为在其平台上分发 Android 应用程序而设计的文件格式。它与 JAR 格式有一些相似之处。同样,它只是一个 ZIP 存档,但 APK 文件具有预定义的特定结构。例如,它始终必须包含名为 AndroidManifest.xml 的文件等等。此软件包还以 dex 格式聚合了已编译的 classes。

AAR

AAR 是 Android 图书馆项目的二进制发行版。它的结构与 APK 相似。