如何将AAR转换为JAR

时间:2014-01-28 21:36:43

标签: java jar aar

情况

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

背景故事:

我试图编译一个库,但它的Gradle结构不稳定。所以我要求一个编译的jar文件,它的开发人员从一些Maven存储库递给我一个aar文件(开发人员无法编译自己的项目)。 Gradle配置很乱,它依赖于多个库,而Gradle抛出了一些例外。

我试图在我的IDEA IDE中使用它,但它看不到它。库项目应该能够编译成jar文件,对吗?

问题

如何将该AAR文件转换为JAR文件?

8 个答案:

答案 0 :(得分:125)

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

  1. 使用标准zip解压缩提取AAR文件(将其重命名为 * .zip 以使其更容易)
  2. 在解压缩的文件中找到 classes.jar 文件
  3. 根据需要重命名并在项目中使用该jar文件

答案 1 :(得分:19)

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

如果需要,可以将其解压缩到文件系统,然后将其重新打包为jar。

1) Rename it to .jar
2) Extract: jar xf filename.jar
3) Repackage: jar cf output.jar input-file(s)

答案 2 :(得分:14)

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

以下是适用于我的步骤(Android的上下文,如果您有其他用途,您的里程可能会有所不同):

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

答案 3 :(得分:7)

对于那些想要自动执行此操作的人,我编写了一个两行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`' \;
    
  3. 就是这样!

答案 4 :(得分: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文件,请使用   以上方式。       假设您希望包含manifest.xml和资源以及.jar文件的含义       你可以直接右击你的.aar文件并将其直接保存为.jar文件而不是       将其保存为.zip。要查看已解压缩的.jar文件,请下载JD-GUI(Java Decompiler)。然后将.jar文件拖放到此JD_GUI中,您可以以.java文件等可读格式查看.class文件。

enter image description here enter image description here

答案 5 :(得分:4)

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

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

只需按照以下步骤操作:

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

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

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

  4. access .jar from .aar

答案 6 :(得分:4)

基于资源的.aar-projects

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

  • 因此来自CommonsGuy的deaar帮助我获得了有效的证明 一个.ad文件中的ADT友好项目。 就我而言,我改变了 subsampling-scale-image-view。我花了大约一个小时在我的电脑上设置红宝石。

  • 另一种方法是在Eclipse / ADT as CommonsGuy writes in his blog中使用android-maven-plugin。

  • 还有另一种方法,就是克隆整个所需的项目 作为git的源代码并将其导入为“现有Android项目”

答案 7 :(得分:0)

如果您在构建中使用Gradle-有一个Gradle插件,可用于向Java | kotlin | scala | ...模块添加aar依赖项。

https://github.com/stepango/aar2jar

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

dependencies {
    compileOnlyAar "com.android.support:support-annotations:28.0.0" // <- Use any AAR dependencies
}