Ich verwende eine Standard-Android Studio-Verzeichnisstruktur und habe verschiedene Build-Typen erstellt:
buildTypes {
debug {
runProguard false
packageNameSuffix ".debug"
signingConfig signingConfigs.debug
}
preview.initWith(buildTypes.debug)
preview {
packageNameSuffix ".preview"
}
release {
runProguard false
signingConfig signingConfigs.release
}
}
Alles wird gut kompiliert, aber AS erkennt nicht alle Quellordner. Nur Ordner unter main
und debug
werden als Quelle markiert, Ordner unter preview
und release
werden als normale Ordner angezeigt. Tatsächlich gibt es in diesen Ordnern keine Fehlerprüfung
Ich habe die .iml-Datei überprüft und die sourceFolder-Tags wurden nicht hinzugefügt.
Wenn ich die Projekt-IML-Datei manuell bearbeite und die Zeilen hinzufüge:
<sourceFolder url="file://$MODULE_DIR$/src/preview/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/preview/res" type="java-resource" />
Es scheint gut zu funktionieren.
... bis ich mit meiner Gradle-Datei synchronisiere - wodurch die obigen Zeilen entfernt werden.
Ist das ein Fehler im Gradle-Plugin oder mache ich etwas falsch?
android
gradle
android-studio
imbryk
quelle
quelle
Antworten:
Sie müssen es in der Liste der Build-Varianten wechseln, dann nimmt AS die entsprechenden Quellensätze auf.
quelle
Versuchen Sie zunächst, das Projekt erneut zu importieren. Löschen Sie alle Build-Verzeichnisse,
.iml
Dateien und den.idea
Ordner. Importieren Sie dann das Projekt.Wenn das nicht funktioniert, können Sie dies versuchen, um es zu "erzwingen". Kasse diese Antwort von Bernd Bergler. Beachten Sie, dass dies ein Hack ist und im Idealfall nicht erforderlich ist
Hier ist eine leicht modifizierte Version seines Codes.
task addPreview { def src = ['src/preview/java'] def file = file("app.iml") doLast { try { def parsedXml = (new XmlParser()).parse(file) def node = parsedXml.component[1].content[0] src.each { def path = 'file://$MODULE_DIR$/' + "${it}" def set = node.find { it.@url == path } if (set == null) { new Node(node, 'sourceFolder', ['url': 'file://$MODULE_DIR$/' + "${it}", 'isTestSource': "false"]) def writer = new StringWriter() new XmlNodePrinter(new PrintWriter(writer)).print(parsedXml) file.text = writer.toString() } } } catch (FileNotFoundException e) { // nop, iml not found } } } // always do the addPreview on prebuild gradle.projectsEvaluated { preBuild.dependsOn(addPreview) }
Legen Sie das einfach in Ihrer
build.gradle
Datei außerhalb desandroid
Abschnitts ab. Beschreibung aus dieser Quelle :Für mich hat dies bis zu einem gewissen Grad funktioniert: Die IDE erkennt es jetzt als src-Baum, möchte es aber nicht mit anderen src-Bäumen verknüpfen.
quelle
In meinem Fall hat mir nur Datei -> Caches ungültig machen / Neustart geholfen. Wenn die oben genannten Lösungen für Sie nicht funktionieren, versuchen Sie dies.
quelle
Fügen Sie dies der build.gradle-Datei Ihres Moduls hinzu:
sourceSets { main.java.srcDirs += 'src/preview/java' main.java.srcDirs += 'src/release/java' }
quelle