Czy możesz wdrożyć na urządzeniu za pomocą Gradle z wiersza poleceń


89

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?


1
gradle taskspomocne jest zobaczenie gotowych zadań - w tym instalacji (ale nie uruchamiania, jak podano poniżej)
— Dori

Linia poleceń nie jest specyficzna dla IDE, .ie w ten sposób działałoby z Android Studio lub IDE opartym na Eclipse
— Paul Verest,

gradlew installdebug w cmd - katalog główny powinien być ścieżką
— c49

Odpowiedzi:


97
$ gradle installDebug

Spowoduje to przeniesienie pakietu apk kompilacji do debugowania na urządzenie, ale musisz ręcznie uruchomić aplikację.


2
Jak poniżej, jego nazwa została zmieniona na „gradle installDefaultFlavorDebug”
— durka42

2
@ durka42 Dzieje się tak tylko wtedy, gdy używasz smaków
— Mathijs Segers

3
Powiedziałbym ./gradlew iD zamiast gradle iD
— irudyak

1
Czy można uruchomić to polecenie w zainstalowanej wtyczce Gradle na Eclipse? Pojawia się ten błąd: nie znaleziono zadania „installDebug” w projekcie głównym „blahblah”.
— Dr Jacky

76

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 .debugdo appId, ale pozostaw aktywność nietkniętą:

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


1
Ponadto ostatni parametr powinien znajdować się '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.
— Światło

66

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

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

Nie mogę wybrać installDebug w gradle. Nie ma odpowiedniego zadania. Czy została zmieniona?
— Jonas Gröger

1
@ JonasGröger, wydaje się, że została zmieniona na installDefaultFlavorDebug
— durka42

@rps_deepan Czy możesz zmienić nazwę zadania, ponieważ została ona zmieniona?
— Jonas Gröger

6
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
— Thamme Gowda

7

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

7

Aby to osiągnąć, są trzy polecenia:

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


4

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:

  • getAdbExenie wymaga adb na ścieżce i używa wersji adb z sdk wskazanego w local.properties.
  • monkeyNarzędzie pozwala na wysyłanie wyrzutnię intencji, więc nie trzeba znać nazwę swojej działalności.

Mógłbyś zamiast tego wykonaćadb shell am start your.package.name.debugsuffix\.Activity
— Vikram Bodicherla

Ale co, jeśli nie znasz nazwy swojej działalności?
— 0xcaff

1
Wtedy nie powinieneś pisać pliku kompilacji.
— kevr

3
Myślę, że to naprawdę zły pomysł, ponieważ plik kompilacji wyraźnie wie, które działanie ma zostać uruchomione ... wydaje się, że oddzielenie obaw jest sprzeczne. Z jednego prostego powodu - jeśli zmienisz nazwę / przeniesiesz plik Activity, wymaga to teraz zmiany pliku kompilacji. Ponadto intencje wydają się być lepszym interfejsem API niż plik - mógłbym napisać rozszerzenie gradle, które dodaje domyślne intencje i sposoby ich uruchamiania, nadaje mu wersję i nigdy nie potrzebowałbym znać niczyich nazw klas. Twarde kodowanie nigdy nie jest właściwą odpowiedzią.
— smaudet

1
W tej odpowiedzi brakuje również sposobu na znalezienie pakietu głównego - chciałbym też pozbyć się nazwy pakietu - np. Zamiast tego znaleźć ją w manifeście.
— smaudet

3

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]

Dzięki. @ alexander-polomodov
— Goffity

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

Najlepsze rozwiązanie run
— Orgatres

1

Napisałem to zadanie, aby móc zainstalować, a także otworzyć aplikację na urządzeniu. Ponieważ miałem wiele buildTypesi flavorsróż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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.