Yayın varyantlarını yapılandırın

Yayın varyantları, kullanıcılarınız için daha özelleştirilmiş bir deneyim oluşturmanıza olanak tanır. Yayın varyantlarını yapılandırmak, her biri kendi özelliklerine sahip farklı derleme varyantları yayınlamanıza olanak tanır.

Kitaplığınızın birden çok derleme varyantını yayınlamak, kullanıcınızın ihtiyaçlarına uygun özellikleri seçmesine olanak tanır. Örneğin, hata ayıklama ve sürüm derleme türleri için farklı yapılar yayınlayabilirsiniz. Hata ayıklama yayın yapısı, bu ek günlük kaydını etkinleştirmek için ek günlük kaydı koduna ve farklı bağımlılıklara sahip olabilir.

Devam etmeden önce kitaplığınızı yayına hazırladığınızdan emin olun.

Gradle Modülü Meta Verilerini Kullanma

Kitaplığınızın varyantlarını yayınlamak için Gradle Modülü Meta Verileri (GMM) kullanmanız gerekir. GMM, yayınınızı tanımlar ve varyanta duyarlı bağımlılık yönetimini uygular. GMM varsayılan olarak kitaplığınızla yayınlanır.

Mobil Cihazlar için Google Haritalar'ı kullanmanın yararları şunlardır:

  • GMM'yi Gradle 6.0 veya sonraki sürümlerle kullanıyorsanız her biri kendi özelliklerine ve bağımlılıklarına sahip birden fazla yayın varyantı veya yapı yayınlayabilirsiniz. GMM yerine Maven POM dosyasını kullanırsanız yalnızca bir yapı yayınlayabilirsiniz. POM dosyası kullanırsanız sınıflandırıcıları kullanarak ek yapılar yayınlayabilirsiniz ancak ek yapıların kendi bağımlılıkları olamaz.
  • Gradle, derleme için ve çalışma zamanı için otomatik olarak birer varyant oluşturur. Bu varyantların her birinin kendi bağımlılıkları vardır. Tüketicinin kitaplığınızı kullandıkları zamana göre seçim yapabilmesi için derleme için bir varyant ve çalışma zamanı için bir varyant yayınlayabilirsiniz. GMM, yayınlanan kitaplığın api, implementation veya compileOnly/runtimeOnly kullanımına bağlı olarak tüketicilerin derleme ve çalışma zamanı için farklı bağımlılıkları görmelerini sağlar. Bağımlılıkların tam listesi için Bağımlılık yapılandırmaları bölümüne bakın. Bu özellik, tek bir yayın varyantı yayınlasanız bile kullanılabilir.
  • Test armatürlerini kullanırken tüketicinin seçmesine izin veren özel meta verilere veya özelliklere sahip ek bir varyant yayınlayabilirsiniz. Tek bir yayın varyantı yayınlasanız bile bu seçenek kullanılabilir.

Yayın varyantlarını anlama

Yayın varyantlarının işleyiş şeklini anlamak için Graadle'ın temel yayınlama adımlarını bilmek yararlı olacaktır. Yayınlanmayla ilgili bazı temel kavramlar şunlardır:

  • Derleme varyantı: Gradle'ın derleme türü ve ürün çeşidinin çapraz çarpımı olan kitaplığınızı oluşturmak için kullandığı yapılandırma. Daha fazla bilgi edinmek için Android derleme sözlüğüne bakın.
  • Yapı: Bir derlemenin oluşturduğu dosya veya dizin. Kütüphane yayıncılığı bağlamında yapı genellikle JAR veya AAR dosyasıdır.
  • Yayın varyantı: İlişkili özellikleri, özellikleri ve bağımlılıkları ile birlikte bir yapı. Gradle'ın yayın varyantlarının varyantlarını çağırdığını unutmayın. Ancak, oluşturma varyantlarından ayırt etmek için bu belgelerde yayın varyantları olarak adlandırılırlar.
  • Özellik: Gradle, birden çok seçenek olduğunda yayın varyantlarını tanımlamak ve seçmek için özellikleri kullanır. Örneğin, org.gradle.usage=java-api ve org.gradle.jvm.version=11 varyant özellikleridir.
  • Yazılım bileşeni: Bir veya daha fazla yayın varyantı içerebilen ve tek bir Maven koordinatları grubuna (groupdId:artifactId:version) yayınlanan Gradle nesnesi. Project.getComponents() ile Gradle DSL'sinde gösterilir.
  • Yayın: Depoda yayınlananlar ve tüketicilerin kullandığı içerikler. Yayınlar, bir yazılım bileşeni ve bu bileşenin meta verilerinden (örneğin, kimliği) (groupId:artifactId:version) oluşur.

Android Gradle eklentisi (AGP) 7.1, yayın sırasında hangi derleme varyantlarının kullanıldığını ve hangilerinin yoksayıldığını kontrol etmek için alana özgü bir dil (DSL) sunar. DSL, aşağıdakilerden birini içeren SoftwareComponent örnekleri oluşturmanıza olanak tanır:

  • Bir derleme varyantından bir yayın varyantı
  • Çeşitli derleme varyantlarından çeşitli yayın varyantları

Birden fazla yayın varyantı olan bir yazılım bileşeni oluştururken AGP, her varyant için tüketicinin ihtiyacı olan uygun varyantı seçmesini sağlayan özellikler ayarlar. Bu özellikler doğrudan derleme varyantını oluşturmak için kullanılan derleme türü ve çeşitlerinden gelir. Tek yayın varyantı olan bir bileşen oluşturmak için özellik gerekmez, çünkü ayırt edilmeye gerek yoktur.

Tek bir yayın varyantı olan yazılım bileşeni oluşturma

Aşağıdaki snippet, bir yazılım bileşenini release derleme varyantından oluşturulmuş tek bir yayın varyantıyla yapılandırır ve kaynak JAR'ı ikincil bir yapı olarak ekler:

Kotlin

android {
  publishing {
    singleVariant("release") {
        withSourcesJar()
    }
  }
}

Modern

android {
  publishing {
    singleVariant('release') {
        withSourcesJar()
    }
  }
}

Her biri tek bir yayın varyantına sahip birkaç bileşen oluşturabilir ve bunları farklı Maven koordinatları altında dağıtabilirsiniz. Bu durumda, özellikler yayın varyantında ayarlanmaz. Yayın meta verilerine bakarak bu yayın varyantının release derleme varyantından olduğunu belirleyemezsiniz. Yalnızca bir yayın varyantı olduğundan, açıklığa gerek yoktur.

Birden çok yayın varyantı olan bir yazılım bileşeni oluşturma

Derleme varyantlarının tümünü veya bir alt kümesini tek bir yazılım bileşenine yerleştirmek için seçebilirsiniz. AGP, derleme türü adlarını, ürün türü adlarını ve ürün çeşidi boyutu adlarını otomatik olarak kullanarak tüketen projenin bunları ayırt edebilmesini sağlar.

Tüm derleme varyantlarını tek bir bileşende yayınlamak için modül düzeyindeki build.gradle dosyasındaki multipleVariants{} bloğunda allVariants() değerini belirtin:

Kotlin

android {
  publishing {
    multipleVariants {
      allVariants()
      withJavadocJar()
    }
  }
}

Modern

android {
  publishing {
    multipleVariants {
      allVariants()
      withJavadocJar()
    }
  }
}

Bu işlem, default adlı tek bir bileşen oluşturur. Bileşeninizi başka bir şekilde adlandırmak için multipleVariants({name}) kullanın. Bu durumda, tüm derleme türü ve ürün çeşidi boyutları özellik olarak kullanılır.

includeBuildTypeValues() ve includeFlavorDimensionAndValues() kullanarak da hangi varyantların yayınlanacağını seçebilirsiniz:

Kotlin

android {
  publishing {
    multipleVariants("custom") {
      includeBuildTypeValues("debug", "release")
      includeFlavorDimensionAndValues(
        dimension = "color",
        values = arrayOf("blue", "pink")
      )
        includeFlavorDimensionAndValues(
          dimension = "shape",
          values = arrayOf("square")
      )
    }
  }
}

Modern

android {
  publishing {
    multipleVariants('custom') {
      includeBuildTypeValues('debug', 'release')
      includeFlavorDimensionAndValues(
        /*dimension =*/ 'color',
        /*values =*/ 'blue', 'pink'
      )
      includeFlavorDimensionAndValues(
        /*dimension =*/ 'shape',
        /*values =*/ 'square'
      )
    }
  }
}

Bu örnekte, özel bileşen, derleme türü için (debug, release), color boyutu için (blue, pink) ve shape boyutu için (square) tüm kombinasyonlarını içerir .

Bir boyuttan yalnızca tek bir değer yayınlıyor olsanız bile tüm çeşit boyutlarının listelenmesi gerekir. Böylece AGP, her boyut için hangi değerin kullanılacağını bilir.

Aşağıdaki tabloda, elde edilen yayın varyantları ve bunlarla ilişkili özellikler listelenmiştir.

Varyant Özellikler
blueSquareDebug com.android.build.api.attributes.BuildTypeAttr="debug" com.android.build.api.attributes.ProductFlavorAttr:color="blue"
blueSquareRelease com.android.build.api.attributes.BuildTypeAttr="release"
com.android.build.api.attributes.ProductFlavorAttr:color="blue"
pinkSquareDebug com.android.build.api.attributes.BuildTypeAttr="debug"
com.android.build.api.attributes.ProductFlavorAttr:color="pink"
pinkSquareRelease com.android.build.api.attributes.BuildTypeAttr="release"
com.android.build.api.attributes.ProductFlavorAttr:color="pink"

Pratikte, daha fazla varyant yayınlanır. Örneğin, yukarıdaki varyantların her biri, bir kez derleme ve bir kez çalışma zamanı için olmak üzere, farklı bağımlılıklarla (bildirilen bağımlılıkların implementation veya api kullanımına bağlı olarak) ve org.gradle.Usage özelliği için farklı bir değerle iki kez yayınlanır. Ancak bu iki varyantın yapıları (AAR dosyası) aynıdır.

Daha fazla bilgi için publishing API dokümanlarına bakın.

Çok türlü kitaplıklar yayınlamayla ilgili uyumluluk sorunu

AGP 7.0 veya önceki sürümleri kullanan bir proje, AGP 7.1 veya sonraki sürümlerle yayınlanan çok türlü kitaplıkları kullanamaz. Bu, AGP 7.1'de ürün çeşnisi boyutunun dimensionName olan özellik adında com.android.build.api.attributes.ProductFlavor:dimensionName olarak yapılan değişiklik nedeniyle bilinen bir sorundur. Proje ayarlarınıza bağlı olarak, bu sorunu çözmek için eski varyant API'sinde missingDimensionStrategy kullanabilirsiniz.

Örneğin, uygulama projenizin yalnızca sürüm ürün türü boyutu olduğunu varsayalım:

Kotlin

android {
    applicationVariants.forEach { variant ->
        val flavor = variant.productFlavors[0].name
        val attributePrefix = "com.android.build.api.attributes.ProductFlavor"
        val dimensionName = "version"
        variant.missingDimensionStrategy("$attributePrefix:$dimensionName", flavor)
    }
}

Modern

android {
    applicationVariants.forEach { variant ->
        def flavor = variant.getProductFlavors()[0].name
        def attributePrefix = "com.android.build.api.attributes.ProductFlavor"
        def dimensionName = "version"
        variant.missingDimensionStrategy("$attributePrefix:$dimensionName", flavor)
    }
}