Android Studio erkennt keine Quellordner

Lesezeit: 5 Minuten

Benutzer-Avatar
imbryk

Ich verwende eine standardmäßige 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 lässt sich gut kompilieren, aber AS erkennt nicht alle Quellordner. Nur Ordner darunter main und debug sind als Quelle markiert, Ordner darunter preview und release werden als normale Ordner angezeigt. Tatsächlich findet in diesen Ordnern keine Fehlerprüfung statt

Geben Sie hier die Bildbeschreibung ein

Ich habe die .iml-Datei überprüft und 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.

Geben Sie hier die Bildbeschreibung ein

… 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?

  • Ich hoffe, Sie haben Verständnis dafür, dass Sie die *.iml-Datei niemals bearbeiten sollten, da sie von Gradle generiert wird. Wird das Projekt korrekt über die Befehlszeile erstellt? Andernfalls schlägt der Import möglicherweise fehl und das Projektmodell wird nicht aktualisiert. Ich bin mir übrigens nicht sicher, ob Sie die ‘initWith’-Zeile wirklich brauchen.

    – botteaap

    27. Februar 2014 um 12:49 Uhr

  • Ich habe gerade die IML-Datei bearbeitet, um zu sehen, ob dies der Grund ist. Meine Schlussfolgerung ist also, dass es nicht korrekt generiert wurde.

    – imbryk

    27. Februar 2014 um 13:13 Uhr

  • Das Projekt wird sowohl von der Befehlszeile als auch von Studio kompiliert – es zeigt die Ordner nur als sourceFolders an – was die Arbeit tatsächlich sehr schwierig macht

    – imbryk

    27. Februar 2014 um 13:21 Uhr

  • OK, fair genug, werden die Build-Typen in der Liste der Build-Varianten angezeigt? Ich denke tatsächlich, dass die Antwort von Ladios unten das ist, wonach Sie suchen, nur ein Build-Typ wird in der IDE aktiv sein.

    – botteaap

    27. Februar 2014 um 15:20 Uhr

  • Jeder, der nach einer Demo für Android Studio Flavours sucht

    – Nitesh Tiwari

    19. Dezember 2015 um 7:20 Uhr

Sie müssen es in der Liste der Build-Varianten umschalten, dann holt sich AS die entsprechenden Source-Sets.
Varianten bauen

  • Trotzdem hoffe ich, dass AS in Zukunft Quellen für verschiedene Varianten sehen kann – es ist ein bisschen ärgerlich, dass ich manuell wechseln muss, wenn ich eine kleine Änderung in einer anderen Variante vornehmen muss

    – imbryk

    27. Februar 2014 um 19:22 Uhr

  • Stimmt, jede Build-Variante sollte erkannt und sofort als solche angezeigt werden, das ist sehr verwirrend!

    – Schwarzlicht

    14. November 2014 um 8:18 Uhr


  • Es hat bei mir auch nach all dem nicht funktioniert. Ich habe Probleme beim Importieren von Klassen in das gemeinsame src-Paket, das ich in 2 benutzerdefinierte Varianten einschließe. Projekt wird erfolgreich kompiliert, nur im Android Studio-Editor sehe ich Fehler aufgrund von Importproblemen.

    – Himanshu Virmani

    28. April 2015 um 12:28 Uhr

  • @Ladios Jonquil. Gott segne dich. Und ich bin nicht religiös, also bedeutet es mehr

    – Nativ

    24. August 2016 um 12:16 Uhr

Benutzer-Avatar
Sababado

Versuchen Sie zunächst, das Projekt erneut zu importieren. Löschen Sie alle Ihre Build-Verzeichnisse, .iml Dateien und die .idea Mappe. Importieren Sie dann das Projekt.

Wenn das nicht funktioniert, können Sie dies versuchen, um es zu “erzwingen”.
Sehen Sie sich diese Antwort von Bernd Bergler an. Beachten Sie, dass dies ein Hack ist und idealerweise nicht notwendig 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)
}

Lassen Sie das einfach in Ihrem fallen build.gradle Datei außerhalb der android Sektion.
Beschreibung aus dieser Quelle:

Android Studio generiert automatisch .iml-Projektdateien aus Gradle-Build-Dateien. Diese Aufgabe bearbeitet die Android Studio-Projektdatei app.iml und fügt das Testverzeichnis hinzu. Die Änderungen gehen verloren, wenn Android Studio die Gradle-Dateien erneut scannt, aber direkt danach führt es einen Build aus und die Aufgabe ist damit verbunden, also ist alles gut. Diese Version hat ein paar Optimierungen, wie z. B. das Hinzufügen der neuen Aufgabe in den normalen Build-Zyklus etwas anders und das Fehlen der .iml-Datei.

Das hat bei mir bis zu einem gewissen Grad funktioniert: Die IDE erkennt es jetzt als src-Baum, will es aber nicht mit anderen src-Bäumen verknüpfen.

  • … was im Grunde darauf hinausläuft, die *.iml-Datei zu hacken, was ein grober Hack ist.

    – botteaap

    27. Februar 2014 um 15:18 Uhr

  • Ich widerspreche dir nicht.

    – Sababado

    27. Februar 2014 um 15:20 Uhr

  • Großartig 🙂 Jetzt lasst uns die Daumen drücken, dass dies nicht akzeptiert oder positiv bewertet wird.

    – botteaap

    27. Februar 2014 um 15:21 Uhr

  • Nun, ich will nicht streiten, aber es ist eine Lösung für ein Problem, das nicht wirklich existiert. In AS wählen Sie die Quellordner basierend auf dem Build-Typ aus. Unterschiedlicher Build-Typ / Flavor bedeutet effektiv unterschiedlichen Code. Es macht also keinen Sinn, andere Ordner als den aktiven Build-Typ zum IDE-Klassenpfad hinzuzufügen. Wenn Sie dem Erstellungspfad wirklich benutzerdefinierten Code hinzufügen müssen, führt der „richtige“ Weg über die Erweiterungspunkte, die das Android-Gradle-Plug-in bereitstellt.

    – botteaap

    27. Februar 2014 um 19:04 Uhr

  • Je mehr ich diese Frage sehe, desto mehr glaube ich, dass ich diese Antwort schnell gepostet habe. Es löst vorerst ein sehr spezifisches Problem, und diese Frage unterscheidet sich geringfügig von dem, was ich beantworten wollte.

    – Sababado

    3. März 2014 um 15:09 Uhr

Nur in meinem Fall Datei -> Caches ungültig machen / Neustart haben mir geholfen, also wenn die oben genannten Lösungen für Sie nicht funktionieren – versuchen Sie dies.

Fügen Sie dies der build.gradle-Datei Ihres Moduls hinzu:

sourceSets {
    main.java.srcDirs += 'src/preview/java'
    main.java.srcDirs += 'src/release/java'
}

1246490cookie-checkAndroid Studio erkennt keine Quellordner

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy