Lo que dice la pregunta realmente: ¿puede emitir comandos directamente a gradlew a través de la línea de comandos para compilar, empaquetar e implementar en un dispositivo?
android
gradle
android-studio
gradlew
Matt Whetton
fuente
fuente
gradle tasks
Es útil ver las tareas listas para usar, que incluyen la instalación (pero no el inicio como se indica a continuación)Respuestas:
Esto enviará el apk de la compilación de depuración al dispositivo, pero debe iniciar la aplicación manualmente.
fuente
Dado que está utilizando Gradle, puede simplemente agregar su propia tarea en build.gradle
task appStart(type: Exec, dependsOn: 'installDebug') { // linux commandLine 'adb', 'shell', 'am', 'start', '-n', 'com.example/.MyActivity' // windows // commandLine 'cmd', '/c', 'adb', 'shell', 'am', 'start', '-n', 'com.example/.MyActivity' }
luego llámalo en la raíz de tu proyecto
$ gradle appStart
Actualizar:
Si está utilizando
applicationIdSuffix ".debug"
, agregue solo.debug
al appId pero deje la actividad intacta:'com.example.debug/com.example.MyActivity'
fuente
'com.your.packagename/.path.relative.to.your.packagename.MyActivity'
lugar de'com.example/.MyActivity'
si su actividad no está en la raíz de su paquete.1. Construya el proyecto, instale el apk generado en el dispositivo
# at the root dir of project $ gradle installDebug
2. Abra la aplicación en el dispositivo
fuente
alias arun="./gradlew installDebug && adb shell am start -n com.example.package/.LauncherActivity"
#Ejecuta el paso 2 solo cuando el paso 1 es exitosoOración de una línea:
Cree un proyecto e instale el apk generado y la aplicación abierta en el dispositivo
$ ./gradlew installDebug && adb shell am start -n com.example/.activities.MainActivity
fuente
Hay tres comandos para lograr esto:
./gradlew assembleDebug #To build the project
adb install -r ./app/build/outputs/apk/app-debug.apk #To install it to the device
adb shell am start -n $PACKAGE/$PACKAGE.$ACTIVITY #To launch the application in the device
, donde $ PACKAGE es el paquete de desarrollo y $ ACTIVITY es la actividad que se lanzará (la actividad del lanzador).He estado escribiendo un script bash para hacer esto , con otras características.
fuente
Una forma más flexible de hacerlo es usando monkey:
task runDebug (type: Exec, dependsOn: 'installDebug') { commandLine android.getAdbExe().toString(), "shell", "monkey", "-p", "your.package.name.debugsuffix", "-c", "android.intent.category.LAUNCHER", "1" }
Algunas ventajas de este método:
getAdbExe
no requiere que adb esté en la ruta y usa la versión adb del sdk apuntado enlocal.properties
.monkey
herramienta le permite enviar una intención de iniciador, por lo que no es necesario que sepa el nombre de su actividad.fuente
adb shell am start your.package.name.debugsuffix\.Activity
Compilar -> desinstalar la versión anterior -> instalar la nueva versión -> ejecutar la aplicación.
echo "Build application" && ./gradlew clean build && echo "Uninstall application" && adb uninstall [application package] && echo "Install application" && adb -d install app/build/outputs/apk/<build type>/[apk name].apk echo "Run application" && adb shell am start -n [application package]/.[application name]
O si desea instalar y ejecutar la aplicación en tipo de depuración.
./gradlew installDebug && adb shell am start -n [application package]/.[application name]
fuente
task appStart(type: Exec, dependsOn: 'installDebug') { commandLine android.adbExe, 'shell', 'am', 'start', '-n', 'com.example/.MyActivity' }
fuente
Escribí esta tarea para poder instalar y también abrir la aplicación en el dispositivo. Como tenía varios identificadores de aplicaciones
buildTypes
yflavors
con diferentes, no era posible codificar el nombre del paquete. Así que lo escribí así en su lugar:android.applicationVariants.all { variant -> task "open${variant.name.capitalize()}" { dependsOn "install${variant.name.capitalize()}" doLast { exec { commandLine "adb shell monkey -p ${variant.applicationId} -c android.intent.category.LAUNCHER 1".split(" ") } } } }
Esto le daría
open{variant}
para cadainstall{variant}
tarea que ya tiene.fuente