web-dev-qa-db-ja.com

Android Archive Library(aar)と標準jar

私はAndroidアプリの標準ビルドシステムとしてのGradleの新しい採用に関する記事を読んでいます。まあ、標準のJava開発から来て、私は通常、プロジェクトをビルドするためにjarファイルに依存しています。ただし、Androidにはaarパッケージもあるようです。これはdllと同等です前述のように、Windows OSのファイル here

まず、Androidプラットフォームではアプリケーションレベルの「共有ライブラリ」が許可されていないことを認識する必要があります。 「従来の」プログラミング言語プラットフォームであるC、C++、Javaには、ランタイムライブラリを共有するこのメカニズムがあります。 (たとえば、WindowsではDLL、UnixではDSO、JVMではJarなど)。ただし、Androidの場合、Googleまたは携帯端末メーカーでない限り、これを行うことはできません(下記の脚注1を参照)。アプリケーション開発者として、これは根本的な制限になる可能性があります。ビルド時と実行時の両方でコードを「共有」または「再利用」することは、ソフトウェアエンジニアリングの実践において非常に重要な部分です。これは、前述の制限のため、Androidでかなり困難です(不可能ではなく、より困難です)。

ただし、この概念については疑問があります。つまり、開発者はいつアプリケーションにaar依存関係を含めることに興味を持っているべきでしょうか?この依存関係は、SDKの最小バージョンに強化されていますか?

たとえば、あるプロジェクトでは、COMポートにアクセスします。このポートでは、 NDKプリコンパイル済み。soライブラリを使用しています。このユーティリティを共有する場合、aarを作成する必要がありますか?

122
Xtreme Biker

AARファイルは、次の理由でJarsよりもDllsに似ています。

Dllsは、AARsおよびjarがアプリにパッケージ化されているアプリケーション間で共有できます。

AARs vs Jars:

JarAARの主な違いは、AARsにlayouts, drawablesなどのリソースが含まれていることです。これにより、内蔵コンポーネントを簡単に作成できます。たとえば、同じログイン画面を使用する複数のアプリがあり、Jarsを使用すると、クラスを共有できますが、レイアウト、スタイルなどは共有できませんが、それらを複製する必要がありました。 AARsを使用すると、すべてが1つのきれいなパッケージにバンドルされます。

結論として、AARsは正しい方向への大きな一歩です。

注:
同様の試みがapk-libsで行われましたが、AARsの方がはるかに優れているため、現在は廃止されています。

202
unify

JarとAARの主な違いは、AARにはレイアウト、ドロウアブルなどのリソースが含まれていることです。」はJARファイルに対応していません仕様のため、真実ではありません。 JARファイル仕様 に従って:

JARファイルは、一般的なZipファイル形式に基づくファイル形式であり、多くのファイルを1つに集約するために使用されます。 JARファイルは基本的に、オプションのMETA-INFディレクトリを含むZipファイルです。

ご覧のとおり、JARファイルにレイアウト、ドロウアブルなどのリソースを含めることを禁止するコンテンツの制限はありません。詳細については、TheJava®Virtual Machine Specificationの記事5.3「作成と読み込み」を参照してください。

したがって、質問Android Archive Library(aar)vs standard jarについて。答えは、使用しているビルドツールによって異なります。

Android St​​udioをビルドツールとして(それぞれプロジェクトオーガナイザーとして)使用している場合は、*。aarファイルを使用して、カプセル化されたリソースをAndroidプロジェクト間で共有することをお勧めします。 AARファイル形式はAndroid St​​udioビルドの一部であり、他のコメントでコメントされているように、ユーザーインターフェイスはAndroidライブラリのaar形式をサポートしています。

ただし、Android St​​udioを除き、他の世界ではそのファイル(アーティファクト)が何であるかがわかりません。たとえば、AndroidビルドがMavenに基づいている場合、リソース共有の優先ファイルはjarになります。これは、ネイティブのMaven Javaプロジェクトアーティファクトであり、何を入れるか制限がないためです。標準のjarファイル。さらに、Mavenの任意のファイル形式を説明する方法があり、新しいコンポーネントでライフサイクル拡張を使用してaarを含めます。簡単な例がここにあります Mavenの新しいパッケージタイプを作成するにはどうすればよいですか?

10
ggghhhjjj

質問の引用は、現在の現実と共通するものは何もありません。もちろん、Androidで外部ライブラリを使用することは可能で、多くのライブラリが利用可能です。おそらく、各アプリケーションは必要なすべてのライブラリをバンドルする必要があると言いたかったのですが、ビルド時にライブラリを再利用する(静的リンク)ことは実際には問題ではありません。

.aar.jarと異なる.jar.Zipと異なるそこにはどの種類のコンテンツが期待されるべきかという特定の概念がありますが、.jar.aarの両方には、ほとんどの場合、コンパイルされたクラスとそれらのリソースが含まれます。 .aarは、ライブラリがAndroid固有であり、そのようなライブラリに適した予想される構造を持っていることを指定するだけです(まあ、.jarも予想される構造を持っています)。

.aarはAndroid studioでのみサポートされているというビューも廃止されました。このようなライブラリはMaven Centralにデプロイでき、gradleなどのツールは@aarサフィックスを使用してそれらを参照できます。たとえば:

dependencies {
    compile ('io.github.andviane:uncover:2.0.1@aar')
    ..
}  

参照するには this Maven中央デプロイメント。

4
h22