AARをJARに変換する方法


92

状況

Javaライブラリーを使用するつもりで、MavenリポジトリーからのAARファイルしか持っていないが、JARファイルが必要です。

背景ストーリー:

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

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

質問

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


1
名前を変更して.jarに戻すこともできますが、環境に関する詳細がわからない場合、これが必要な場合とそうでない場合があります。AARは特定の用途を持つAxisライブラリーです。
Pedantic 2014年

1
あなたは笑うでしょうが、とても単純な言葉だったのでSOが私の質問を投稿させないので、私はいくつかの非正規の単語を追加する必要がありました。そして、おそらくそれは、ライブラリの開発者がGradleを使用して自分のプロジェクトをコンパイルできないことをすべて伝えています...
Nestor

回答:


141

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

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

53
jarの名前を変更してプロジェクトのlibsディレクトリにコピーするだけでは機能しないので、この回答は受け入れられます。リソースファイルがjarにないためです。
ChuongPham 2014年

Spotify Android SDKのチュートリアルに続いて、この答えは救済策でした。これは、私がNetbeansでプロジェクトを開発しているためです。これは、AAR拡張に準拠していないようです。ChuongPhamの発言は、この回答ではなくAWTの回答に関連しているようです。そのため、私はChuongPhamに部分的に同意します。つまり、AARからJARへの単純な名前変更が機能しません。ただし、 "resources"はclasses.jarファイルには関係がないため、私も一部同意しません。
カール

11
Macでそれを抽出する方法を見つけるのに苦労しました。他の場合もそうです。.aarを.zipに変更してダブルクリックしてください!
Bastien Beurier 2015年

5
では、リソースベースのjarを作成するためのソリューションは何ですか?
2cupsOfTech 2015

2
このソリューションは、jarファイルのみを抽出しますが、リソースには含まれていません。何かがおかしいでしょう。
Tinker Sun

21

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

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

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

jar xfを実行しても何も得られません:C:\ Program Files \ Java \ jdk1.7.0_25 \ bin> jar xf c:\ dev \ 1 \ android-maps-utils- 0.2.1.jar C:\ Program Files \ Java \ jdk1.7.0_25 \ bin>
Nestor

1
おい、ステップ1で十分です。名前を.jarに変更するだけです。私の見解では、ステップ(2)と(3)は役に立たない
Dr Deo

@DrDeo名前を変更しただけでは、Eclipseプロジェクトがライブラリとして認識していません。正常ですか?手がかりはありますか?
Tanasis 2017

1
名前を変更してjarで再パッケージ化しないと、マニフェストが作成されず、有効なjarファイルとして認識されません。
AWT 2017

16

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

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

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

これは私を助けました。完全に動作する場合でもために、私は、ステップ6と7の間に空の「SRC」フォルダを作成するために必要な取得するために
ベルンハルト・クレンツ

8

自動的にそれをしたい人のために、私は次の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`' \;

それでおしまい!


1
もちろん、aar2jarの変換にはリソースが含まれず、内部にマニフェストは含まれません。(間違いではないが、それに近い)と言えaar=jar+res+manifest+libsます。ましょうrest=res+manifest+libs、よりjar(aar)=aar-rest
ddmytrenko 2015

それが本当に欲しい!どうもありがとう。しかし、それは本当にディスク使用量を増やします。すべてのサポートライブラリには多くのバージョンがあるためです。最新バージョンのみを解凍する方が良い場合があります
iptton

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にアクセスする


1
最初に、プロジェクトマネージャでAndroidではなくプロジェクトを選択する必要があります。外部ライブラリが表示されます
Samad

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ファイルのみを取得する場合は、上記の方法を使用します。たとえば、.jarファイルにmanifest.xmlとリソースを含めたい場合は、.aarファイルを右クリックして、.zipとして保存するのではなく、直接.jarファイルとして保存できます。抽出した.jarファイルを表示するには、JD-GUI(Java Decompiler)をダウンロードします。次に、.jarファイルをこのJD_GUIにドラッグアンドドロップすると、.classファイルが.javaファイルのような読み取り可能な形式で表示されます。

ここに画像の説明を入力してください ここに画像の説明を入力してください


これは、AARファイルを.aarから.jarに名前変更するだけで、JARファイルのように使用できることを意味しますか?
Soumya

@Soumya、いや、あなたはできません。
ddmytrenko 2015

2
実際、会話のトピックは間違っています。AARをJARに、またはその逆に変換することはできません。私たちにできる唯一のことは、「AARからJARを抽出する」ことです。そして、私はここにBashコードの2行を使用してこれを自動的に行う方法を書きました:stackoverflow.com/a/29252592/746529
ddmytrenko

4

リソースベースの.aar-projects

.aarファイル内でclasses.jarファイルを見つけるのは簡単です。ただし、.aar-projectがいくつかのリソースを定義している場合、そのアプローチは機能しません(例:R.layout.xyz)

  • したがってdeaar CommonsGuyが.aarファイルのうち、有効なADTに優しいプロジェクトを得るために私を助けたから。私の場合、subsampling-scale-image-viewを変換しました 。私のPCにルビーをセットアップするのに約1時間かかりました。

  • 別のアプローチは、CommonsGuyが彼のブログに書いているように、 Eclipse / ADTにandroid-maven-pluginを使用することです。

  • さらに別のアプローチとしては、gitからソースとして目的のプロジェクト全体を複製し、それを「既存のAndroidプロジェクト」としてインポートするだけです。


1

ビルドにGradleを使用している場合-aar依存関係をjava | kotlin | scala | ...モジュールに追加できるGradleプラグインがあります。

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
}

理解しようとすると、android app / libプラグインの「compileOnlyAar」を作成することは可能ですか?私はそれがあなたのライブラリについてではないことを知っています、しかしおそらくあなたはそれが可能であることを知っているかもしれません、なぜならandroidプラグインは 'compileOnlyAar'のようなアーティファクト構成を含まないからです。私はここに、この機能(必要な理由をあなたは理解することができますstackoverflow.com/questions/60998072/...
HeyAlex
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.