如何将AAR转换为JAR

情况:

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

背景故事:

我试图编译一个库,但是它的Gradle结构是不稳定的。 所以我问了它的编译过的jar文件,其开发者从一些Maven仓库中拿出了一个aar文件(开发者不能编译他自己的项目)。 Gradle系统是一团糟,它依赖于多个库,Gradle已经抛出了一些exception。

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

题:

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

AAR文件由一个JAR文件和一些资源文件组成。 这里是转换的步骤:

  1. 使用标准的压缩提取提取AAR文件
  2. 在提取的文件中findclasses.jar文件
  3. 将其重命名为您喜欢的,并在您的项目中使用所需的jar文件

.aar是一个标准的zip压缩文件,与.jar中使用的一样。 只要改变扩展名,假设它不是腐败或任何东西,它应该没问题。

如果你需要的话,你可以把它提取到你的文件系统,然后把它重新打包成一个jar包。

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

正如其他人指出的那样,仅仅从.aar文件中提取.jar文件并不能完全减less资源的丢失。

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

  1. 将.aar文件重命名为.zip并解压缩。
  2. 提取的文件夹是一个ADT项目,您可以在Eclipse中导入一些小的修改(见下文)!
  3. 在提取的文件夹中,将包含的文件classes.jar重命名为任何你喜欢的(在本例中为myProjectLib.jar),并将其移动到解压缩文件夹中的lib文件夹中。
  4. 现在为了让Eclipse能够接受它,你需要把两个文件放到提取的文件夹根目录下:
    • 。项目
    • 的.classpath
  5. 为此,在Eclipse中创build一个新的Android虚拟项目并复制这些文件,或从现有的Android项目中复制。
  6. 打开.project文件,查找XML名称标签,并用myProjectLib(或者上面所说的任何你的jar文件)replace它的内容并保存。
  7. 现在在Eclipse中,你可以从文件 – >新build – >项目 – > Android项目从现有的来源..指向提取的文件夹内容。
  8. 导入后右键单击新创build的项目,select属性 – > Android ,然后selectIs Library
  9. 在你想要使用库的主项目中,也可以进入属性 – > Android ,并将新添加的myProjectLib添加到依赖关系列表中。

对于那些想要自动完成的人来说,我写了一个两行的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`' \; 

而已!

  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中,你可以看到.class文件的可读格式,如.java文件。

在这里输入图像描述 在这里输入图像描述

基于资源的.aar项目

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

  • 因此,从CommonsGuy发布的代码帮助我从.aar文件中获得了一个有效的ADT友好项目。 在我的情况下,我转换subsampling-scale-image-view 。 我花了大约一个小时在我的电脑上设置了ruby。

  • 另一种方法是使用Android / Maven插件的Eclipse / ADT CommonsGuy在他的博客写道 。

  • 还有另外一种方法,就是把整个想要的项目作为git的源码进行克隆,并将其导入为“现有的Android项目”

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

奖励:它自动反编译类!

只需遵循以下步骤:

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

  2. 添加新创build的模块作为依赖到您的主项目(不知道是否需要)

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

从.aar访问.jar