2013-06-26 3 views
77

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

+0

'Gradle tasks' полезно, чтобы увидеть из ряда задач коробки - которая включает в себя установку (но не начиная, как указано ниже) – Dori

+0

Командную строку не IDE конкретно, .i.e. этот способ будет работать с Android Studio или Eclipse IDE –

ответ

82
$ gradle installDebug 

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

+2

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

+1

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

+2

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

63

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" –

+0

Я не могу выбрать installDebug в gradle. Нет подходящей задачи. Был ли он переименован? –

+1

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

70

Поскольку вы используете 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

Update:

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

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

+1

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

+0

Как запустить модульный тест? – ssk

6

Одна линия предложение:

Построить проект & Установка генерироваться АПК & Открыть приложение на устройстве

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

Есть три команды, чтобы выполнить эту задачу:

  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 script to do this с другими функциями.

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

Лучшее решение для запуска – Orgatres

3

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

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 позволяет вам отправить намерение запуска, поэтому вам не требуется знать имя вашей деятельности.
+0

Вместо этого вы можете выполнить 'adb shell am start your.package.name.debugsuffix \ .Activity' –

+0

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

+1

Тогда вы не должны писать файл сборки. – kevr

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} задачи у вас уже есть.