reales - Android studio no reconoce carpetas fuente
libros de android studio (4)
Estoy usando una estructura de directorio estándar de Android Studio y creé diferentes tipos de compilación:
buildTypes {
debug {
runProguard false
packageNameSuffix ".debug"
signingConfig signingConfigs.debug
}
preview.initWith(buildTypes.debug)
preview {
packageNameSuffix ".preview"
}
release {
runProguard false
signingConfig signingConfigs.release
}
}
todo compila bien, pero AS no reconoce todas las carpetas de origen. Solo las carpetas debajo de main
y debug
están marcadas como fuente, las carpetas bajo preview
y release
se muestran como carpetas normales. En efecto, no hay errores en esas carpetas
Revisé el archivo .iml y las etiquetas sourceFolder no se agregaron.
Si edito el archivo iml del proyecto manualmente agregando las líneas:
<sourceFolder url="file://$MODULE_DIR$/src/preview/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/preview/res" type="java-resource" />
Parece que funciona bien.
... hasta que sincronice con mi archivo gradle, que elimina las líneas anteriores.
¿Es esto un error en el complemento gradle, o estoy haciendo algo mal?
Agregue esto al archivo build.gradle de su módulo:
sourceSets {
main.java.srcDirs += ''src/preview/java''
main.java.srcDirs += ''src/release/java''
}
En mi caso, solo File -> Invalidate Caches / Restart me ha ayudado, por lo que si las soluciones anteriores no funcionan para usted, intente esto.
Primero, intente volver a importar el proyecto. Elimine todos sus directorios de compilación, archivos .iml
y la carpeta .idea
. Luego importa el proyecto.
Si eso no funciona, puedes intentar esto para "forzarlo". Mira esta respuesta de Bernd Bergler. Tenga en cuenta que este es un truco e idealmente no es necesario
Aquí hay una versión ligeramente modificada de su código.
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)
}
Simplemente build.gradle
en su archivo build.gradle
fuera de la sección de android
. Descripción de esta fuente :
Android Studio genera automáticamente archivos de proyecto .iml a partir de archivos de compilación gradle. Esta tarea edita el archivo de proyecto de Android Studio app.iml y agrega el directorio de prueba. Los cambios se pierden cada vez que Android Studio vuelve a escanear los archivos gradle, pero inmediatamente después ejecuta una compilación y la tarea se conecta con eso, por lo que todo está bien. Esta versión tiene un par de ajustes, como agregar la nueva tarea en el ciclo de compilación normal de una manera un tanto diferente, y manejar con elegancia la ausencia del archivo .iml.
Esto ha funcionado en cierta medida para mí: el IDE lo reconoce como un árbol src ahora pero no desea vincularlo con ningún otro árbol src.
Tienes que cambiarlo en la lista de variantes de compilación, luego AS recogerá los conjuntos fuente apropiados.