私は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を作成する必要がありますか?
AAR
ファイルは、次の理由でJar
sよりもDll
sに似ています。
Dll
sは、AAR
sおよびjarがアプリにパッケージ化されているアプリケーション間で共有できます。
AAR
s vs Jar
s:
Jar
とAAR
の主な違いは、AAR
sにlayouts, drawables
などのリソースが含まれていることです。これにより、内蔵コンポーネントを簡単に作成できます。たとえば、同じログイン画面を使用する複数のアプリがあり、Jar
sを使用すると、クラスを共有できますが、レイアウト、スタイルなどは共有できませんが、それらを複製する必要がありました。AAR
sを使用すると、すべてが1つのきれいなパッケージにバンドルされます。
結論として、AAR
sは正しい方向への大きな一歩です。
注:
同様の試みがapk-lib
sで行われましたが、AAR
sの方がはるかに優れているため、現在は廃止されています。
「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 Studioをビルドツールとして(それぞれプロジェクトオーガナイザーとして)使用している場合は、*。aarファイルを使用して、カプセル化されたリソースをAndroidプロジェクト間で共有することをお勧めします。 AARファイル形式はAndroid Studioビルドの一部であり、他のコメントでコメントされているように、ユーザーインターフェイスはAndroidライブラリのaar形式をサポートしています。
ただし、Android Studioを除き、他の世界ではそのファイル(アーティファクト)が何であるかがわかりません。たとえば、AndroidビルドがMavenに基づいている場合、リソース共有の優先ファイルはjarになります。これは、ネイティブのMaven Javaプロジェクトアーティファクトであり、何を入れるか制限がないためです。標準のjarファイル。さらに、Mavenの任意のファイル形式を説明する方法があり、新しいコンポーネントでライフサイクル拡張を使用してaarを含めます。簡単な例がここにあります Mavenの新しいパッケージタイプを作成するにはどうすればよいですか?
質問の引用は、現在の現実と共通するものは何もありません。もちろん、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中央デプロイメント。