繁体   English   中英

如何将AAR转换为JAR

[英]How to convert AAR to JAR

情况

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

背景故事:

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

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

问题

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

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

  1. 使用标准zip提取提取AAR文件(将其重命名为* .zip以使其更容易)
  2. 在解压缩的文件中找到classes.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并没有完全削减它,因为资源可能会丢失。

以下是适用于我的步骤(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添加到依赖项列表中。

对于那些想要自动执行此操作的人,我已经编写了一个小的两行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中,您可以以.java文件等可读格式查看.class文件。

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

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

额外奖励:它会自动反编译!

只需按以下步骤操作:

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

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

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

从.aar访问.jar

基于资源的.aar项目

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

  • 因此deaar从CommonsGuy帮助我得到一个有效的ADT友好型项目出.aar档。 在我的情况下,我转换了子采样 - 比例 - 图像 - 视图 我花了大约一个小时在我的电脑上设置红宝石。

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

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

如果您使用Gradle作为构建 - 有一个Gradle插件,它允许您向java | kotlin | scala | ...模块添加aar依赖项。

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
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM