Co naprawdę mówi to pytanie - czy możesz wydać jakiekolwiek polecenia bezpośrednio do gradlew za pomocą wiersza poleceń, aby zbudować, spakować i wdrożyć na urządzeniu?
android
gradle
android-studio
gradlew
Matt Whetton
źródło
źródło
gradle tasks
pomocne jest zobaczenie gotowych zadań - w tym instalacji (ale nie uruchamiania, jak podano poniżej)Odpowiedzi:
Spowoduje to przeniesienie pakietu apk kompilacji do debugowania na urządzenie, ale musisz ręcznie uruchomić aplikację.
źródło
Ponieważ używasz Gradle, możesz w prosty sposób dodać własne zadanie w pliku 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' }
następnie wywołaj go w katalogu głównym projektu
$ gradle appStart
Aktualizacja:
Jeśli używasz
applicationIdSuffix ".debug"
, dodaj tylko.debug
do appId, ale pozostaw aktywność nietkniętą:'com.example.debug/com.example.MyActivity'
źródło
'com.your.packagename/.path.relative.to.your.packagename.MyActivity'
zamiast,'com.example/.MyActivity'
jeśli Twoja aktywność nie znajduje się w katalogu głównym pakietu.1. Zbuduj projekt, zainstaluj wygenerowany apk na urządzeniu
# at the root dir of project $ gradle installDebug
2. Otwórz aplikację na urządzeniu
źródło
alias arun="./gradlew installDebug && adb shell am start -n com.example.package/.LauncherActivity"
# Uruchamia krok 2 Tylko wtedy, gdy krok 1 zakończy się sukcesemJedno zdanie liniowe:
Zbuduj projekt i zainstaluj wygenerowany apk i otwórz aplikację na urządzeniu
$ ./gradlew installDebug && adb shell am start -n com.example/.activities.MainActivity
źródło
Aby to osiągnąć, są trzy polecenia:
./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
, gdzie $ PACKAGE to pakiet programistyczny, a $ ACTIVITY to działanie, które ma zostać uruchomione (działanie programu uruchamiającego).W tym celu pisałem skrypt basha z kilkoma innymi funkcjami.
źródło
Bardziej elastycznym sposobem jest użycie monkey:
task runDebug (type: Exec, dependsOn: 'installDebug') { commandLine android.getAdbExe().toString(), "shell", "monkey", "-p", "your.package.name.debugsuffix", "-c", "android.intent.category.LAUNCHER", "1" }
Niektóre zalety tej metody:
getAdbExe
nie wymaga adb na ścieżce i używa wersji adb z sdk wskazanego wlocal.properties
.monkey
Narzędzie pozwala na wysyłanie wyrzutnię intencji, więc nie trzeba znać nazwę swojej działalności.źródło
adb shell am start your.package.name.debugsuffix\.Activity
Kompiluj -> odinstaluj starą wersję -> zainstaluj nową wersję -> uruchom aplikację.
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]
Lub jeśli chcesz zainstalować i uruchomić aplikację w trybie debugowania.
./gradlew installDebug && adb shell am start -n [application package]/.[application name]
źródło
task appStart(type: Exec, dependsOn: 'installDebug') { commandLine android.adbExe, 'shell', 'am', 'start', '-n', 'com.example/.MyActivity' }
źródło
Napisałem to zadanie, aby móc zainstalować, a także otworzyć aplikację na urządzeniu. Ponieważ miałem wiele
buildTypes
iflavors
różne identyfikatory aplikacji, nie można było na stałe zakodować nazwy pakietu. Więc zamiast tego napisałem to tak: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(" ") } } } }
To dałoby ci
open{variant}
za każdeinstall{variant}
zadanie, które już masz.źródło