¿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.

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?

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}" 
  • ¿Existe un equivalente de aspectoj-maven-plugin para gradle que funciona en android?
  • Especificación de las dependencias de prueba con el sistema de compilación de Gradle Android
  • ¿Cómo podemos crear una sola biblioteca combinando diferentes módulos?
  • El objetivo "$ {build.target}" no existe en el proyecto "LibA" al ejecutar build.xml de Android desde Gradle
  • Construye una biblioteca de código cerrado de Android basada en Gradle
  • Configuración de Gradle para api 26 (Android)
  • Publicar android gradle proyecto a local maven repo
  • ¿Es posible utilizar múltiples archivos de manifiesto para diferentes creaciones / sabores de gradle?
  • Misterios de la importación de bibliotecas (por ejemplo, Picasso) a Android Studio
  • Pruebas de Android con Gradle: Cambie el nombre de archivo de salida de prueba de JUnit
  • Cómo incluir la dependencia de JAR en una biblioteca AAR
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.