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
veyacompileOnly
/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
veorg.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çinProject.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"
|
pinkSquareDebug |
com.android.build.api.attributes.BuildTypeAttr="debug"
|
pinkSquareRelease |
com.android.build.api.attributes.BuildTypeAttr="release"
|
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)
}
}