Сборка библиотеки 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"
        }
    }
}
Другие вопросы по тегам