Можете ли вы развернуть на устройстве через Gradle из командной строки


89

О чем вопрос на самом деле - можете ли вы вводить какие-либо команды непосредственно в gradlew через командную строку для сборки, упаковки и развертывания на устройстве?


1
gradle tasksполезно увидеть готовые задачи, которые включают установку (но не запуск, как указано ниже)
— Дори

Командная строка не привязана к IDE, т.е. такой способ будет работать в Android Studio или IDE на основе Eclipse
— Пол Верест,

gradlew installdebug в cmd - в корневой папке должен быть путь
— c49

Ответы:


97
$ gradle installDebug

Это отправит apk сборки отладки на устройство, но вам придется вручную запустить приложение.


2
Как показано ниже, он был переименован в «gradle installDefaultFlavorDebug»
— durka42

2
@ durka42 Это только в том случае, если вы используете ароматизаторы
— Mathijs Segers

3
Я бы сказал ./gradlew iD вместо gradle iD
— irudyak

1
Возможно ли запустить эту команду внутри установленного плагина Gradle на Eclipse? Я получаю эту ошибку: Задача installDebug не найдена в корневом проекте blahblah.
— Доктор Джеки

76

Поскольку вы используете Gradle, вы можете просто добавить свою задачу в 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'      
}

затем назовите его в корне вашего проекта

$ gradle appStart

Обновить:

Если вы используете applicationIdSuffix ".debug", добавьте только .debugк appId, но оставьте действие нетронутым:

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


1
Кроме того, последний параметр должен быть 'com.your.packagename/.path.relative.to.your.packagename.MyActivity'вместо того, 'com.example/.MyActivity'если ваша активность не находится в корне вашего пакета.
— Light,

66

1. Соберите проект, установите сгенерированный apk на устройство.

# at the root dir of project
$ gradle installDebug

2. Откройте приложение на устройстве.

$ adb shell am start -n yourpackagename/.activityname

6
alias arun = "gradle installDebug; adb shell am start -n com.example.app/.activity.MainActivity"
— Доминик Бартл

Я не могу выбрать installDebug в Gradle. Нет подходящей задачи. Его переименовали?
— Йонас Грёгер,

1
@ JonasGröger, похоже, он был переименован в installDefaultFlavorDebug
— durka42

@rps_deepan Не могли бы вы переименовать задачу, потому что она была переименована?
— Йонас Грёгер

6
alias arun="./gradlew installDebug && adb shell am start -n com.example.package/.LauncherActivity"#Runs step2 Только когда Шаг 1 успешен
— Тамме Гауда

7

Однострочное предложение:

Создать проект и установить созданный apk и открыть приложение на устройстве

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

7

Для этого есть три команды:

  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, где $ PACKAGE - это пакет разработки, а $ ACTIVITY - это действие, которое нужно запустить (действие средства запуска).

Для этого я написал сценарий bash с некоторыми другими функциями.


4

Более гибкий способ сделать это - использовать обезьяну:

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

Некоторые преимущества этого метода:

  • getAdbExeне требует наличия adb на пути и использует версию adb из sdk, на который указывает in local.properties.
  • monkeyИнструмент позволяет отправить пусковое намерение, так что вы не должны знать название вашей деятельности.

Вместо этого вы могли бы казнитьadb shell am start your.package.name.debugsuffix\.Activity
— Викрам Бодичерла

Но что, если вы не знаете названия своей деятельности?
— 0xcaff

1
Тогда вам не следует писать файл сборки.
— kevr 01

3
Я думаю, что это действительно плохая идея, чтобы файл сборки явно знал, какое действие запускать ... похоже, что-то противоречит разделению проблем. Одна простая причина - если вы переименуете / переместите файл Activity, теперь потребуется изменение файла сборки. Вдобавок, намерения кажутся лучшим API для работы, чем файл - я мог бы написать расширение gradle, которое добавляет намерения по умолчанию и способы их запуска, версии и никогда не нужно знать чьи-либо имена классов. Жесткое кодирование никогда не является правильным ответом.
— smaudet

1
В этом ответе также отсутствует способ найти корневой пакет - я бы тоже хотел избавиться от имени пакета - например, вместо этого найти его из манифеста.
— smaudet

3

Сборка -> удалить старую версию -> установить новую версию -> запустить приложение.

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]

Или, если вы хотите установить и запустить приложение в режиме отладки.

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

Спасибо. @ alexander-polomodov
— Гоффити

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

Лучшее решение пробега
— Orgatres

1

Я написал эту задачу, чтобы иметь возможность установить, а также открыть приложение на устройстве. Так как у меня было несколько buildTypesи flavorsс различными идентификаторами приложений, не было возможности жестко закодировать имя пакета. Поэтому я написал это так:

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

Это даст вам open{variant}все, что у install{variant}вас уже есть.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.