Чи можете ви розгорнути на пристрої через 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'.
Dr.jacky

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'якщо ваша активність відсутня у кореневій частині вашого пакету.
Світло

66

1. Створіть проект, встановіть згенерований apk на пристрій

# at the root dir of project
$ gradle installDebug

2. Відкрийте програму на пристрої

$ adb shell am start -n yourpackagename/.activityname

6
псевдонім arun = "gradle installDebug; оболонка adb am start -n com.example.app/.activity.MainActivity"
Домінік Бартл

Я не можу вибрати installDebug у gradle. Відповідного завдання немає. Чи було його перейменовано?
Jonas Gröger

1
@ JonasGröger, схоже, було перейменовано на installDefaultFlavorDebug
durka42

@rps_deepan Чи можете ви перейменувати завдання, оскільки вона була перейменована?
Jonas Gröger

6
alias arun="./gradlew installDebug && adb shell am start -n com.example.package/.LauncherActivity"# Запускає step2 Тільки тоді, коли Крок 1 є успішним
Thamme Gowda

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, вказаного в local.properties.
  • monkeyІнструмент дозволяє відправити пусковий намір, так що ви не повинні знати назву вашої діяльності.

Ви можете замість цього стратитиadb shell am start your.package.name.debugsuffix\.Activity
Вікрам Бодічерла

Але що, якщо ви не знаєте назви своєї діяльності?
0xcaff

1
Тоді вам не слід писати файл збірки.
kevr

3
Я думаю, що це дійсно погана ідея для файлу збірки чітко знати, яку активність запускати ... здається, щось поділ проблем суперечить. Одна проста причина - якщо ви перейменовуєте / переміщуєте файл активності, це тепер вимагає зміни файлу збірки. Крім того, наміри здаються кращим 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
Goffity

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.