Wenn Sie ein Projekt haben, das JAR-Dateien und AAR-Dateien als Abhängigkeiten enthält (siehe Hinweis unten), können Sie Android-spezifische JARs als Abhängigkeiten verwenden, die auf Klassen in den Android-APIs basieren, die JAR-Dateien jedoch nicht enthält Android-Ressourcen, wie Sie bereits wissen. Nur weil es von Android-Klassen abhängt, bedeutet das nicht, dass es als AAR verpackt werden muss.
Hier spreche ich über, was ist vielleicht ein Einzel-Modul-Projekt, das eine Reihe von JAR und AAR-Abhängigkeiten enthält. Eine JAR-Datei ist nur eine Sammlung von Klassendateien (und möglicherweise nicht von Android stammende Ressourcen und andere Dateien) und hat kein Gefühl für Abhängigkeiten, daher gibt es nichts zu brechen. Wenn es an der Zeit ist, den Build zu erstellen, bündelt der Builder lediglich alles zusammen und packt es und prüft nicht, ob die JAR nicht lösbare Abhängigkeiten von anderen Klassen aufweist - Sie werden mit Classloader-Ausnahmen zur Laufzeit herausfinden.
Wenn Sie sprechen Bibliothek Module in einem Multimodul-Projekt in der IDE, dann ist das eine andere Sache. Wenn Sie ein Modul A haben, das zu einem einfachen JAR kompilieren kann (es verwendet die apply plugin: 'java'
-Anweisung in der Build-Datei), dann kann es nicht von einem Android-Modul (apply plugin: 'android-library'
) abhängen, das zu einem AAR kompiliert wird. Dies wird wahrscheinlich nie oder zumindest in absehbarer Zeit nicht behoben sein. Es liegt daran, dass Android-Module eine viel komplexere Vorstellung von Quellordnern haben und das Java-Plugin in Gradle die Quellgruppen von Android nicht verstehen kann.
Das Gegenteil ist wahr, obwohl - Android-Module können auf einfache Java-Module abhängen.
HINWEIS
Aufgrund von Einschränkungen noch nicht im Gradle Builder gelöst, können Sie lokale AARs auf die gleiche Art und Weise Zugriff auf nicht Sie als JAR-Dateien Dateien in Ihrem Build tun (indem man sich über compile files(...)
Aussagen Referenzierung); Sie müssen Gradle vortäuschen, dass sie sich in einer Art Maven-Repository befinden (vielleicht indem Sie sie in ein tatsächliches Maven-Repository setzen, das lokal sein kann). Eine Abhilfe finden Sie unter Adding local .aar files to my gradle build, wenn Sie sie benötigen.
Wie kann ein JAR von irgendetwas "abhängen"? Es ist nur ein Container für Klassen. –
Hmm, ja, vielleicht hätte ich es ausdrücken sollen - "Kann ein Android Library-Projekt, das als JAR gepackt werden kann, von einem anderen Android Library-Projekt abhängen, das Ressourcen verwendet (und daher als AAR verpackt ist) und trotzdem als JAR gepackt wird?"Ich vermute, die Antwort ist nein, aber ich möchte nur bestätigen. – Matthew