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:
- Android Gradle Lee el nombre de la aplicación de strings.xml
- Android Studio No se puede cargar la clase 'org.codehaus.groovy.runtime.typehandling.ShortTypeHandling'
- Aplicar de forma condicional Plugin Gradle
- Utilizar JSON para crear un objeto en Groovy / Grails
- En Android Gradle build.gradle ¿Qué es "it" en it.buildConfigField?
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
- Agregue dependencia de tareas a la tarea de complemento existente en Gradle?
- Gradle Advertencia: falta declaración groovy devolución
- 'Dependencias' no se puede aplicar a '(groovy.lang.Closure)'
- Obtener Resolver error al importar proyecto en android studio, No se puede cargar la clase 'org.codehaus.groovy.runtime.typehandling.ShortTypeHandling'
- Prueba de una biblioteca de Android con Robolectric
- Sabores de productos dependencia Android de Gradle
- Es groovy un lenguaje de desarrollo potencial para Android
- Grails / Gradle prueba falla en CI no localmente
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