2016-03-25 13 views
4

Çalıştığım CI üzerinde oluşturma işlemini otomatikleştirmeye çalışıyorum. curl'u arayabilir ve sürüm kodu ve adları gibi bazı değişkenleri atayabilirim. Sonra CI (benim durumumda Bitrise CI) onu yakaladı ve Release build'i başlattı. Ancak, bundan önce curl tarafından build.gradle dosyasına aktarılanlara dayanarak sürüm kodunu ve sürüm adını ayarlamak istiyorum ve ardından işlem başlatılıyor.Android sürüm kodunu ve adını bir Gradle görevi ile ayarlamak mümkün mü?

Yani, bir komut satırından sürüm kodunu/adını alan bir eklenti/görev yazabilirim ve sonra build.gradle dosyasına enjekte edebilirim. ./gradlew setVersion 1 1.0 gibi bir komut.

Üçüncüsü, bu komutu yazacağım bir komut dosyasından çalıştırarak, bu sıralı görevini çalıştırabileceğim ve dünyanın herhangi bir yerinden herkesin curl tarafından bir sürüm oluşturması mümkün olabiliyor. Oldukça ilginçtir :)

Aşağıdaki kodla benzer bir görevi ana sayfama yazabilirim build.gradle.

task setVersion << { 
    println versionCode 
    println versionName 
} 

ve ona komut satırı aracılığıyla bazı parametrelerini geçirmek:

./gradlew -PversionCode=483 -PversionName=v4.0.3 setVersion 

Bu benim çıktısı: Şimdiye kadar

:setVersion 
483 
v4.0.3 

BUILD SUCCESSFUL 

Total time: 6.346 secs 

çok iyi. Sorum, build.gradle dosyasında nasıl ayarlanır? teşekkürler

+0

@ brwngrldev'in cevabını yorumladığım gibi, Android Build sistemini Otomatikleştirme konusunda bir yazı yazdım. Eğer ilgileniyorsanız lütfen bu makaleye bir göz atın. Cevabınız için teşekkürler: https://medium.com/@hesam.kamalan/how-to-automate-android-build-process-on-bitrise-ci-part-2-b3f8124c29ee#.dnia5gg6t – Hesam

cevap

7
komut satırından versionCode ve versionName güncellemek için yöntemler oluşturabilir

:

def getMyVersionCode = { -> 
    def code = project.hasProperty('versionCode') ? versionCode.toInteger() : -1 
    println "VersionCode is set to $code" 
    return code 
} 

def getMyVersionName = { -> 
    def name = project.hasProperty('versionName') ? versionName : "1.0" 
    println "VersionName is set to $name" 
    return name 
} 

Ardından android bloğunda:

defaultConfig { 
     applicationId "your.app.id" 
     minSdkVersion 15 
     targetSdkVersion 23 
     versionCode getMyVersionCode() 
     versionName getMyVersionName() 

     archivesBaseName = "YourApp-${android.defaultConfig.versionName}" 
    } 

Sonra sadece gerçekten herhangi bir görevi çağırabilirsiniz:

./gradlew assembleDebug -PversionCode=483 -PversionName=4.0.3 

burada bu konuda daha fazla bilgi: https://robertomurray.co.uk/blog/2013/gradle-android-inject-version-code-from-command-line-parameter/

+0

Teşekkürler. Benim tek sorun - benim düşünceme göre :) - her gradle görevleri için sürüm kodu ve adını geçmek zorundayım, özellikle de AssebbleDebug. Diğer geliştiricilerin şikayet ettiğine inanıyorum :) Sürüm koduna ve el değerine sahip olmayı tercih ediyorum ancak bu yöntemler sürüm kodu ve adını varsayılan Config bloğuna enjekte ediyor. Hala mümkün mü? Teşekkürler – Hesam

+1

Bu tekniği deneyebilirsiniz, ancak istediklerinden biraz daha karmaşık: http://www.jayway.com/2015/03/11/automatic-versioncode-generation-in-android-gradle/ – brwngrldev

+0

Uyguladım otomasyonum #brwngrldev önerisine dayanıyor. Bu makaleyi okudum ama davam için yararlı bulmadı. Onun önerisinin avantajı, komutu komut dosyasına koyabildiğim ve kolayca çalıştırabildiğim gerçeğidir. Diğer programcılar için daha sonra belgeleyeceğim. Tekrar teşekkürler. – Hesam

İlgili konular