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


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

9 82

9 ответов:

$ gradle installDebug

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

так как вы используете Gradle, вы можете просто добавить свои собственные задачи построить.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. Построить проект, установить сгенерированный apk на устройство

# at the root dir of project
$ gradle installDebug

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

$ adb shell am start -n yourpackagename/.activityname

одна строка предложения:

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

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

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

  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-скрипт для этого, С другими немногими особенностями.

более гибкий способ сделать это с помощью обезьяны:

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.
  • The monkey инструмент позволяет отправить намерение запуска, так что вы не обязаны знать имя вашей деятельности.
task appStart(type: Exec, dependsOn: 'installDebug') {
    commandLine android.adbExe, 'shell', 'am', 'start', '-n', 'com.example/.MyActivity'
}

я написал эту задачу, чтобы иметь возможность установить, а также открыть приложение на устройстве. Так как у меня было несколько 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} задач у вас уже есть.

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

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]