web-dev-qa-db-ja.com

AARをJARに変換する方法

状況

Javaライブラリを使用する予定で、MavenリポジトリからのAARファイルしかありませんが、JARファイル。

背景ストーリー:

ライブラリをコンパイルしようとしましたが、Gradle構造が不安定でした。そこで、コンパイル済みのjarファイルを要求し、その開発者はMavenリポジトリからaarファイルを渡してくれました(開発者は自分のプロジェクトをコンパイルできませんでした)。 Gradleの設定は混乱しており、複数のライブラリに依存しており、Gradleはいくつかの例外をスローしています。

IDEA IDEで使用しようとしましたが、表示できませんでした。ライブラリプロジェクトは、jarファイルにコンパイルできる必要がありますか?

Question

そのAARファイルをJARファイルに変換するにはどうすればよいですか?

86
Nestor

AARファイルはJARファイルといくつかのリソースファイル(基本的に、カスタムファイル拡張子を持つ標準のZipファイルです)。変換する手順は次のとおりです。

  1. 標準のZip抽出を使用してAARファイルを抽出します(名前を*。Zipに変更して簡単にします)
  2. 抽出されたファイルでclasses.jarファイルを見つけます
  3. 好きな名前に変更し、プロジェクトでそのjarファイルを使用します
126
Nestor

.aarは標準のZipアーカイブで、.jarで使用されるものと同じです。拡張機能を変更するだけで、破損していないか何かを想定していれば問題ありません。

必要に応じて、ファイルシステムに抽出してから、jarとして再パッケージ化できます。

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

他の多くの人が指摘しているように、.aarファイルから.jarを抽出するだけでは、リソースが不足している可能性があるため、それを完全に削減することはできません。

私のために働いた手順は次のとおりです(Androidのコンテキスト、他の目的がある場合、走行距離は異なる場合があります)。

  1. .aarファイルの名前を.Zipに変更して抽出します。
  2. 抽出されたフォルダーは、ADTプロジェクトであり、Eclipseにいくつかの小さな変更を加えてインポートできます(以下を参照)。
  3. 抽出されたフォルダーで、含まれているファイルの名前をclasses.jarに変更し(この例ではmyProjectLib.jar)、抽出されたフォルダー内のlibフォルダーに移動します。
  4. ここで、Eclipseがそれを受け入れるには、抽出されたフォルダールートに2つのファイルを配置する必要があります。
    • 。プロジェクト
    • .classpath
  5. そのためには、Eclipseで新しいAndroidダミープロジェクトを作成してファイルをコピーするか、既存のAndroidプロジェクトからコピーします。
  6. .projectファイルを開き、XML名タグを探して、その内容をmyProjectLib(または上記のjarファイルと呼ばれるもの)に置き換えて保存します。
  7. これでEclipseで[ファイル]-> [新規]-> [プロジェクト]-> Android既存のソースからのプロジェクト..]を選択し、抽出されたフォルダーコンテンツをポイントできます。
  8. インポート後、新しく作成したプロジェクトを右クリックして、プロパティ-> Androidを選択し、Is Libraryをチェックします。
  9. ライブラリを使用するメインプロジェクトで、プロパティ-> Androidに移動し、新しく追加されたmyProjectLibを依存関係のリストに追加します。
14
rsp1984

自動的に実行したい人のために、次の2つのことを行う2行の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`' \;
    

それでおしまい!

7
ddmytrenko

Android Studio(バージョン:1.3.2)では、.aar内の.jarにシームレスにアクセスできます。

ボーナス:クラスを自動的に逆コンパイルします!

次の手順に従ってください。

  1. File > New > New Module > Import .JAR/.AAR Packageは、.aarをモジュールとしてインポートします

  2. 新しく作成したモジュールを依存関係としてメインプロジェクトに追加します(必要かどうか不明)

  3. 以下のキャプチャに示すように「classes.jar」を右クリックし、「エクスプローラーで表示」をクリックします。これが.jarです。

access .jar from .aar

5
Sébastien
 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ファイルのような読み取り可能な形式で表示されます。

enter image description hereenter image description here

5
anand krish

リソースベースの.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プロジェクト」としてインポートすることもできます。

4
OneWorld

ビルドに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
}
0
Stepango