web-dev-qa-db-fra.com

Pouvez-vous déployer sur un appareil via Gradle à partir de la ligne de commande

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?

87
Matt Whetton
$ gradle installDebug

Cela poussera l'apk de construction de débogage sur le périphérique, mais vous devrez démarrer manuellement l'application.

95
rafaello

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'

75
kromit

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
65
rps_deepan

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
6
João Machete

Il y a trois commandes pour accomplir ceci:

  1. ./gradlew assembleDebug #To build the project

  2. adb install -r ./app/build/outputs/apk/app-debug.apk #To install it to the device

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

5
mhbrhm

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.
  • L'outil monkey vous permet d'envoyer une intention de lancement, vous n'êtes donc pas obligé de connaître le nom de votre activité.
3
0xcaff
task appStart(type: Exec, dependsOn: 'installDebug') {
    commandLine Android.adbExe, 'Shell', 'am', 'start', '-n', 'com.example/.MyActivity'
}
2
hoot

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

1
maclir

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]
1
Goffity