Dapatkah Anda menerapkan ke perangkat melalui Gradle dari baris perintah

89

Apa sebenarnya pertanyaan itu - dapatkah Anda mengeluarkan perintah apa pun secara langsung ke gradlew melalui baris perintah untuk membangun, mengemas, dan menerapkan ke perangkat?

Matt Whetton
sumber
1
gradle taskssangat membantu untuk melihat tugas di luar kotak - yang termasuk menginstal (tetapi tidak dimulai seperti yang dinyatakan di bawah)
Dori
Baris perintah tidak spesifik untuk IDE, yaitu cara ini akan berfungsi dari Android Studio atau IDE berbasis Eclipse
Paul Verest
gradlew installdebug di cmd - folder root harus menjadi jalur
c49

Jawaban:

97
$ gradle installDebug

Ini akan mendorong apk build debug ke perangkat, tetapi Anda harus memulai aplikasi secara manual.

rafaello
sumber
2
Seperti di bawah ini, namanya telah diubah menjadi "gradle installDefaultFlavorDebug"
durka42
2
@ durka42 Ini hanya terjadi jika Anda menggunakan rasa
Mathijs Segers
3
Saya akan mengatakan ./gradlew iD bukannya gradle iD
irudyak
1
Apakah mungkin untuk menjalankan perintah ini di dalam Gradle Plugin yang terpasang di Eclipse? Saya mendapatkan kesalahan ini: Tugas 'installDebug' tidak ditemukan di proyek root 'blahblah'.
Dr. jacky
76

Karena Anda menggunakan Gradle, Anda cukup menambahkan tugas Anda sendiri di 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'      
}

kemudian panggil di root proyek Anda

$ gradle appStart

Memperbarui:

Jika Anda menggunakan applicationIdSuffix ".debug", tambahkan .debugke appId saja tetapi biarkan aktivitas tidak tersentuh:

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

Roman K
sumber
1
Selain itu, parameter terakhir harusnya 'com.your.packagename/.path.relative.to.your.packagename.MyActivity'bukan 'com.example/.MyActivity'jika Aktivitas Anda tidak berada di root paket Anda.
Terang
66

1. Bangun proyek, instal apk yang dihasilkan ke perangkat

# at the root dir of project
$ gradle installDebug

2. Buka aplikasi di perangkat

$ adb shell am start -n yourpackagename/.activityname
rps_deepan
sumber
6
alias arun = "gradle installDebug; adb shell am start -n com.example.app/.activity.MainActivity"
Dominic Bartl
Saya tidak dapat memilih installDebug di gradle. Tidak ada tugas yang cocok. Apakah sudah diganti namanya?
Jonas Gröger
1
@ JonasGröger sepertinya telah diubah namanya menjadi installDefaultFlavorDebug
durka42
@rps_deepan Bisakah Anda mengganti nama tugas karena telah diganti namanya?
Jonas Gröger
6
alias arun="./gradlew installDebug && adb shell am start -n com.example.package/.LauncherActivity"#Jalankan langkah2 Hanya saat Langkah 1 berhasil
Thamme Gowda
7

Kalimat satu baris:

Bangun proyek & Instal apk yang dihasilkan & Buka aplikasi di perangkat

$ ./gradlew installDebug && adb shell am start -n com.example/.activities.MainActivity
João Machete
sumber
7

Ada tiga perintah untuk melakukannya:

  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, di mana $ PACKAGE adalah paket pengembangan dan $ ACTIVITY adalah aktivitas yang akan diluncurkan (aktivitas peluncur).

Saya telah menulis skrip bash untuk melakukan ini , dengan beberapa fitur lainnya.

ms2r
sumber
4

Cara yang lebih fleksibel untuk melakukannya adalah dengan menggunakan monyet:

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

Beberapa keuntungan dari metode ini:

  • getAdbExetidak memerlukan adb berada di jalur dan menggunakan versi adb dari sdk yang ditunjukkan di local.properties.
  • The monkeyalat memungkinkan Anda untuk mengirim peluncur niat, sehingga Anda tidak diharuskan untuk mengetahui nama aktivitas Anda.
0xcaff
sumber
Anda malah bisa mengeksekusiadb shell am start your.package.name.debugsuffix\.Activity
Vikram Bodicherla
Tetapi bagaimana jika Anda tidak tahu nama aktivitas Anda?
0xcaff
1
Maka Anda tidak boleh menulis file build.
kevr
3
Saya pikir itu ide yang sangat buruk untuk file build mengetahui secara eksplisit Aktivitas mana yang akan dijalankan ... sepertinya ada sesuatu yang bertentangan dengan pemisahan perhatian. Satu alasan sederhana - jika Anda mengganti nama / memindahkan file Aktivitas Anda, ini sekarang memerlukan perubahan file build. Selain itu, maksud tampak seperti api yang lebih baik untuk dijalankan daripada file - saya bisa menulis ekstensi gradle yang menambahkan maksud default dan cara untuk menjalankannya, versi itu, dan tidak perlu mengetahui nama kelas siapa pun. Pengodean keras tidak pernah menjadi jawaban yang tepat.
smaudet
1
Jawaban ini juga kekurangan cara untuk menemukan paket root - Saya juga ingin menghapus nama paketnya - misalnya menemukannya dari manifes.
smaudet
3

Bangun -> hapus instalan versi lama -> instal versi baru -> jalankan aplikasi.

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]

Atau jika Anda ingin menginstal dan menjalankan aplikasi dalam tipe debug.

./gradlew installDebug && adb shell am start -n [application package]/.[application name]
Goffity
sumber
Terima kasih. @ alexander-polomodov
Goffity
2
task appStart(type: Exec, dependsOn: 'installDebug') {
    commandLine android.adbExe, 'shell', 'am', 'start', '-n', 'com.example/.MyActivity'
}
tiupan
sumber
Solusi terbaik untuk dijalankan
Orgatres
1

Saya menulis tugas ini untuk dapat menginstal dan juga membuka aplikasi di perangkat. Karena saya memiliki banyak buildTypesdan flavorsdengan id aplikasi yang berbeda, tidak mungkin untuk membuat kode keras nama paket. Jadi saya menulisnya seperti ini:

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(" ")
            }
        }
    }
}

Ini akan memberi Anda open{variant}untuk setiap install{variant}tugas yang sudah Anda miliki.

maclir
sumber