Was die Frage wirklich sagt - können Sie Befehle direkt über die Befehlszeile an gradlew senden, um sie auf einem Gerät zu erstellen, zu verpacken und bereitzustellen?
Was die Frage wirklich sagt - können Sie Befehle direkt über die Befehlszeile an gradlew senden, um sie auf einem Gerät zu erstellen, zu verpacken und bereitzustellen?
Antworten:
$ gradle installDebug
Dadurch wird das Debug-Build-Apk auf das Gerät übertragen, Sie müssen die Anwendung jedoch manuell starten.
Da Sie Gradle verwenden, können Sie einfach Ihre eigene Aufgabe in build.gradle hinzufügen
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'
}
Rufen Sie es dann in Ihrem Projektstamm auf
$ gradle appStart
Aktualisieren:
Wenn Sie verwenden applicationIdSuffix ".debug"
, fügen Sie nur.debug
zur AppId hinzu , lassen Sie die Aktivität jedoch unberührt:
'com.example.debug/com.example.MyActivity'
'com.your.packagename/.path.relative.to.your.packagename.MyActivity'
anstelle von sein, 'com.example/.MyActivity'
wenn sich Ihre Aktivität nicht im Stammverzeichnis Ihres Pakets befindet.
1. Projekt erstellen, generierte apk auf Gerät installieren
# at the root dir of project
$ gradle installDebug
2. Öffnen Sie die App auf dem Gerät
$ adb shell am start -n yourpackagename/.activityname
alias arun="./gradlew installDebug && adb shell am start -n com.example.package/.LauncherActivity"
#Läuft Schritt 2 Nur wenn Schritt 1 erfolgreich ist
Einzeiliger Satz:
Projekt erstellen & generierte apk installieren & App auf Gerät öffnen
$ ./gradlew installDebug && adb shell am start -n com.example/.activities.MainActivity
Es gibt drei Befehle, um dies zu erreichen:
./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
Dabei ist $ PACKAGE das Entwicklungspaket und $ ACTIVITY die zu startende Aktivität (die Launcher-Aktivität).
Ich habe ein Bash-Skript geschrieben, um dies zu tun , mit anderen wenigen Funktionen.
Eine flexiblere Möglichkeit ist die Verwendung von Affen:
task runDebug (type: Exec, dependsOn: 'installDebug') {
commandLine android.getAdbExe().toString(), "shell",
"monkey",
"-p", "your.package.name.debugsuffix",
"-c", "android.intent.category.LAUNCHER", "1"
}
Einige Vorteile dieser Methode:
getAdbExe
erfordert nicht, dass adb auf dem Pfad ist und verwendet die adb-Version von dem SDK, auf das in verwiesen wird local.properties
.monkey
Tool können Sie eine Startabsicht senden, sodass Sie den Namen Ihrer Aktivität nicht kennen müssen.adb shell am start your.package.name.debugsuffix\.Activity
Erstellen -> alte Version deinstallieren -> neue Version installieren -> Anwendung ausführen.
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]
Oder wenn Sie eine Anwendung im Debug-Typ installieren und ausführen möchten.
./gradlew installDebug && adb shell am start -n [application package]/.[application name]
Ich habe diese Aufgabe geschrieben, um die Anwendung auf dem Gerät installieren und auch öffnen zu können. Da ich mehrere buildTypes
und flavors
mit unterschiedlichen Anwendungs-IDs hatte, war es nicht möglich, den Paketnamen fest zu codieren. Also habe ich es stattdessen so geschrieben:
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(" ")
}
}
}
}
Dies würde Ihnen open{variant}
für jede install{variant}
Aufgabe geben, die Sie bereits haben.
gradle tasks
ist hilfreich, um die sofort einsatzbereiten Aufgaben zu sehen - einschließlich der Installation (aber nicht wie unten angegeben)