web-dev-qa-db-ja.com

コマンドラインからGradle経由でデバイスに展開できますか

質問の本当の意味-コマンドラインを介してgradlewするコマンドを直接発行して、デバイスをビルド、パッケージ化、展開できますか?

87
Matt Whetton
$ gradle installDebug

これにより、デバッグビルドapkがデバイスにプッシュされますが、アプリケーションを手動で起動する必要があります。

95
rafaello

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"を使用している場合は、.debugappIdのみに追加しますが、アクティビティはそのままにします。

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

75
kromit

1。プロジェクトのビルド、生成されたapkのデバイスへのインストール

# at the root dir of project
$ gradle installDebug

2。デバイスでアプリを開く

$ adb Shell am start -n yourpackagename/.activityname
65
rps_deepan

一行文:

プロジェクトをビルドし、生成されたapkをインストールし、デバイスでアプリを開く

$ ./gradlew installDebug && adb Shell am start -n com.example/.activities.MainActivity
6
João Machete

これを達成するための3つのコマンドがあります。

  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スクリプト を他のいくつかの機能とともに書いています。

5
mhbrhm

より柔軟な方法は、monkeyを使用することです。

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がパス上にある必要はなく、local.propertiesで指定されたSDKのadbバージョンを使用します。
  • monkeyツールを使用すると、ランチャーのインテントを送信できるため、アクティビティの名前を知る必要はありません。
3
0xcaff
task appStart(type: Exec, dependsOn: 'installDebug') {
    commandLine Android.adbExe, 'Shell', 'am', 'start', '-n', 'com.example/.MyActivity'
}
2
hoot

このタスクは、デバイスにアプリケーションをインストールして開くこともできるように作成しました。異なるアプリケーションIDを持つ複数のbuildTypesflavorsがあったため、パッケージ名をハードコーディングすることはできませんでした。そこで、代わりに次のように書きました。

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}既に持っているタスク。

1
maclir

ビルド->古いバージョンのアンインストール->新しいバージョンのインストール->アプリケーションの実行。

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]
1
Goffity