Set applicationApk y instrumentationApk para la cuchara Gradle Plugin
Me gustaría establecer archivos .apk que se utilizarán para ejecutar mis pruebas con SpoonGradlePlugin.
Hay las propiedades disponibles que puedo fijar programatically del archivo del gradle:
- Cómo definir y utilizar una constante en el script de compilación de Gradle (Android)?
- Android Studio No se puede cargar la clase 'org.codehaus.groovy.runtime.typehandling.ShortTypeHandling'
- gradle: ejecuta código dependiendo del tipo de construcción (o variante)
- Prueba de una biblioteca de Android con Robolectric
- Utilizar JSON para crear un objeto en Groovy / Grails
Https://github.com/stanfy/spoon-gradle-plugin/blob/master/src/main/groovy/com/stanfy/spoon/gradle/SpoonExtension.groovy
Pero mi proyecto tiene varios sabores y nombres y me gustaría probarlos. Con la configuración actual obtengo:
* What went wrong: A problem was found with the configuration of task ':app:spoonDebugAndroidTest'. > File '/Users/F1sherKK/Dev/MyApp-Android/app/build/outputs/apk/app-debug.apk' specified for property 'applicationApk' does not exist.
Mis nombres de compilación son:
app-debug-androidTest-unaligned.apk MyApp-debugA-1.2.3-201.apk MyApp-debugB-1.2.3-201.apk MyApp-debugC-1.2.3-201.apk
Es por eso que me gustaría configurar mi .apk en algún lugar en código gradle – o consola. Lo que he encontrado hasta ahora hay campos disponibles en Spoon Gradle Plugin allí:
Https://github.com/stanfy/spoon-gradle-plugin/blob/master/src/main/groovy/com/stanfy/spoon/gradle/SpoonRunTask.groovy
Con nombres:
/** Instrumentation APK. */ @InputFile File instrumentationApk /** Application APK. */ @InputFile File applicationApk
Pero no puedo acceder a los de gradle como propiedades en SpoonExtension.groovy.
¿Hay alguna manera de configurar esos campos?
// EDIT – Añadido algunos intentos: Esta es mi base de configuración cuchara:
spoon { debug = true baseOutputDir = file("$buildDir/spoon-log") if (project.hasProperty('spoonClassName')) { className = project.spoonClassName if (project.hasProperty('spoonMethodName')) { methodName = project.spoonMethodName } } }
Y las tareas de extensión y sobrescribir instumentationArgs para establecer el paquete y lanzar otro tipo de pruebas.
task spoonAllTests(type: GradleBuild, dependsOn: ['spoon']) { spoon { instrumentationArgs = ["package=com.myapp.sendmoney.instrumentation"] } } task spoonFlowTests(type: GradleBuild, dependsOn: ['spoon']) { spoon { instrumentationArgs = ["package=com.myapp.instrumentation.flowtests"] } }
Y ahora trato de editar el archivo applicationApk o instrumentationApk:
Edit2: He intentado algo nuevo:
task spoonFlowTests(type: GradleBuild, dependsOn: ['spoon']) { spoon { inputs.property("applicationApk", "$buildDir/outputs/apk/ap12345p-debug.apk") inputs.property("instrumentationApk", "$buildDir/outputs/apk/ap125p-debug.apk") println inputs.getFiles() println inputs.getProperties() instrumentationArgs = ["package=com.azimo.sendmoney.instrumentation.flowtests"] } }
Y la respuesta terminal:
2015-10-26 20:24:12 [SR.runTests] Executing instrumentation suite on 0 device(s). 2015-10-26 20:24:12 [SR.runTests] Application: com.azimo.sendmoney.debug1 from /Users/F1sherKK/Dev/Azimo-Android/app/build/outputs/apk/app-debug.apk 2015-10-26 20:24:12 [SR.runTests] Instrumentation: com.azimo.sendmoney.debug1.test from /Users/F1sherKK/Dev/Azimo-Android/app/build/outputs/apk/app-debug-androidTest-unaligned.apk :app:spoon :app:spoonFlowTests file collection {instrumentationApk=/Users/F1sherKK/Dev/Azimo-Android/app/build/outputs/apk/ap125p-debug.apk, applicationApk=/Users/F1sherKK/Dev/Azimo-Android/app/build/outputs/apk/ap12345p-debug.apk} :Azimo-Android:app:help Welcome to Gradle 2.5. To run a build, run gradlew <task> ... To see a list of available tasks, run gradlew tasks To see a list of command-line options, run gradlew --help To see more detail about a task, run gradlew help --task <task> BUILD SUCCESSFUL Total time: 13.289 secs
- Incorporar Groovy en una aplicación Android Java
- Gradle: Multi-Dimension Flavour ApplicationId
- Groovy, Scala, Clojure, etc scripts en Android
- ¿Hay una manera de saber si una cierta dependencia se compila en el archivo gradle devolviendo un boolean
- Cómo configurar Android Studio proyecto desde cero que me permite utilizar groovy
- Resolver Etiqueta de aplicación para cada tipo de compilación
- Gradle define el valor de la ruta absoluta para un archivo de almacén de claves
- Agregue dependencia de tareas a la tarea de complemento existente en Gradle?
Por favor vea mi respuesta a su pregunta diferente explicando lo que está mal con cómo configurar sus tareas.
Puede aplicar el complemento Spoon después de cambiar el nombre apk de la siguiente manera:
applicationVariants.all { variant -> variant.outputs.each { output -> output.outputFile = new File( output.outputFile.parent, output.outputFile.name.replace(".apk", "-${variant.versionName}.apk")) } } afterEvaluate { apply plugin: 'spoon' spoon { debug = true; } }
Fuente: https://github.com/stanfy/spoon-gradle-plugin/issues/70
Tenemos que considerar la anotación de los parámetros:
/** Instrumentation APK. */ @InputFile File instrumentationApk /** Application APK. */ @InputFile File applicationApk
Dado que están marcados como @InputFile
, deberíamos ser capaces de crear una tarea personalizada que depende de la cuchara que pasa las entradas utilizando la propiedad input.files .
Un ejemplo aproximado (no probado):
task customSpoon(type: Exec, dependsOn: spoon) { inputs.files ["path/instrumentation.apk", "path/debuggable.apk"] }
ACTUALIZAR
Como alternativa, simplemente cree una tarea personalizada que simule una llamada parametrizada de línea de comandos a la tarea de Spoon base, como la siguiente
task runSpoonTask(type: Exec) { commandLine './gradlew', 'spoon', '$buildDir/outputs/apk/ap12345p-debug.apk', '$buildDir/outputs/apk/ap125p-debug.apk' }
Yo tuve el mismo problema:
… especificado para la propiedad 'applicationApk' no existe
Utilizamos esto para cambiar el nombre de "app-debug.apk" a "currentProject-debug.apk":
applicationVariants.all { variant -> variant.outputs.each { output -> output.outputFile = new File( output.outputFile.parent, output.outputFile.name.replace("app", "${project.hdmiAppName}")) } }
Pero parece que esto funciona mucho mejor con Spoon:
defaultConfig { applicationId packageName ... setProperty("archivesBaseName", "${project.hdmiAppName}") }
Esto cambiará el nombre de la "aplicación" -Parte del APK-Nombre a lo que quieras. En nuestro caso tenemos "${project.hdmiAppName}"
especificado en un archivo de propiedades. Pero supongo que también puede ser "MyApp-${versionName}"
.
- Creación de una instancia de imagen a partir de imágenes dibujables en android
- Algoritmo de coincidencia de ritmos