96

情况

我打算使用 Java 库,我只有一个来自 Maven 存储库的AAR文件,但我需要JAR文件。

背景故事:

我试图编译一个库,但它的 Gradle 结构不稳定。所以我要求一个已编译的 jar 文件,它的开发人员从某个 Maven 存储库中递给我一个 aar 文件(开发人员无法编译他自己的项目)。Gradle 配置一团糟,它依赖于多个库,并且 Gradle 抛出了一些异常。

我尝试在我的 IDEA IDE 中使用它,但它看不到它。一个库项目应该可以编译成jar文件吧?

问题

我应该怎么做才能将该 AAR 文件转换为 JAR 文件?

4

8 回答 8

151

AAR文件由一个JAR文件和一些资源文件组成(它基本上是一个具有自定义文件扩展名的标准 zip 文件)。以下是转换的步骤:

  1. 使用标准 zip 解压缩 AAR 文件(将其重命名为*.zip以使其更容易)
  2. 在提取的文件中找到classes.jar文件
  3. 根据需要重命名并在项目中使用该 jar 文件
于 2014-01-31T16:35:56.767 回答
21

.aar 是一个标准的 zip 存档,与 .jar 中使用的相同。只需更改扩展名,假设它没有损坏或其他任何东西,它应该没问题。

如果需要,可以将其提取到文件系统中,然后将其重新打包为 jar。

1) Rename it to .jar
2) Extract: jar xf filename.jar
3) Repackage: jar cf output.jar input-file(s)
于 2014-01-28T21:46:33.770 回答
15

正如许多其他人指出的那样,仅从 .aar 文件中提取 .jar 并不能完全削减它,因为可能会丢失资源。

以下是对我有用的步骤(Android 环境,如果您有其他目的,您的里程可能会有所不同):

  1. 将 .aar 文件重命名为 .zip 并解压缩。
  2. 提取的文件夹是一个 ADT 项目,您可以在 Eclipse 中进行一些小的修改(见下文)将其导入!
  3. 在提取的文件夹中,将包含的文件classes.jar重命名为您喜欢的任何内容(在此示例中为 myProjectLib.jar),并将其移动到提取文件夹中的 lib 文件夹中。
  4. 现在为了让 Eclipse 接受它,您需要将两个文件放入提取的文件夹根目录中:
    • 。项目
    • .classpath
  5. 为此,请在 Eclipse 中创建一个新的 Android 虚拟项目并复制文件,或者从现有的 Android 项目中复制。
  6. 打开 .project 文件并查找 XML 名称标签并将其内容替换为 myProjectLib(或您在上面调用的任何 jar 文件)并保存。
  7. 现在在 Eclipse 中,您可以File -> New -> Project -> Android Project from existing source..并指向提取的文件夹内容。
  8. 导入后右键单击新创建的项目,选择Properties -> Android,然后选中Is Library
  9. 在要使用该库的主项目中,还可以转到Properties -> Android并将新添加的 myProjectLib 添加到依赖项列表中。
于 2016-06-10T11:35:55.980 回答
8

对于那些想要自动执行此操作的人,我编写了一个两行的 bash 脚本来完成接下来的两件事:

  1. 查找所有 *.aar 文件并从中提取 classes.jar
  2. 将提取的 classes.jar 重命名为类似于 aar 但具有新扩展名

    find . -name '*.aar' -exec sh -c 'unzip -d `dirname {}` {} classes.jar' \;
    find . -name '*.aar' -exec sh -c 'mv `dirname {}`/classes.jar `echo {} | sed s/aar/jar/g`' \;
    

而已!

于 2015-03-25T10:03:22.370 回答
6

Android Studio(版本:1.3.2)允许您无缝访问 .aar 中的 .jar。

奖励:它会自动反编译类!

只需按照以下步骤操作:

  1. File > New > New Module > Import .JAR/.AAR Package将您的 .aar 作为模块导入

  2. 将新创建的模块作为依赖项添加到您的主项目(不确定是否需要)

  3. 如下图所示,右键单击“classes.jar”,然后单击“在资源管理器中显示”。这是您的 .jar。

从 .aar 访问 .jar

于 2015-09-23T14:20:52.540 回答
5

基于资源的 .aar 项目

在 .aar 文件中查找 classes.jar 文件非常简单。但是,如果 .aar-project 定义了一些资源(例如:R.layout.xyz),则该方法不起作用

  • 因此,来自CommonsGuy的 deaar 帮助我从 .aar 文件中获得了一个有效的 ADT 友好项目。就我而言,我转换了 subsampling-scale-image-view。我花了大约一个小时在我的电脑上设置 ruby​​。

  • 另一种方法是使用 Eclipse/ADT 的 android-maven-plugin,正如 CommonsGuy 在他的博客中所写的那样

  • 另一种方法可能是,只需将整个所需项目克隆为来自 git 的源并将其导入为“现有 Android 项目”

于 2016-01-06T15:29:41.757 回答
5
 The 'aar' bundle is the binary distribution of an Android Library Project. .aar file 
 consists a JAR file and some resource files. You can convert it
 as .jar file using this steps

1) Copy the .aar file in a separate folder and Rename the .aar file to .zip file using 
 any winrar or zip Extractor software.

2) Now you will get a .zip file. Right click on the .zip file and select "Extract files". 
 Will get a folder which contains "classes.jar, resource, manifest, R.java,
 proguard(optional), libs(optional), assets(optional)".

3) Rename the classes.jar file as yourjarfilename.jar and use this in your project.

注意:如果您只想从 .aar 文件中获取 .jar 文件,请使用上述方式。假设如果您想在您的 .jar 文件中包含 manifest.xml 和资源,则意味着您只需右键单击您的 .aar 文件并将其直接保存为 .jar 文件,而不是将其保存为 .zip。要查看您提取的 .jar 文件,请下载JD-GUI(Java Decompiler)。然后将您的 .jar 文件拖放到这个 JD_GUI 中,您可以看到 .class 文件的可读格式,如 .java 文件。

在此处输入图像描述 在此处输入图像描述

于 2015-08-14T10:08:27.417 回答
1

如果您使用 Gradle 进行构建 - 有一个 Gradle 插件允许您将 aar 依赖项添加到您的 java|kotlin|scala|... 模块。

https://github.com/stepango/aar2jar

plugins {
    id 'java'
    id 'com.stepango.aar2jar' version “0.6” // <- this one
}

dependencies {
    compileOnlyAar "com.android.support:support-annotations:28.0.0" // <- Use any AAR dependencies
}
于 2019-05-29T12:13:45.463 回答