Komut satırından Gradle aracılığıyla bir cihaza dağıtabilir misiniz?


89

Soru gerçekten ne diyor - bir cihazı oluşturmak, paketlemek ve bir cihaza dağıtmak için komut satırı aracılığıyla doğrudan gradlew'e herhangi bir komut verebilir misiniz?


1
gradle tasksyüklemeyi içeren (ancak aşağıda belirtildiği gibi başlatılmayan) kutudan çıktığı görevleri görmeye yardımcı olur
— Dori

Komut satırı IDE'ye özel değildir, .ie bu şekilde Android Studio veya Eclipse tabanlı IDE'den çalışır
— Paul Verest

cmd'de gradlew installdebug - kök klasör yol olmalıdır
— c49

Yanıtlar:


98
$ gradle installDebug

Bu, hata ayıklama derleme apk'sini cihaza gönderir, ancak uygulamayı manuel olarak başlatmanız gerekir.


2
Aşağıdaki gibi, adı "gradle installDefaultFlavorDebug" olarak yeniden adlandırıldı
— durka42

2
@ durka42 Bu sadece tat kullanırsanız geçerlidir
— Mathijs Segers

3
Gradle iD yerine ./gradlew iD derdim
— irudyak

1
Bu komutu Eclipse'de kurulu Gradle Eklentisi içinde çalıştırmak mümkün mü? Bu hatayı alıyorum: 'blahblah' kök projesinde 'installDebug' görevi bulunamadı.
— Dr.jacky

76

Gradle kullandığınız için build.gradle'a kendi görevinizi kolayca ekleyebilirsiniz.

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'      
}

sonra onu proje kök dizininde çağır

$ gradle appStart

Güncelleme:

Eğer kullanıyorsanız applicationIdSuffix ".debug", sadece appId'e ekleyin .debug, ancak aktiviteye dokunmadan bırakın:

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


1
Ayrıca, Aktiviteniz paketinizin kökünde değilse , son parametre 'com.your.packagename/.path.relative.to.your.packagename.MyActivity'yerine olmalıdır 'com.example/.MyActivity'.
— Light

66

1. Proje oluşturun, oluşturulan apk'yi cihaza yükleyin

# at the root dir of project
$ gradle installDebug

2. Cihazda uygulamayı açın

$ adb shell am start -n yourpackagename/.activityname

6
alias arun = "gradle installDebug; adb shell am start -n com.example.app/.activity.MainActivity"
— Dominic

Gradle'da installDebug'ı seçemiyorum. Uygun bir görev yok. Yeniden adlandırıldı mı?
— Jonas Gröger

1
@ JonasGröger yüklemek için yeniden adlandırılmış görünüyorDefaultFlavorDebug
— durka42

@rps_deepan Görevi yeniden adlandırıldığı için yeniden adlandırabilir misiniz?
— Jonas Gröger

6
alias arun="./gradlew installDebug && adb shell am start -n com.example.package/.LauncherActivity"#Runs step2 Yalnızca Adım 1 başarılı olduğunda
— Thamme Gowda

7

Bir satır cümle:

Proje oluştur ve oluşturulan apk'yi yükle ve uygulamayı cihaza aç

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

7

Bunu başarmak için üç komut vardır:

  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, burada $ PACKAGE geliştirme paketi ve $ ACTIVITY başlatılacak etkinliktir (başlatıcı etkinliği).

Bunu yapmak için diğer birkaç özellikle birlikte bir bash betiği yazıyorum .


4

Bunu yapmanın daha esnek bir yolu maymun kullanmaktır:

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

Bu yöntemin bazı avantajları:

  • getAdbExeadb'nin yolda olmasını gerektirmez ve sdk'nin işaret ettiği adb sürümünü kullanır local.properties.
  • monkeyAraç, etkinliğin adını bilmek gerekmez böylece, niyet bir başlatıcısı göndermesini sağlar.

Bunun yerine infaz edebilirsinizadb shell am start your.package.name.debugsuffix\.Activity
— Vikram Bodicherla

Peki ya faaliyetinizin adını bilmiyorsanız?
— 0xcaff

1
O zaman yapı dosyasını yazmamalısın.
— kevr

3
Bence derleme dosyası için hangi Aktivitenin çalıştırılacağını açıkça bilmesi gerçekten kötü bir fikir ... kaygıların ayrılığına karşı bir şey gibi görünüyor. Basit bir sebep - Activity dosyanızı yeniden adlandırır / taşırsanız, bu artık bir derleme dosyası değişikliği gerektirir. Ek olarak, niyetler bir dosyaya karşı çalışmak için daha iyi bir api gibi görünüyor - varsayılan amaçları ve bunları çalıştırmanın yollarını ekleyen, sürümlerini ekleyen ve kimsenin sınıf adlarını bilmeye gerek duymayan bir gradle uzantısı yazabilirim. Sert kodlama asla doğru cevap değildir.
— smaudet

1
Bu cevap aynı zamanda kök paketi bulmanın bir yolunu da içermiyor - paket isminden de kurtulmak istiyorum - örneğin, bunun yerine manifest'ten keşfedin.
— smaudet

3

Oluştur -> eski sürümü kaldır -> yeni sürümü yükle -> uygulamayı çalıştır.

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]

Veya uygulamayı hata ayıklama türünde yüklemek ve çalıştırmak istiyorsanız.

./gradlew installDebug && adb shell am start -n [application package]/.[application name]

Teşekkürler. @ alexander-polomodov
— Goffity

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


1

Bu görevi, uygulamayı cihaza yükleyebilmek ve ayrıca açabilmek için yazdım. Birden çok buildTypesve flavorsfarklı uygulama kimliklerine sahip olduğum için paket adını sabit kodlamak mümkün değildi. Ben de onun yerine şöyle yazdım:

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

Bu, sahip olduğunuz open{variant}her install{variant}görev için size verecektir .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.