Ce que la question dit vraiment - pouvez-vous envoyer des commandes directement à gradlew via la ligne de commande pour créer, mettre en package et déployer sur un périphérique?
$ gradle installDebug
Cela poussera l'apk de construction de débogage sur le périphérique, mais vous devrez démarrer manuellement l'application.
Puisque vous utilisez Gradle, vous pouvez simplement ajouter votre propre tâche dans 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'
}
puis appelez-le dans la racine de votre projet
$ gradle appStart
Mise à jour:
Si vous utilisez applicationIdSuffix ".debug"
, ajouter .debug
au appId seulement mais laissez l’activité intacte:
'com.example.debug/com.example.MyActivity'
1. Construire le projet, installer apk généré sur le périphérique
# at the root dir of project
$ gradle installDebug
2. Ouvrez l'application sur l'appareil
$ adb Shell am start -n yourpackagename/.activityname
Phrase d'une ligne:
Construire le projet et installer l'apk généré et ouvrir l'application sur l'appareil
$ ./gradlew installDebug && adb Shell am start -n com.example/.activities.MainActivity
Il y a trois commandes pour accomplir ceci:
./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
, où $ PACKAGE est le package de développement et $ ACTIVITY est l'activité à lancer (activité du lanceur).
J'ai écrit un script bash pour le faire , avec quelques autres fonctionnalités.
Une façon plus flexible de le faire est d'utiliser singe:
task runDebug (type: Exec, dependsOn: 'installDebug') {
commandLine Android.getAdbExe().toString(), "Shell",
"monkey",
"-p", "your.package.name.debugsuffix",
"-c", "Android.intent.category.LAUNCHER", "1"
}
Quelques avantages de cette méthode:
getAdbExe
ne nécessite pas que adb soit sur le chemin et utilise la version adb du sdk indiqué dans local.properties
.monkey
vous permet d'envoyer une intention de lancement, vous n'êtes donc pas obligé de connaître le nom de votre activité.task appStart(type: Exec, dependsOn: 'installDebug') {
commandLine Android.adbExe, 'Shell', 'am', 'start', '-n', 'com.example/.MyActivity'
}
J'ai écrit cette tâche pour pouvoir installer et également ouvrir l'application sur le périphérique. Comme j'avais plusieurs buildTypes
et flavors
avec des identifiants d'application différents, il n'était pas possible de coder en dur le nom du paquet. Alors je l'ai écrit comme ceci à la place:
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(" ")
}
}
}
}
Cela vous donnerait open{variant}
pour chaque install{variant}
tâche que vous avez déjà.
Construire -> désinstaller l'ancienne version -> installer la nouvelle version -> exécuter l'application.
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]
Ou si vous voulez installer et exécuter l'application en type de débogage.
./gradlew installDebug && adb Shell am start -n [application package]/.[application name]