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


89

質問は本当に何を言っています-コマンドラインを介して直接gradlewにコマンドを発行して、デバイスにビルド、パッケージ化、デプロイできますか?


1
gradle tasksすぐに使えるタスクを確認するのに役立ちます-これにはインストールが含まれます(ただし、下記のように開始されません)
Dori

コマンドラインはIDE固有ではありません。つまり、この方法はAndroid StudioまたはEclipseベースのIDEから機能します
Paul Verest 14

gradlew installdebugにcmd -ルートフォルダをパスする必要があります
C49

回答:


97
$ gradle installDebug

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


2
以下のように、「
gradle

2
@ durka42これは、フレーバーを使用する場合にのみ当てはまります
Mathijs Segers

3
私はgradle iDの代わりに./gradlew iDと言います
irudyak '18

1
EclipseにインストールされているGradleプラグイン内でこのコマンドを実行することは可能ですか?次のエラーが表示されます。タスク「installDebug」がルートプロジェクト「blahblah」に見つかりません。
Dr.jacky 2016年

75

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

更新:

を使用している場合は、appIdにのみapplicationIdSuffix ".debug"追加.debugし、アクティビティはそのままにします。

'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 shell am start -n com.example.app/.activity.MainActivity"
Dominic Bartl

GradleでinstallDebugを選択できません。適切なタスクはありません。名前は変更されましたか?
JonasGröger2013年

1
@JonasGrögerはinstallDefaultFlavorDebugに名前が変更されたようです
durka42

@rps_deepan名前が変更されたため、タスクの名前を変更できますか?
JonasGröger2013

6
alias arun="./gradlew installDebug && adb shell am start -n com.example.package/.LauncherActivity"#ステップ2を実行するステップ1が成功した場合のみ
Thamme Gowda '

7

1行の文:

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

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

7

これを行うには、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スクリプトを書いています。


4

それを行うためのより柔軟な方法は、サルを使用することです:

task runDebug (type: Exec, dependsOn: 'installDebug') {
    commandLine android.getAdbExe().toString(), "shell",
        "monkey",
        "-p", "your.package.name.debugsuffix",
        "-c", "android.intent.category.LAUNCHER", "1"
}

この方法のいくつかの利点:

  • getAdbExeadbがパス上にある必要はなく、でポイントされているSDKのadbバージョンを使用しlocal.propertiesます。
  • このmonkeyツールを使用すると、ランチャーインテントを送信できるため、アクティビティの名前を知っている必要はありません。

代わりに実行できますadb shell am start your.package.name.debugsuffix\.Activity
Vikram Bodicherla

しかし、アクティビティの名前がわからない場合はどうなりますか?
0xcaff 2016

1
その後、ビルドファイルを書き込む必要はありません。
kevr

3
ビルドファイルにとっては本当に悪いアイデアだと思います。実行するアクティビティを明示的に知っていると思います...懸念の分離が何かに反対しているようです。単純な理由の1つ-アクティビティファイルの名前を変更/移動すると、ビルドファイルの変更が必要になります。さらに、インテントはファイルよりも実行するのに優れたAPIのように見えます。デフォルトのインテントとその実行方法を追加するGradle拡張機能を記述して、バージョン管理し、誰のクラス名も知る必要はありません。ハードコーディングは正しい答えにはなりません。
smaudet 2017年

1
この回答には、ルートパッケージを見つける方法もありません。たとえば、パッケージ名も削除したいのです。たとえば、代わりにマニフェストから検出します。
smaudet 2017年

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

このタスクは、デバイスにアプリケーションをインストールして開くこともできるように作成しました。私は複数持っていたのでbuildTypesflavors異なるアプリケーションIDと、それは、パッケージ名をハードコードすることは不可能でした。だから私は代わりにこのように書いた:

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}タスクのためにあなたを与えるでしょう。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.