如何将AAR转换为JAR

Nes*_*tor 88 java jar aar

情况:

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

背景故事:

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

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

问题:

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

Nes*_*tor 132

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

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

  • 有趣的是,这个答案被接受了,因为简单地重命名jar并将其复制到项目的libs目录将不起作用,因为jar中缺少资源文件. (52认同)
  • 我很难找到如何在mac上提取它,以防万一其他:只需将.aar更改为.zip并双击即可! (11认同)
  • 那么创建基于资源的jar的解决方案是什么? (5认同)
  • 此解决方案仅提取jar文件,但不包含其中的资源.有些事情会出错. (2认同)

AWT*_*AWT 20

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

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

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


rsp*_*984 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中,您可以从现有源文件 - 文件 - >新建 - >项目 - > Android项目..并指向提取的文件夹内容.
  8. 导入后右键单击新创建的项目,选择Properties - > Android,然后选中Is Library.
  9. 在您想要使用库的主项目中,还要转到属性 - > Android并将新添加的myProjectLib添加到依赖项列表中.


ddm*_*nko 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`' \;
    
    Run Code Online (Sandbox Code Playgroud)

而已!

  • 这对使用资源的AAR不起作用. (3认同)

Séb*_*ien 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


ana*_*ish 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.
Run Code Online (Sandbox Code Playgroud)

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

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

  • 实际上谈话的主题是错误的.我们无法将AAR转换为JAR,反之亦然.我们唯一能做的就是"从AAR中提取JAR".我已经在这里使用两行Bash代码自动编写了如何做到这一点:http://stackoverflow.com/a/29252592/746529 (2认同)

One*_*rld 5

基于资源的 .aar-projects

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

  • 因此deaar从CommonsGuy帮助我得到一个有效的ADT友好型项目出.aar档。就我而言,我转换了 subsampling-scale-image-view。我花了大约一个小时在我的 PC 上设置 ruby​​。

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

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