状況:
Javaライブラリを使用する予定で、MavenリポジトリからのAARファイルしかありませんが、JARファイル。
背景ストーリー:
ライブラリをコンパイルしようとしましたが、Gradle構造が不安定でした。そこで、コンパイル済みのjarファイルを要求し、その開発者はMavenリポジトリからaarファイルを渡してくれました(開発者は自分のプロジェクトをコンパイルできませんでした)。 Gradleの設定は混乱しており、複数のライブラリに依存しており、Gradleはいくつかの例外をスローしています。
IDEA IDEで使用しようとしましたが、表示できませんでした。ライブラリプロジェクトは、jarファイルにコンパイルできる必要がありますか?
Question:
そのAARファイルをJARファイルに変換するにはどうすればよいですか?
AARファイルはJARファイルといくつかのリソースファイル(基本的に、カスタムファイル拡張子を持つ標準のZipファイルです)。変換する手順は次のとおりです。
.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のコンテキスト、他の目的がある場合、走行距離は異なる場合があります)。
自動的に実行したい人のために、次の2つのことを行う2行の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`' \;
それでおしまい!
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ファイルを右クリックして、.Zipとして保存するのではなく、直接.jarファイルとして保存できると仮定します。抽出した.jarファイルを表示するには、 JD-GUI(Java Decompiler) をダウンロードします。次に、.jarファイルをこのJD_GUIにドラッグアンドドロップすると、.classファイルが.Javaファイルのような読み取り可能な形式で表示されます。
リソースベースの.aar-projects
.aarファイル内でclasses.jarファイルを見つけるのは簡単です。ただし、.aar-projectがいくつかのリソースを定義している場合(例:R.layout.xyz)、このアプローチは機能しません
したがって、CommonsGuyの deaar は、.aarファイルから有効なADTフレンドリープロジェクトを取得するのに役立ちました。 私の場合、私は subsampling-scale-image-view に変換しました。 PCにRubyをセットアップするのに約1時間かかりました。
別のアプローチは、Eclipse/ADTにAndroid-maven-pluginを使用することです CommonsGuyが彼のブログに書いているように 。
さらに別のアプローチとして、目的のプロジェクト全体をgitからソースとして複製し、「既存のAndroidプロジェクト」としてインポートすることもできます。
ビルドにGradleを使用している場合-Java | kotlin | scala | ...モジュールにaar依存関係を追加できるGradleプラグインがあります。
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
}