In Eclipse kann ich meinem Android-Projekt einen Quellordner als “verknüpften Quellordner” hinzufügen. Wie erreiche ich dasselbe in Android Studio?
Oder ist es möglich, einen externen Ordner hinzuzufügen, um ihn in Gradle zu erstellen?
Erik Z
In Eclipse kann ich meinem Android-Projekt einen Quellordner als “verknüpften Quellordner” hinzufügen. Wie erreiche ich dasselbe in Android Studio?
Oder ist es möglich, einen externen Ordner hinzuzufügen, um ihn in Gradle zu erstellen?
fabrizotus
In deiner build.gradle fügen Sie Folgendes am Ende des Android-Knotens hinzu:
android {
....
....
sourceSets {
main.java.srcDirs += 'src/main/<YOUR DIRECTORY>'
}
}
Wirklich hilfreich. Warum setzen sourceSets
im Rahmen von android
? Mein dependencies
ist raus.
– CopperCash
24. Juni 2014 um 7:12 Uhr
Diese Lösung befasst sich jedoch nur mit den Java-Dateien. Was ist mit all den Ressourcen, die sich auch unter ‘src’ befinden – die Drawables, Layouts, Strings usw. Wie kann man sie in einen externen Ordner legen?
– GyRo
9. Februar 2015 um 10:20 Uhr
Für AppEngine müssen sich sourceSets auf Stammebene befinden und dürfen nicht darin verschachtelt sein. Ziemlich seltsam, dass es ein Weg für Android-Module und ein anderer Weg für AppEngine-Module wäre.
– Tom
24. April 2015 um 21:48 Uhr
@Deckard Es sollte einen Android-Block in der build.gradle des Moduls “app” geben, nicht in der Root-Build-Datei.
– Benutzer905686
25. Juli 2016 um 12:04 Uhr
@GyRo Sie können dasselbe für Ressourcendateien tun: Fügen Sie in sourceSets die Zeile hinzu main.res.srcDirs += '<YOUR DIRECTORY>'
– FlorianT
20. August 2017 um 16:10 Uhr
lyfshadyboss
Die richtige Antwort lautet:
android {
....
....
sourceSets {
main.java.srcDirs += 'src/main/<YOUR DIRECTORY>'
}
}
Außerdem, wenn Ihr externes Quellverzeichnis nicht unter ist src/main
könnten Sie einen relativen Pfad wie diesen verwenden:
sourceSets {
main.java.srcDirs += 'src/main/../../../<YOUR DIRECTORY>'
}
In Bezug auf relative Pfade frage ich mich, ob es möglich ist, eine Art Gradle-Variablen zu verwenden, z. srcDirs += “$(ProjectDir)/mylib/src”? Ich bin neu bei Gradle und habe keine Ahnung, ob es so etwas unterstützt.
– Tom
24. April 2015 um 16:46 Uhr
Die kannst du weglassen src/main/../../
Präfix, da die Punkte die Pfadkomponenten aufheben.
– Brian Weiß
25. Mai 2015 um 20:43 Uhr
@BrianWhite Wie gebe ich einen Quellsatz auf einem anderen Computer an? sourceSets { main.java.srcDirs += 'src/main/\\10.51.70.21\me\myco\apps\myapp\src' }
– wie Judo
30. August 2016 um 2:37 Uhr
Ich erwarte nicht, dass Sie das können, da es meines Wissens nur das Betriebssystem verwendet open()
um auf Dateien zuzugreifen. Du könntest so etwas verwenden nfs
oder smb
Remote-Verzeichnisse direkt in das Dateisystem einzuhängen, aber das ist nicht spezifisch für Android Studio.
– Brian Weiß
31. August 2016 um 0:09 Uhr
Obwohl diese Lösung funktioniert, habe ich festgestellt, dass sie nicht funktioniert, wenn Sie ein Projekt haben, das aus mehreren Modulen besteht und mehr als ein Modul auf denselben externen Quellcode verweisen möchte. Es scheint, dass nur ein Modul auf externe Quelldateien verweisen kann. Das ist eine Schande, da ich beabsichtigt hatte, einen gemeinsamen src-Ordner zu haben, den ich verwenden könnte, um Konstanten zu teilen, ohne eine JAR- oder AAR-Datei erstellen zu müssen.
– Johannes
30. Dezember 2019 um 12:05 Uhr
Sie können dem Build-Skript einen Quellordner hinzufügen und dann synchronisieren. Suchen Sie in der Dokumentation hier nach sourceSets: http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Basic-Project
Ich habe keine gute Möglichkeit gefunden, Testquellordner hinzuzufügen. Ich habe die Quelle manuell zur .iml-Datei hinzugefügt. Dies bedeutet natürlich, dass es jedes Mal verschwindet, wenn das Build-Skript synchronisiert wird.
Brian Weiß
Während sourceSets
können Sie ganze Verzeichnisstrukturen einschließen, es gibt keine Möglichkeit, Teile davon in Android Studio (ab Version 1.2) auszuschließen, wie in beschrieben Schließen Sie eine Klasse aus dem Build in Android Studio aus.
Bis Android Studio aktualisiert wird, um Anweisungen zum Einschließen/Ausschließen von Android-Quellen zu unterstützen, symbolische Verknüpfungen funktionieren ganz gut. Wenn Sie Windows verwenden, sind native Tools wie z junction
oder mklink
kann das Äquivalent von symbolischen Links auf Unix-ähnlichen Systemen erreichen. Cygwin auch diese mit etwas Zwang schaffen können. Sehen: Symbolische Git-Links in Windows und So erstellen Sie einen symbolischen Link mit Cygwin in Windows 7.
Tyrannisieren
Hier ist eine vollständige Java-Modul-Gradle-Datei, die die erstellten Artefakte innerhalb einer Android-Anwendung mit mehreren Modulen korrekt generiert und referenziert:
buildscript {
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath "net.ltgt.gradle:gradle-apt-plugin:0.15"
}
}
apply plugin: "net.ltgt.apt"
apply plugin: "java-library"
apply plugin: "idea"
idea {
module {
sourceDirs += file("$buildDir/generated/source/apt/main")
testSourceDirs += file("$buildDir/generated/source/apt/test")
}
}
dependencies {
// Dagger 2 and Compiler
compile "com.google.dagger:dagger:2.15"
apt "com.google.dagger:dagger-compiler:2.15"
compile "com.google.guava:guava:24.1-jre"
}
sourceCompatibility = "1.8"
targetCompatibility = "1.8"
Peter Mortensen
Wenn Sie Gradle nicht verwenden (Erstellen eines Projekts aus einer APK), kann dies über die Android Studio-Benutzeroberfläche (ab Version 3.3.2) erfolgen:
Nach meiner Erfahrung (mit nativem Code) solange Ihr .so
Dateien werden mit Debug-Symbolen erstellt und von den gleichen absoluten Pfaden werden in Quelldateien hinzugefügte Haltepunkte automatisch erkannt.
Das ist für Kotlin-DSL (build.gradle.kts):
android {
sourceSets["main"].java.srcDirs("src/main/myDirectory/code/")
sourceSets["main"].resources.srcDirs("src/main/myDirectory/resources/")
// Another notation:
// sourceSets {
// getByName("main") {
// java.srcDirs("src/main/myDirectory/code/")
// resources.srcDirs("src/main/myDirectory/resources/")
// }
// }
}
@PeterMortensen Ich habe den Link aktualisiert. Danke für den Hinweis. Mmm … und verzeihen Sie mir, wenn ich nicht den richtigen Artikel verwendet habe.
– Mahozad
3. Mai um 5:45 Uhr