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?
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?
Odpowiedzi:
$ gradle installDebug
Spowoduje to przeniesienie pakietu apk kompilacji do debugowania na urządzenie, ale musisz ręcznie uruchomić aplikację.
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'
'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
$ adb shell am start -n yourpackagename/.activityname
alias arun="./gradlew installDebug && adb shell am start -n com.example.package/.LauncherActivity"
# Uruchamia krok 2 Tylko wtedy, gdy krok 1 zakończy się sukcesem
Jedno 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
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.
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 w local.properties
.monkey
Narzędzie pozwala na wysyłanie wyrzutnię intencji, więc nie trzeba znać nazwę swojej działalności.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]
Napisałem to zadanie, aby móc zainstalować, a także otworzyć aplikację na urządzeniu. Ponieważ miałem wiele buildTypes
i flavors
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żde install{variant}
zadanie, które już masz.
gradle tasks
pomocne jest zobaczenie gotowych zadań - w tym instalacji (ale nie uruchamiania, jak podano poniżej)