Puoi distribuire su un dispositivo tramite Gradle dalla riga di comando


89

Cosa dice davvero la domanda: puoi impartire comandi direttamente a gradlew tramite la riga di comando per creare, creare pacchetti e distribuire su un dispositivo?


1
gradle tasksè utile vedere le attività pronte all'uso - che include l'installazione (ma non l'avvio come indicato di seguito)
Dori

La riga di comando non è specifica dell'IDE, .ie in questo modo funzionerebbe da Android Studio o dall'IDE basato su Eclipse
Paul Verest

gradlew installdebug in cmd - la cartella principale dovrebbe essere il percorso
c49

Risposte:


97
$ gradle installDebug

Questo spingerà l'apk della build di debug sul dispositivo, ma dovrai avviare manualmente l'applicazione.


2
Come sotto, è stato rinominato in "gradle installDefaultFlavorDebug"
durka42

2
@ durka42 Questo è il caso solo se usi i sapori
Mathijs Segers

3
Direi ./gradlew iD invece di gradle iD
irudyak

1
È possibile eseguire questo comando all'interno del plug-in Gradle installato su Eclipse? Ottengo questo errore: Attività "installDebug" non trovata nel progetto root "blahblah".
Dr.jacky

75

Dato che stai usando Gradle, puoi semplicemente aggiungere la tua attività in 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'      
}

quindi chiamalo nella root del tuo progetto

$ gradle appStart

Aggiornare:

Se stai usando applicationIdSuffix ".debug", aggiungi solo .debugad appId ma lascia inalterata l'attività:

'com.example.debug/com.example.MyActivity'


1
Inoltre, l'ultimo parametro dovrebbe essere al 'com.your.packagename/.path.relative.to.your.packagename.MyActivity'posto di 'com.example/.MyActivity'se la tua attività non è nella radice del tuo pacchetto.
Luce

66

1. Compilare il progetto, installare l'apk generato sul dispositivo

# at the root dir of project
$ gradle installDebug

2. Apri l'app sul dispositivo

$ adb shell am start -n yourpackagename/.activityname

6
alias arun = "gradle installDebug; adb shell am start -n com.example.app/.activity.MainActivity"
Dominic Bartl

Non riesco a selezionare installDebug in gradle. Non esiste un compito adatto. È stato rinominato?
Jonas Gröger

1
@ JonasGröger sembra che sia stato rinominato installDefaultFlavorDebug
durka42

@rps_deepan Potresti rinominare l'attività perché è stata rinominata?
Jonas Gröger

6
alias arun="./gradlew installDebug && adb shell am start -n com.example.package/.LauncherActivity"#Runs step2 Solo quando lo Step 1 ha esito
positivo

7

Una frase di una riga:

Crea il progetto e installa l'apk generato e apri l'app sul dispositivo

$ ./gradlew installDebug && adb shell am start -n com.example/.activities.MainActivity

7

Sono disponibili tre comandi per eseguire questa operazione:

  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, dove $ PACKAGE è il pacchetto di sviluppo e $ ACTIVITY è l'attività da lanciare (l'attività di avvio).

Ho scritto uno script bash per farlo , con altre poche funzionalità.


4

Un modo più flessibile per farlo è usare monkey:

task runDebug (type: Exec, dependsOn: 'installDebug') {
    commandLine android.getAdbExe().toString(), "shell",
        "monkey",
        "-p", "your.package.name.debugsuffix",
        "-c", "android.intent.category.LAUNCHER", "1"
}

Alcuni vantaggi di questo metodo:

  • getAdbExenon richiede che adb sia sul percorso e utilizza la versione adb dall'SDK puntato in local.properties.
  • Lo monkeystrumento ti consente di inviare un intento di avvio, quindi non è necessario conoscere il nome della tua attività.

Potresti invece eseguireadb shell am start your.package.name.debugsuffix\.Activity
Vikram Bodicherla

Ma cosa succede se non conosci il nome della tua attività?
0xcaff

1
Quindi non dovresti scrivere il file di build.
kevr

3
Penso che sia una pessima idea che il file di build sappia esplicitamente quale attività eseguire ... sembra che la separazione delle preoccupazioni vada contro. Un semplice motivo: se rinomini / sposti il ​​tuo file Activity, ora è necessaria una modifica al file build. Inoltre, gli intenti sembrano un'API migliore da eseguire rispetto a un file: potrei scrivere un'estensione gradle che aggiunge intenti predefiniti e modi per eseguirli, versione e non ho mai bisogno di conoscere i nomi di classe di nessuno. L'hard coding non è mai la risposta giusta.
smaudet

1
Questa risposta manca anche di un modo per trovare il pacchetto root - mi piacerebbe sbarazzarmi anche del nome del pacchetto - es. Scoprilo invece dal manifest.
smaudet

3

Compila -> disinstalla vecchia versione -> installa nuova versione -> esegui applicazione.

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]

Oppure, se vuoi installare ed eseguire l'applicazione nel tipo di debug.

./gradlew installDebug && adb shell am start -n [application package]/.[application name]

Grazie. @ alexander-polomodov
Goffity

2
task appStart(type: Exec, dependsOn: 'installDebug') {
    commandLine android.adbExe, 'shell', 'am', 'start', '-n', 'com.example/.MyActivity'
}

Migliore soluzione di corsa
Orgatres

1

Ho scritto questa attività per poter installare e anche aprire l'applicazione sul dispositivo. Poiché avevo più buildTypese flavorscon diversi ID applicazione, non era possibile codificare il nome del pacchetto. Quindi l'ho scritto così invece:

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(" ")
            }
        }
    }
}

Questo ti darebbe open{variant}per ogni install{variant}compito che hai già.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.