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.