如何将 .aar 文件转换为 .jar

How to convert an .aar file into a .jar

要在 IBM MobileFirst Platform 项目中使用 Eclipse IDE,我需要将 .aar 文件转换为 .jar。我试图提取 classes.jar 文件,但它实际上是空的,有 none class。我的意思是,在 Android SDK 中,extras/android/m2repository/com/android/support/support-v4 库只有 classes 直到 24.1 版本,从那里开始的所有版本都只有空 classes.jar 文件。那么,我可以用这些版本中的 classes 做什么呢?

试图澄清这个话题,这个问题帮助了我:

Android Archive Library (aar) vs standard jar

有人知道将此 Android 存档文件转换为 Java 存档文件的过程吗?

I need to convert an .aar file into a .jar

根据定义,AAR 不是 JAR,不一定 "converted" 到 JAR 中。

通常,如果工件作为 AAR 而不是 JAR 分发,那是因为作为工件一部分的不仅仅是 Java 代码。

I mean, at the Android SDK, the extras/android/m2repository/com/android/support/support-v4 libraries only have classes until 24.1 version

正确。从那时起,support-v4 只是一个传递依赖的容器。您将在工件旁边的 POM 文件中看到它们的列表。

例如,25.3.1 POM 文件显示了当您在 AAR 工件感知 IDE 中使用 support-v4 时将被拉入的所有工件(Android Studio、IntelliJ IDEA 等):

<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.android.support</groupId>
  <artifactId>support-v4</artifactId>
  <version>25.3.1</version>
  <packaging>aar</packaging>
  <dependencies>
    <dependency>
      <groupId>com.android.support</groupId>
      <artifactId>support-compat</artifactId>
      <version>25.3.1</version>
      <type>aar</type>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>com.android.support</groupId>
      <artifactId>support-media-compat</artifactId>
      <version>25.3.1</version>
      <type>aar</type>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>com.android.support</groupId>
      <artifactId>support-core-utils</artifactId>
      <version>25.3.1</version>
      <type>aar</type>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>com.android.support</groupId>
      <artifactId>support-core-ui</artifactId>
      <version>25.3.1</version>
      <type>aar</type>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>com.android.support</groupId>
      <artifactId>support-fragment</artifactId>
      <version>25.3.1</version>
      <type>aar</type>
      <scope>compile</scope>
    </dependency>
  </dependencies>
</project>

正如您从 <type> 元素中看到的那样,大多数传递依赖本身就是 AAR。

有时,AAR 除了 JAR 之外不包含其他内容。 例如,support-core-utils25.3.1 版本——support-v4 引入的 AAR 之一——除了我能看到的 classes.jar 之外没有什么重要的。

但是,其他 AAR 包含 JAR 之外的内容。例如,support-compatsupport-media-compat 有 AIDL 文件。其他 AAR——比如 appcompat-v7——有资源或资产。如果您尝试仅使用 AAR 中的 JAR,并尝试使用需要这些资源或 AIDL 文件或任何存在的 class,您的应用程序将会崩溃。

您可以尝试将 AAR 转换为旧式 Eclipse 库项目。俗话说,你的里程可能会有所不同。另外,我不知道 IBM MobileFirst 是否支持图书馆项目。