Сборка библиотеки jitpack с несколькими вариантами в Android
Я использую Gradle 4.1 с плагином Gradle-Android 3.0.1 на Android Studio 3.2
У меня есть 2 варианта "production" и "staging", и я не могу собрать свой проект как библиотеку с различными вариантами сборки.
приложение build.gradle:
apply plugin: 'com.android.library'
apply plugin: 'com.github.dcendents.android-maven'
android {
...
productFlavors {
production {
}
staging {
}
}
defaultPublishConfig "productionRelease"
publishNonDefault true
}
if( android.productFlavors.size() > 0 ) {
android.libraryVariants.all { variant ->
if( android.publishNonDefault && variant.name == android.defaultPublishConfig ) {
def bundleTask = tasks["bundle${name.capitalize()}"]
artifacts {
archives(bundleTask.archivePath) {
classifier name.replace('-' + variant.name, '')
builtBy bundleTask
name name.replace('-' + variant.name, '')
}
}
}
...
Затем я запускаю:./gradlew clean install, ошибки, которые я получил, это:
Не удалось выполнить задачу ": app: install".
Не удалось опубликовать конфигурационные "архивы". POM не может иметь несколько артефактов с одинаковым типом и классификатором. Уже есть приложение MavenArtifact:aar:aar:null, пытаюсь добавить приложение MavenArtifact: aar: aar: null.
И чтобы этот код компилировался, мне нужно поменять android.publishNonDefault на true, иначе я получу ошибку: Cannot get the value of write-only property 'publishNonDefault'
Любые предложения или подсказки были бы действительно полезны, цель состоит в том, чтобы собрать модуль библиотеки на jitpack, где мы можем импортировать его в проект с вариантами сборки. Спасибо!
2 ответа
После изучения этого в течение 2 дней и отправки по электронной почте поддержки Jitpack проблема заключается в том, что библиотека обновилась, а publishNonDefault устарела. вам просто нужно изменить свое приложение build.gradle на:
apply plugin: 'com.github.dcendents.android-maven'
dependencies {...}
group = 'com.github.your-group'
if (android.productFlavors.size() > 0) {
android.libraryVariants.all { variant ->
if (variant.name.toLowerCase().contains("debug")) {
return
}
def bundleTask = tasks["bundle${variant.name.capitalize()}"]
artifacts {
archives(bundleTask.archivePath) {
classifier variant.flavorName
builtBy bundleTask
name = project.name
}
}
}
}
publishing {
publications {
def flavorBuild ='production'
android.libraryVariants.all { variant ->
"maven${variant.name.capitalize()}Aar"(MavenPublication) {
from components.findByName("android${variant.name.capitalize()}")
groupId = 'com.examplesdk'
artifactId = 'examplesdk'
version "1.0.0-${variant.name}"
artifact "$buildDir/outputs/aar/examplesdk-${flavorBuild}-release.aar"
pom.withXml {
def dependenciesNode = asNode().appendNode('dependencies')
configurations.api.allDependencies.each { dependency ->
def dependencyNode = dependenciesNode.appendNode('dependency')
dependencyNode.appendNode('groupId', dependency.group)
dependencyNode.appendNode('artifactId', dependency.name)
dependencyNode.appendNode('version', dependency.version)
}
}
}
}
}
repositories{
maven {
url "$buildDir/repo"
}
}
}