2

我在 Android Studio 3.2 上使用 Gradle 4.1 和 Gradle-Android 插件 3.0.1

我有 2 种风格的“生产”和“暂存”,我无法将我的项目构建为具有不同构建变体的库。

应用程序构建.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 app:aar:aar:null,正在尝试添加 MavenArtifact app:aar:aar:null。

为了编译这段代码,我需要用true交换android.publishNonDefault,否则我会得到一个错误:Cannot get the value of write-only property 'publishNonDefault'

任何建议或提示都会非常有帮助,目的是在 jitpack 上构建库模块,我们可以将它导入到带有构建变体的项目中。谢谢!

4

2 回答 2

1

在深入研究了 2 天并通过电子邮件发送 Jitpack 支持后,问题是因为 lib 已更新并且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
            }
        }
    }
}
于 2018-10-12T10:44:41.657 回答
0

问题是使用 jitpack 创建多种风味,所以我要做的是,创建一个存储风味名称的变量,然后通过可用变体循环,传递flavorBuildartifact所以当你将代码推送到 GitHub 并通过 jitpack 创建工件然后 jitpack create根据您的构建风格所需的实现,然后您可以使用它。你只需要改变构建风格

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"
        }
    }
}
于 2021-09-14T12:09:39.980 回答