情况 :
我打算使用Java库,我只有Maven存储库中的 AAR 文件,但我需要 JAR 文件。
背景故事:
我试图编译一个库,但它的Gradle结构不稳定。所以我要求一个编译的jar文件,它的开发人员从一些Maven存储库递给我一个aar文件(开发人员无法编译自己的项目)。 Gradle配置很乱,它依赖于多个库,而Gradle抛出了一些例外。
我试图在我的IDEA IDE中使用它,但它看不到它。库项目应该能够编译成jar文件,对吗?
问题 :
如何将该AAR文件转换为JAR文件?
答案 0 :(得分:125)
AAR 文件包含 JAR 文件和一些资源文件(基本上是标准的zip文件具有自定义文件扩展名的文件)。以下是转换的步骤:
答案 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的上下文,如果您有其他用途,您的里程可能会有所不同):
答案 3 :(得分:7)
对于那些想要自动执行此操作的人,我编写了一个两行bash脚本来完成接下来的两件事:
将提取的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`' \;
就是这样!
答案 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文件。
答案 5 :(得分:4)
Android Studio(版本:1.3.2)允许您无缝访问.aar中的.jar。
奖励:它会自动反编译类!
只需按照以下步骤操作:
答案 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
}