¿Cómo apuntamos androidTest a un Peer Eclipse-Style Project?
Estoy ayudando al Proyecto Guardian en NetCipher . Por motivos legados, quieren mantener su estructura de proyecto existente, basada en Eclipse. Sin embargo, en lugar de tener las pruebas en una tests/
subdirectorio de la biblioteca, fueron con un modelo de proyecto de iguales. Así, fuera de la raíz de repo, libnetcipher/
es la biblioteca y netciphertest/
son las pruebas de instrumentación.
Las pruebas de instrumentación nunca fueron configuradas para las compilaciones de Gradle, a diferencia de libnetcipher/
sí mismo. Por lo tanto, estoy añadiendo cosas al archivo libnetcipher/build.gradle
para que apunte su androidTest
sourceset al directorio netciphertest/
, en lugar de su ubicación normal.
- Cómo personalizar Jacoco para las pruebas de Espresso en Android
- ¿Cómo importar Sherlock de la barra de acción al proyecto gradle?
- Error de ADT que exporta con Gradle
- Ejecutar script de shell en Gradle
- La generación de Gradle falla debido a la entrada duplicada en strings.xml
Esto funciona:
androidTest { manifest.srcFile '../netciphertest/AndroidManifest.xml' java.srcDirs = ['../netciphertest/src'] resources.srcDirs = ['../netciphertest/src'] aidl.srcDirs = ['../netciphertest/src'] renderscript.srcDirs = ['../netciphertest/src'] res.srcDirs = ['../netciphertest/res'] assets.srcDirs = ['../netciphertest/assets'] }
Sin embargo, los bits duplicados ../netciphertest
son icky. Podría definir eso como una constante para minimizar la duplicación, por supuesto. Estoy tratando de averiguar si hay un enfoque mejor a todo el problema.
Por ejemplo, esto no funciona:
androidTest.setRoot('../netciphertest') androidTest { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src'] resources.srcDirs = ['src'] aidl.srcDirs = ['src'] renderscript.srcDirs = ['src'] res.srcDirs = ['res'] assets.srcDirs = ['assets'] }
Pensé que quizás el srcDirs
y el srcFile
podrían ser interpretados relativo al valor setRoot()
, pero parecen ser interpretados relativo a la raíz del proyecto.
¿Hay una solución más elegante que lo que tengo trabajando?
- ¿Gradle escala de rendimiento bien con el número de núcleos de la CPU
- ¿Qué tarea de gradle extrae dependencias de repositorios remotos?
- Android studio / Gradle build falla en la versión: No se pudieron determinar las dependencias de la tarea ': app: crashlyticsStoreDeobsRelease'
- Instalar manualmente Gradle y usarlo en Android Studio
- Archivos duplicados durante el empaque de un APK
- Cambiar el nombre del directorio durante la copia usando Gradle
- Gradle Excluir o añadir referencia para el archivo JAR duro incluido dentro de la biblioteca classes.jar
- Excluir archivos de mi versión .apk
Leyendo sobre la documentación de Gradle, no pude encontrar nada acerca de las vías absolutas relativas para los srcDirs
, pero parece que si acaba de dar src
que asumirá ./src
independientemente de la raíz que se estableció. Tal vez esto podría ser una solicitud de característica Gradle o podría funcionar como se esperaba en las versiones posteriores de Gradle? No estoy seguro, no mirar en él.
Dicho esto, asumiendo que usted no necesita aidl
, renderscripts
, o resources
(ya que no aparecen utilizados en el proyecto), entonces esto es menos "icky"?
androidTest { setRoot '../netciphertest' java.srcDirs = ['../netciphertest/src'] }
Todos los demás se configurará automáticamente de esta manera si no los anula y simplemente establece la raíz.
androidTest.manifest.srcFile = /NetCipher/netciphertest/AndroidManifest.xml androidTest.res.srcDirs = [/NetCipher/netciphertest/res] androidTest.assets.srcDirs = [/NetCipher/netciphertest/assets] // Override these, if you wish androidTest.resources.srcDirs = [/NetCipher/netciphertest/resources] androidTest.aidl.srcDirs = [/NetCipher/netciphertest/aidl] androidTest.renderscript.srcDirs = [/NetCipher/netciphertest/rs]
Puede imprimir las rutas dentro de Gradle y jugar con ella más si lo desea, incluyendo esta sección dentro del bloque sourceSets
.
println "androidTest.manifest.srcFile = ${androidTest.manifest.srcFile}" println "androidTest.java.srcDirs = ${androidTest.java.srcDirs}" println "androidTest.resources.srcDirs = ${androidTest.resources.srcDirs}" println "androidTest.aidl.srcDirs = ${androidTest.aidl.srcDirs}" println "androidTest.renderscript.srcDirs = ${androidTest.renderscript.srcDirs}" println "androidTest.res.srcDirs = ${androidTest.res.srcDirs}" println "androidTest.assets.srcDirs = ${androidTest.assets.srcDirs}"