Gradle derlemesine genel bakış

Android uygulamaları genellikle Gradle derlemesi kullanılarak oluşturulur bahsedeceğim. Derlemenizi yapılandırmanın ayrıntılarına geçmeden önce, sistemi bir bütün olarak görebilmek için derlemenin arkasındaki kavramları keşfedin.

Derleme nedir?

Derleme sistemi, kaynak kodunuzu yürütülebilir bir uygulamaya dönüştürür. Derlemeler genellikle kendi verilerinizi analiz etmek, derlemek, bağlamak ve paketlemek için kitaplığını kullanabilirsiniz. Gradle, projeleri organize etmek ve yürütmek için görev temelli emin olun.

Görevler, girişlerini çeviren komutları içerir çıktı. Eklentiler, görevleri ve yapılandırmalarını tanımlar. Uygulanıyor derlemenize eklenen bir eklenti, görevlerini kaydeder ve giriş ve çıkışları vardır. Örneğin, Android Gradle Eklentisi'ni (AGP) uygularken eklemeniz bir APK derlemek için gerekli tüm görevleri veya Android Kitaplığı. java-library eklentisi, Java kaynağından jar dosyası derlemenize olanak tanır girin. Kotlin ve diğer diller için benzer eklentiler vardır, ancak diğer eklentiler eklentileri genişletmeyi amaçlar. Örneğin, protobuf eklentisi, AGP veya java-library gibi mevcut eklentiler için protobuf desteği.

Gradle, yapılandırma yerine kuralları tercih ettiği için eklentiler iyi ayarlarla varsayılan değerleri kullanın, ancak derlemeyi bildirim temelli Alana Özgü Dil (DSL). DSL, nasıl oluşturulacağını değil, ne oluşturulacağınızı belirtebilirsiniz. Mantık eklentiler "nasıl" ifadesini yönetir. Bu yapılandırma, birden fazla projenizde (ve alt projelerinizde) dosyalar derleyin.

Görev girişleri, dosya ve dizin olabileceği gibi Java türleri (tam sayı, dizeler veya özel sınıflar). Çıkışlar yalnızca dizin olabilir veya dosyaları diske yazılmaları gerekir. Bir görev çıkışını başka bir görevleri birbirlerine bağlar ve bunlardan birinin diğerinden önce çalışması gerekir.

Gradle, derlemenizde rastgele kod ve görev bildirimleri yazmayı destekler. bu durum, araçların derleme ve derleme işlemlerini anlamasını zorlaştırabilir, . Örneğin, eklentilerin içindeki kod için testler yazabilirsiniz. ancak derleme dosyalarında yoktur. Bunun yerine, derleme mantığını ve görevi beyanlar (sizin veya bir başkasının tanımladığı) ve değişiklikleri nasıl derleme dosyalarınızda da kullanmak isteyebilirsiniz.

Gradle derlemesi çalıştığında ne olur?

Gradle derlemeleri üç aşamada çalışır. Bu aşamaların her biri farklı bölümleri yürütür kodundan yararlanırsınız.

  • Başlatma, hangi projelerin ve alt projelerin derlemenizi sağlar ve derleme dosyalarınızı içeren sınıf yolları oluşturur ve ekleyebilirsiniz. Bu aşama, projeleri tanımladığınız bir ayar dosyasına odaklanır eklentilerin ve kitaplıkların alınacağı konumları belirler.
  • Yapılandırma, her projeye ait görevleri kaydeder ve derlemeyi yürütür dosyasını kullanın. İş yerindeki herhangi bir değişimden oluşturduğunuz verilere veya dosyalara bazı işaretler bulabilirsiniz.
  • Yürütme, gerçek "oluşturma" işlemini gerçekleştirir en iyi yoludur. Çıkış bir Yönlü Döngüsel Graf (DAG) olup bu ( görevleri komut satırında veya derleme dosyalarında varsayılan olarak bulunur). Bu görevler arasındaki ilişkiyi temsil eder; bu, bir görevin veya giriş ve çıkışlarına göre yapılır. Bir görevde başka bir görevin çıkışıysa diğer görevden sonra çalışması gerekir. Bu aşamadaki güncel olmayan görevler grafikte belirtilen sırayla yürütülür; projenin giriş son yürütmesinden bu yana değişmediyse Gradle, bu adımı atlar.

Daha fazla bilgi için Gradle Derleme yaşam döngüsü bölümünü inceleyin.

Yapılandırma DSL'leri

Gradle, yapılandırma işlemi için Alana Özgü Dil (DSL) kullanır inşa eder. Bu bildirime dayalı yaklaşımda, adım adım (zorunlu) talimatlar yazmak.

DSL'ler, alan uzmanları ve programcılar dahil herkes için verileri temsil eden küçük bir dil tanımlayarak çok daha doğal bir şekilde. Gradle eklentileri, DSL'yi genişleterek gerektiğini bileceksiniz.

Örneğin, derlemenizin Android bölümünü yapılandırmak aşağıdaki gibi görünebilir:

Kotlin

android {
    namespace = "com.example.app"
    compileSdk = 34
    // ...

    defaultConfig {
        applicationId = "com.example.app"
        minSdk = 34
        // ...
    }
}

Eski

android {
    namespace 'com.example.myapplication'
    compileSdk 34
    // ...

    defaultConfig {
        applicationId "com.example.myapplication"
        minSdk 24
        // ...
    }
}

Perde arkasında, DSL kodu şuna benzer:

fun Project.android(configure: ApplicationExtension.() -> Unit) {
    ...
}

interface ApplicationExtension {
    var compileSdk: Int
    var namespace: String?

    val defaultConfig: DefaultConfig

    fun defaultConfig(configure: DefaultConfig.() -> Unit) {
        ...
    }
}

DSL'deki her blok, bir lambda'yı ve buna erişmek için aynı ada sahip bir mülk yapılandırmalısınız. Bu da derleme dosyalarındaki koda daha çok bir veri spesifikasyonu gibi gelir.

Dış bağımlılıklar

Maven derleme sistemi bir bağımlılık spesifikasyonu tanıttı. depolama ve yönetim sistemi. Kitaplıkların depolandığı yer depolar (sunucular veya dizinler), ve diğer kitaplıklardaki bağımlılıklarını öğreteceğim. Kullanıcı hikayesinin depoları, kullanmak istediğiniz bağımlılıkların sürümlerini ve bunları derleme işlemi sırasında indirir.

Maven yapıları, grup adı (ör. şirket, geliştirici) ve yapıya göre tanımlanır. bu yapının adı (kitaplığın adı) ve sürümü görüntülenir. Bu genelde group:artifact:version olarak gösterilir.

Bu yaklaşım, derleme yönetimini önemli ölçüde iyileştirir. Genellikle bu belgenin adı verilen "Maven depoları"dır, ancak burada her şey yapılar paketlenir ve yayınlanır. Bu depoları ve meta verileri Gradle dahil çeşitli derleme sistemlerinde yeniden kullanıldı (Gradle . Herkese açık depolar, herkesin kullanımına açık olarak paylaşılır ve iç bağımlılıkları şirket içinde tutar.

Ayrıca projenizi alt projelere modüler hale getirebilirsiniz. (Android Studio'da "modüller" olarak da bilinir) ve bildirmeyi konuştuk. Her alt proje, kavanoz gibi, tükettiğini düşünelim. Bu, derleme süresini iyileştirebilir hangi parçaların yeniden oluşturulması gerektiğini ayırır ve bu parçaların hakkında daha fazla bilgi edindiniz.

Derleme ekle bölümünde bağımlılıkların nasıl belirtileceğine bağımlılıklarını görebilirsiniz.

Derleme varyantları

Bir Android uygulaması oluştururken genellikle varyantları. Varyantlar farklı kod içerir veya farklı şekilde oluşturulur seçenekleri vardır ve yapı türleri ile ürün aromalarından oluşur.

Derleme türleri bildirilen derleme seçeneklerini değiştirebilir. AGP, varsayılan olarak "yayın" ve "debug" gibi ancak bunları ayarlayabilir ve daha fazla (örneğin, hazırlık veya dahili test).

Hata ayıklama derlemesi, uygulamanızı küçültmez veya gizlemez, olduğu gibi inşa edip korumaktır. Ayrıca, uygulama genel bir hata ayıklama anahtarıyla imzalayarak ve yüklü uygulama dosyalarından oluşur. Bu sayede ekip üyelerinizle dosyalar ve veritabanlarına kaydedilen verileri içerebilir.

Sürüm derlemesi uygulamayı optimize eder, sürüm anahtarınızla imzalar ve , yüklü uygulama dosyalarını korur.

Ürün aromalarını kullanarak dahil edilen kaynağı ve bağımlılığı değiştirebilirsiniz. varyantlarını kullanın. Örneğin, "demo" oluşturmak isteyebilirsiniz. ve "full" ya da belki "ücretsiz" olabilir. ve "paid" hoş geldiniz. Ortak kaynağınızı "main" source set (kaynak grubu) dizini ve adı ondan alan kaynak grubuna kaynak ekleyin.

AGP, her derleme türü ve ürün aroması kombinasyonu için varyantlar oluşturur. Eğer tatları tanımlamazsanız varyantlar, derleme türlerinden adlandırılır. Şu durumda: her ikisini de tanımlarsanız varyantın adı <flavor><Buildtype> olur. Örneğin, release ve debug türleri ile demo ve full aromalar için AGP oluşturur varyantlar:

  • demoRelease
  • demoDebug
  • fullRelease
  • fullDebug

Sonraki adımlar

Derleme kavramlarını öğrendiniz. Şimdi Android derleme ve yapın.