Ich habe ein Beispielprojekt mit folgendem Setup:
/root
+ Pure Java Lib
+ Android Test Lib
+ Android Test Project
Wo das ' Testprojekt ' von der ' Testbibliothek ' abhängt und das letzte von der ' Pure Java Lib ' abhängt Das Kompilieren des Projekts und das Starten dieses Setups funktioniert einwandfrei.
Ich denke jetzt darüber nach, meinen vorherigen Eclipse-Arbeitsbereich zu importieren und mit Android Studio zu arbeiten. Das Problem ist, dass das Projekt-Setup anders ist, und ich möchte es so lassen.
Zum Beispiel, wenn Sie das vorherige Beispiel verwenden möchten:
/root
+ Android Test Lib
+ Android Test Project
/Some Other folder (another repository for example)
+ Pure Java Lib
Ich habe viele Konfigurationen ausprobiert, aber keine Möglichkeit gefunden, auf ein Projekt außerhalb des Bereichs des übergeordneten Ordners zu verweisen ( im Beispielfall ' root ').
In vielen Plattformen / Modulen können Sie das '..' verwenden, um in den Ordnern nach oben zu gelangen, aber das hat bei mir nicht funktioniert, vielleicht habe ich es falsch verwendet.
Weiß jemand, wie dies mit Gradle erreicht werden kann?
AKTUALISIEREN
Ich werde versuchen, allgemeiner zu sein:
/C:/
/Project A
+ Module 1 - Pure Java
+ Module 2 - Android Test Lib
+ Module 3 - Android Test Project
/Project B
+ Module 1 - Pure Java
+ Module 2 - Pure Java
+ Module 3 - Pure Java
Ich mag Modul 1 von verwenden Projekt B , in Projekt A .
UPDATE: 09-03-19
Ich habe das jetzt gesehen und ich muss es aktualisieren ... nach fast 6 Jahren bin ich heute weiser und ich kann definitiv sagen, dass das Problem darin bestand, dass ich das Konzept der "Quelle der Wahrheit" falsch verstanden habe.
Während es ein schönes Konzept ist, einen Verweis auf eine Bibliothek zu haben, und vielleicht als "Quelle der Wahrheit" erscheint, wäre die ECHTE "Quelle der Wahrheit" die Version des Codes, den jedes Projekt von dieser Bibliothek verwendet Die Bibliothek selbst hat Versionen. Viele Versionen und die "Quelle der Wahrheit" beziehen sich auf das Projekt, das die Bibliothek verwendet.
Der richtige Weg wäre, das zu verwenden, was die meisten Entwickler nicht mögen, und das sind Git-Submodule, und ja, die Quellen in jedem Projekt zu duplizieren, verursacht die meisten Chancen, dass jedes Projekt eine andere Version des Codes verwendet.
Sie müssten jedoch darauf abzielen, dass alle Ihre Projekte die neueste und beste Version aller Ihrer Bibliotheken verwenden. Dies ist eine Herausforderung für sich
Der Grund, warum dies der richtige Weg ist, um ein Projekt mit Bibliotheksquellen zu entwickeln, ist, dass dies skaliert ... Sie können Hunderte von Projekten mit jeweils einer eigenen Bibliothekskonfiguration haben.
quelle
Antworten:
Angenommen, ein anderer Ordner ist ein Gradle-Projekt, können Sie Ihrer settings.gradle-Datei Folgendes hinzufügen:
quelle
Sie müssen in Ihre Datei settings.gradle diese Zeilen eingeben:
Dann müssen Sie in Ihrem builde.gradle (Modul: App) im Abhängigkeitsbaum diese Zeile hinzufügen :
oder gehen Sie in die Projektstruktur > App > Abhängigkeiten , klicken Sie auf Hinzufügen , wählen Sie 3 Modulabhängigkeiten und wählen Sie Ihr Modul aus
quelle
compile project(path: ':library', configuration: 'variant')
. Hiervariant
besteht ausflavor
undbuildType
wie durch diebuild.gradle
Datei der Bibliothek definiert . Zum Beispiel, wenn Sie wollenrelease
Buildtyp der Bibliothek in einemdevelop
Geschmack, dannvariant
istdevelopRelease
.Mit Gradle 1.10 (ich weiß nicht, für welche anderen Versionen dies gültig sein wird) habe ich mir dies aufgrund einer hier gegebenen Antwort ausgedacht: http://forums.gradle.org/gradle/topics/reference_external_project_as_dependancy
Ich habe ein API-Bibliotheksprojekt, ein gemeinsames Bibliotheksprojekt und das Haupt-App-Projekt. Jedes ist ein eigenständiges Entwicklungsprojekt und die beiden Bibliotheken sollen von mehreren Apps gemeinsam genutzt werden.
In settings.gradle für das allgemeine Projekt:
Dann in der Haupt-App Projekteinstellungen.gradle:
In jeder der jeweiligen build.gradle-Dateien verweisen Sie einfach auf den Namen, den Sie in den settings.createProjectDescriptor angegeben haben, wie bei jeder anderen Projektabhängigkeit:
Das scheint zu funktionieren. Es wurde nicht einmal ein Fehler für mehrere DEX-Dateien ausgegeben, die die API-Bibliothek definieren. Ich vermute, dass dies alles Teil desselben Erstellungsprozesses war und Gradle klug genug war, um alles herauszufinden.
quelle
Klicken Sie mit der rechten Maustaste auf das Projekt - Wählen Sie "Moduleinstellungen öffnen" - Wählen Sie im linken Bereich "Module" aus - Klicken Sie oben auf das Symbol "+" - Wählen Sie "Modul importieren".
Nach dem Importieren des Moduls. Sie müssen es als Abhängigkeit für Ihr aktuelles Projekt hinzufügen.
Lassen Sie "Module" im linken Bereich ausgewählt und klicken Sie auf Ihr Projekt. - Gehen Sie jetzt in die Registerkarte "Abhängigkeiten" und klicken Sie auf das Symbol "+" unten. - Wählen Sie die dritte Option "Modulabhängigkeiten". Wenn Sie Ihr Projekt korrekt importiert haben, wird es Zeigen Sie das gesamte verfügbare Modul an, das als Abhängigkeit zu Ihrem aktuellen Projekt hinzugefügt werden kann.
quelle
Ich stelle diese Frage auf eine Weise erneut, die die Absichten der Originalplakate unter Wie verweisen wir auf benutzerdefinierte Android- und Java-Bibliotheken, die sich außerhalb des Verzeichnisses unseres Haupt-Android-Projekts befinden?
Dort beantworte ich meine eigene Frage. Im Kern verwendet meine Antwort @ Ethans (den Autor der ausgewählten Antwort im aktuellen Thread) Gradle-Coding-Einblick. Meine Antwort navigiert aber auch durch einige andere Fallstricke und enthält ein detailliertes Schritt-für-Schritt-Beispiel.
quelle
Wie Ethan sagte, wird beim Hinzufügen zu Ihrem settings.gradle ein externes Projekt zu Android Studio hinzugefügt (in diesem Beispiel befindet es sich im übergeordneten Ordner):
Um es dann als Abhängigkeit von einem Ihrer Projekte hinzuzufügen, fügen Sie es einfach im build.gradle dieses Projekts als eine andere Abhängigkeit wie diese hinzu (Sie können es auch grafisch wie hier ausführen ):
quelle