2017-11-28 3 views
1

Ich habe zwei Projekte, die dieselbe Bibliothek verwenden. Diese Bibliothek verwendet eine jar Datei als Abhängigkeit, jedoch kann nur die Bibliothek die Klassen aus der Datei jar lesen. Die beiden Projekte haben keinen Zugriff auf die Klassen aus der Datei jar.Android Studio: Wie Klassen aus einer JAR-Datei aus einer Bibliothek lesen?

Ich habe versucht, die JAR-Datei den beiden Projekten separat hinzuzufügen, aber ich erhalte einen Buildfehler, wahrscheinlich, weil er jetzt in der Projektebene und der Bibliotheksebene enthalten ist, was zu Konflikten führt.

Die jar Datei ist YouTubeAndroidPlayerApi.jar

   /------------------- Project1 (can't read classes from jar) 
Library(w/ jar) 
       \------------------- Project2 (can't read classes from jar) 

Alle Ideen, wie zu nähern? Vielen Dank!

+0

"Die beiden Projekte haben keinen Zugriff auf die Klassen aus der JAR-Datei." - Warum nicht? Wenn es als Abhängigkeit enthalten ist, muss es. –

+0

Wie sehen Ihre Gradle-Dateien aus? Sind Sie auf Android Studio 3.0 mit dem neuesten Gradle? – parkgrrr

Antwort

0

Wenn Sie Gradle 4.1 verwenden, stellen Sie sicher, dass Sie das Schlüsselwort api beim Importieren der .jar-Datei in Ihre Bibliothek verwenden. Dann entferne es aus deinen anderen Projekten.

zum Beispiel: api fileTree(dir: 'libs', include: ['*.jar'])

from the documentation:

Wenn ein Modul eine api Abhängigkeit enthält, es lassen Gradle wissen, dass das Modul diese Abhängigkeit zu anderen Modulen zu transitively exportieren will, so dass es ihnen zur Verfügung steht zur Laufzeit und zur Kompilierzeit. Diese Konfiguration verhält sich genau wie das Kompilieren (das jetzt veraltet ist) und sollte normalerweise nur in Bibliotheksmodulen verwendet werden. Denn wenn eine API-Abhängigkeit ihre externe API ändert, kompiliert Gradle alle Module neu, die während der Kompilierung Zugriff auf diese Abhängigkeit haben. Eine große Anzahl von API-Abhängigkeiten kann die Build-Zeiten erheblich verlängern. Wenn Sie die API einer Abhängigkeit nicht einem separaten Testmodul zugänglich machen möchten, sollten die App-Module stattdessen Implementierungsabhängigkeiten verwenden.

+0

das hat den Trick gemacht! – mco

+0

Gerne helfen! Die Migration auf Gradle 4.1 ist nicht immer einfach. – parkgrrr

Verwandte Themen