Ich habe einige Artikel über die neue Einführung von Gradle als Standard-Build-System für Android-Apps gelesen. Nun, da ich aus der Standard-Java-Entwicklung stamme, bin ich normalerweise auf JAR- Dateien angewiesen , um mein Projekt zu erstellen. Es scheint jedoch, dass Android auch aar- Pakete hat, die den DLL- Dateien in einem Windows-Betriebssystem entsprechen, wie hier erwähnt :
Zunächst müssen Sie feststellen, dass die Android-Plattform keine „gemeinsam genutzten Bibliotheken“ auf Anwendungsebene zulässt. In den "traditionellen" Programmiersprachenplattformen C, C ++, Java, wie Sie es nennen, haben wir diesen Mechanismus zum Teilen von Laufzeitbibliotheken. (ZB DLL unter Windows, DSO unter Unix, Jar unter JVM usw.). Unter Android ist dies jedoch nur möglich, wenn Sie Google oder ein Hersteller von Mobiltelefonen sind (siehe Fußnote 1 unten). Als Anwendungsentwickler kann dies eine grundlegende Einschränkung sein. Das „Teilen“ oder „Wiederverwenden“ von Codes sowohl zur Erstellungszeit als auch zur Laufzeit ist ein sehr wichtiger Bestandteil der Softwareentwicklungspraxis. Dies ist unter Android aufgrund der oben genannten Einschränkung ziemlich schwierig (nicht unmöglich, nur schwieriger).
Ich habe jedoch einige Zweifel an diesem Konzept. Ich meine, wann sollte ein Entwickler daran interessiert sein, aar- Abhängigkeiten in seine Anwendung aufzunehmen? Werden diese Abhängigkeiten auf eine SDK-Mindestversion verschärft?
Zum Beispiel greife ich in einem Projekt auf einen COM-Port zu, für den ich NDK-vorkompilierte .so- Bibliotheken verwende. Muss ich ein aar erstellen, wenn ich dieses Dienstprogramm freigeben möchte?
Die Aussage " Der Hauptunterschied zwischen einem Jar und einem AAR besteht darin, dass AARs Ressourcen wie Layouts, Drawables usw. enthalten " entspricht nicht der JAR-Dateispezifikation und ist daher keine Wahrheit. Gemäß der JAR-Dateispezifikation :
Wie Sie sehen, gibt es keine Inhaltsbeschränkung, die das Einfügen von Ressourcen wie Layouts, Drawables usw. in eine JAR-Datei verbietet. Weitere Informationen finden Sie in Artikel 5.3 "Erstellen und Laden" der Java® Virtual Machine-Spezifikation.
Also auf die Frage Android Archive Library (aar) vs Standard jar. Die Antwort hängt davon ab, welches Build-Tool Sie verwenden.
Wenn Sie Android Studio als Build-Tool (bzw. als Projektorganisator) verwenden, sollten Sie auf jeden Fall * .aar-Dateien verwenden, um gekapselte Ressourcen zwischen Android-Projekten zu teilen. Das AAR-Dateiformat ist Teil des Android Studio-Builds. Wie in den anderen Kommentaren hier kommentiert, unterstützt die Benutzeroberfläche das AAR-Format für Android-Bibliotheken.
Aber außer Android Studio weiß der Rest der Welt nicht, was das für eine Datei (Artefakt) ist. Wenn Ihr Android-Build beispielsweise auf Maven basiert, ist die bevorzugte Datei für die gemeinsame Nutzung von Ressourcen jar, da dies das native Maven-Java-Projektartefakt ist und es keine Einschränkung gibt, was in die Standard-JAR-Datei eingefügt werden soll. Darüber hinaus gibt es eine Möglichkeit, Maven jedes Dateiformat zu erklären, einschließlich aar, indem die Lebenszyklusverbesserung mit einer neuen Komponente verwendet wird. Ein einfaches Beispiel finden Sie hier. Wie erstelle ich einen neuen Verpackungstyp für Maven?
quelle
Das Zitat in der Frage hat nichts mit der gegenwärtigen Realität gemeinsam. Natürlich ist es möglich, externe Bibliotheken in Android zu verwenden, und es sind viele Bibliotheken verfügbar. Vielleicht wollten sie sagen, dass jede Anwendung alle benötigten Bibliotheken bündeln muss, aber die Wiederverwendung der Bibliothek zum Zeitpunkt der Erstellung (statische Verknüpfung) ist wirklich kein Problem.
.aar
unterscheidet sich von.jar
nicht mehr als.jar
unterscheidet sich von.zip
. Es gibt bestimmte Konzepte, welche Art von Inhalten dort zu erwarten sind, aber beide.jar
und.aar
meistens enthalten kompilierte Klassen und deren Ressourcen..aar
Gibt lediglich an, dass die Bibliothek Android-spezifisch ist und eine erwartete Struktur aufweist, die für solche Bibliotheken angemessen ist (nun, hat.jar
auch eine erwartete Struktur).Die Ansicht, dass .aar nur von Android Studio unterstützt wird, ist ebenfalls veraltet. Solche Bibliotheken können in Maven Central bereitgestellt werden, und Tools wie gradle können sie mit dem Suffix @aar referenzieren, zum Beispiel:
um auf diese zentrale Bereitstellung von Maven zu verweisen .
quelle