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