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ırarak farklı derleme varyantları yayınlayabilirsiniz. Her biri kendine özgü özelliklere sahip.

Kitaplığınızın birden fazla derleme varyantını yayınlamak, kullanıcınızın seçebileceği uygun özelliklere sahip olmayabilir. Örneğin, her gün ve proje yönetiminin hata ayıklama ve yayınlama derleme türleri. Hata ayıklama yayını yapısında fazladan günlük kaydı kodu bulunabilir ve farklı bağımlılıkları devre dışı bırakabilirsiniz.

Devam etmeden önce kitaplığınızı yayın için hazırlayın.

Gradle Modülü Meta Verilerini Kullanma

Kitaplığınızın varyantlarını yayınlamak için şunu kullanmanız gerekir: Gradle Module Metadata (GMM). GMM, yayınınızı tanımlar ve varyanta duyarlı bağımlılık yönetimi ile ilgili daha fazla bilgi edinin. GMM, varsayılan olarak kitaplığınızla yayınlanır.

GMM kullanmanın avantajları şunlardır:

  • GMM'yi Gradle 6.0 veya sonraki bir sürümle kullanıyorsanız birden fazla yayın yayınlayabilirsiniz her birinin kendine özgü özellikleri ve bağımlılıkları olan birden çok yapı ve varyanttan bahsedeceğiz. Maven'in POM dosyasını kullanıyorsanız GMM yerine, yalnızca tek bir yapı yayınlayabilirsiniz. POM dosyası kullanıyorsanız sınıflandırıcılar kullanarak ek yapılar yayınlayabilir, ancak ek yapılar kendi bağımlılıkları olamaz.
  • Gradle, derleme için bir varyant ve çalışma zamanı için otomatik olarak bir varyant oluşturur. her birinin kendine özgü bağımlılıkları var. Derleme için bir varyant yayınlayabilirsiniz. Böylece tüketici, kullandığı zamanı temel alarak seçim yapabilir. dokunun. GMM, derleme ve derleme için tüketicilerin farklı bağımlılıkları görmesine olanak tanır. çalışma zamanına, yayınlanan kitaplığın api, implementation veya compileOnly/runtimeOnly. Görüntüleyin Bağımlılık yapılandırmaları sayfasını ziyaret edin. Bu özellik, tek bir sayfa yayınlasanız bile yayın varyantı.
  • Test armatürlerini kullanırken özel varyant içeren ek bir varyant yayınlayabilirsiniz meta veri veya özellikler tüketicinin seçmesine olanak tanır. Bu özellik, tek bir yayın varyantıdır.

Yayın varyantlarını anlama

Yayın varyantlarının işleyiş şeklini anlamak için biraz bilgi sahibi olmanız faydalı olacaktır. Gradle's temel yayıncılık adımlarına göz atın. Aşağıda, yayınla ilgili bazı temel kavramlar verilmiştir:

  • Derleme varyantı: Gradle'ın kitaplığınızı oluşturmak için kullandığı yapılandırma. derleme türü ile ürün aromasının çapraz ürünüdür. Daha fazla bilgi edinmek için Android derleme sözlüğü.
  • Yapı: Bir derlemenin oluşturduğu dosya veya dizin. Kütüphane yayıncılığı bağlamında genellikle bir JAR veya AAR dosyası olur.
  • Yayın varyantı: İlişkili nitelikleri, özellikleri ve bağımlılıklarıyla birlikte bir yapı. Not bu özelliği kullanarak yayın değişkenlerini varyantlar olarak adlandırabilirsiniz. Ancak bunlara birbirinden ayırt etmek için bu dokümanlardaki yayın varyantları derleme varyantları.
  • Özellik: Gradle, aşağıdaki durumlarda yayın varyantlarını tanımlamak ve seçmek için özelliklerden yararlanır birden çok seçenektir. Ö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ını barındırabilen ve yayınlanan bir Gradle nesnesi tek bir Maven koordinat grubuna (groupdId:artifactId:version) bağlayacaksınız. Evet Gradle'ın DSL'sinde gösterildiği için Project.getComponents().
  • Yayın: Depoda yayınlananlar ve tüketicilerin kullandığı içerikler. Yayınlar birbirlerinden oluşur bir yazılım bileşeni ve meta verileri (örneğin, kimliği (groupId:artifactId:version).

Android Gradle eklentisi (AGP) 7.1, sırasında hangi derleme varyantlarının kullanılacağını kontrol etmek için alana özgü dil (DSL) yok sayılanları gösterir. DSL, aşağıdaki gibi örnekler oluşturmanızı sağlar: Aşağıdakilerden birini içeren SoftwareComponent:

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

Birden fazla yayın varyantı içeren bir yazılım bileşeni oluştururken AGP, her bir varyant için tüketicinin seçim yapmasına olanak tanıyan uygun bir değişken bulmalıdır. Bu özellikler doğrudan tür ve tatları kullanabilirsiniz. Oluşturuluyor tek bir yayın varyantına sahip bileşen özellik gerektirmez çünkü ayırt etmek gerekmez.

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

Aşağıdaki snippet, bir yazılım bileşenini tek bir yayınla yapılandırır release derleme varyantından oluşturulur ve kaynak JAR'ı ikincil eser:

Kotlin

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

Eski

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

Her biri tek bir yayın varyantına sahip olan birkaç bileşen oluşturabilir ve farklı Maven koordinatları altında dağıtabilirsiniz. Bu durumda, yayın varyantında ayarlanmamış. Bu yayının, varyant, yayına bakarak release derleme varyantına ait meta verilerdir. Yalnızca bir yayın varyantı bulunduğundan gerek yoktur. kullanın.

Birden fazla yayın varyantına sahip yazılım bileşeni oluşturma

Derleme varyantlarının tamamını veya bir alt kümesini tek bir yazılıma yerleştirmek için seçebilirsiniz bir bileşenidir. AGP, otomatik olarak derleme türü adlarını ve ürün türünü kullanır adlarını ve ürün aroması boyut adlarını ve ürün aroması boyut adlarını bunları birbirinden ayırt edebildiğini ortaya koyabilirsiniz.

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

Kotlin

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

Eski

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

Bu işlem, default adlı tek bir bileşen oluşturur. Bileşeninizi adlandırmak için başka bir şey için multipleVariants({name}) kullanın. Bu durumda, tüm derleme türü ve ürün aroması boyutları şu şekilde kullanılır: özellikleri hakkında daha fazla bilgi edinin.

Yayınlanacak varyantları seçmek için includeBuildTypeValues() ve includeFlavorDimensionAndValues():

Kotlin

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

Eski

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 (square) shape boyutu için .

Yalnızca tek bir değer yayınlıyor olsanız bile tüm tür boyutları listelenmelidir Böylece AGP her boyut için hangi değerin kullanılacağını bilir.

Aşağıdaki tabloda, elde edilen yayın varyantları ve bunların özellikleri olabilir.

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, biri derleme, diğeri için de olmak üzere iki kez yayınlandı farklı bağımlılıklarla (bildirilen bağımlılıkların olup olmadığına bağlı olarak) implementation veya api kullanın) ve özellik için farklı bir değer kullanın org.gradle.Usage. Ancak bu iki varyanta ait yapılar (AAR dosyası) aynıdır.

Daha fazla bilgi için publishing API belgeleri.

Çok türlü kitaplıklar yayınlamak için uyumluluk sorunu

AGP 7.0 veya önceki sürümleri kullanan bir proje, yayınlanan birden çok türe sahip kitaplıkları kullanamaz AGP 7.1 veya daha yeni bir sürüm kullanın. Bu, özellikte yapılan bir değişikliğin neden olduğu bilinen bir sorundur ürün aroma boyutunun dimensionName ile arasında adı AGP 7.1'de com.android.build.api.attributes.ProductFlavor:dimensionName. Proje kurulumunuza bağlı olarak missingDimensionStrategy öğesini şurada kullanabilirsiniz: eski varyant API'nin çalışmasını inceleyin.

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

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

Eski

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