将Android库发布到Jfrog artifactory,并附带依赖的aar文件。

3
我有一个包含外部aar文件的Android库项目。我将aar文件作为子模块添加,而不是将其添加到libs文件夹中。因此,项目结构如下所示:
LibraryModule - Submodule(build.gradle,submodule.aar)
子模块文件夹中只有两个文件,一个是submodule.aar,另一个是build.gradle文件,如下所示:
子模块gradle文件:
configurations.maybeCreate("default")
artifacts.add("default", file('submodule.aar'))

图书馆 gradle 文件:

dependencies {
  api fileTree(dir: 'libs', include: ['*.jar'])
  api 'androidx.core:core-ktx:1.10.1'
  api 'androidx.fragment:fragment-ktx:1.6.0'
  api platform('org.jetbrains.kotlin:kotlin-bom:1.8.0')
  api 'androidx.lifecycle:lifecycle-runtime-ktx:2.6.1'
  api 'com.google.android.material:material:1.11.0-alpha01'

  api project(':librarymodule:submodule')
}

publishing {
 publications {
    release(MavenPublication) {
        from components.findByName('release')
        groupId = 'com.groupId '
        artifactId = 'artifactId '
        version = '0.0.4'
        artifact("$buildDir/outputs/aar/library-release.aar")

        pom.withXml {
            // for dependencies and exclusions
            def dependenciesNode = asNode().appendNode('dependencies')
            configurations.implementation.allDependencies.each {
                def dependencyNode = dependenciesNode.appendNode('dependency')
                dependencyNode.appendNode('groupId', it.group)
                dependencyNode.appendNode('artifactId', it.name)
                dependencyNode.appendNode('version', it.version)
            }
        }
    }
}

repositories {
    maven {
        url = uri("https://testeandroid.jfrog.io/artifactory/test/")
        credentials {
            // Use properties or environment variables for secure credential storage
            username = "test"
            password = "sadfsadfafsa"
        }
    }
  }
}

使用上述脚本,我能够成功地将我的库发布到Artifactory,并且能够包含Android依赖项,如material和fragment等,就像POM文件中所显示的那样。但是子模块中的aar文件没有被发布。我应该如何在Artifactory上打包aar文件与我的库一起?
2个回答

0
要么将aar作为文件导入,将其放入libs/目录中,或者创建一个fat AAR。后者可能适用于您的设置(https://github.com/kezong/fat-aar-android/)。
我可以问一下,为什么您要将aar作为子模块导入?

由于未更新的Gradle不允许在库模块中的libs文件夹中添加aar文件。如果我们使用它,那么在构建库模块的aar时会抛出错误。 - undefined

-1
要在将库项目发布到Artifactory时包含子模块中的AAR文件,您可以修改库的Gradle脚本,确保子模块的AAR作为发布的一部分被包含进去。以下是实现此目标的步骤:
确保在发布库之前,子模块的AAR文件已经构建并可用。您可以在库的Gradle脚本中添加一个任务,将AAR从子模块复制到库的构建目录中。 在库的build.gradle文件中,添加以下任务:
task copySubmoduleAar(type: Copy) {
    from project(':librarymodule:submodule').file('submodule.aar')
    into "$buildDir/submodule-aar"
}

preBuild.dependsOn(copySubmoduleAar)

这个任务将会把子模块中的AAR文件复制到你的库的构建目录中。
修改你的发布配置,将AAR文件包含在发布中。更新你的库的build.gradle文件,将AAR文件作为一个构件添加进去。
publishing {
    publications {
        release(MavenPublication) {
            from components.findByName('release')
            groupId = 'com.groupId'
            artifactId = 'artifactId'
            version = '0.0.4'
            artifact("$buildDir/outputs/aar/library-release.aar")
            artifact("$buildDir/submodule-aar/submodule.aar") // Include submodule AAR

            pom.withXml {
                // for dependencies and exclusions
                def dependenciesNode = asNode().appendNode('dependencies')
                configurations.implementation.allDependencies.each {
                    def dependencyNode = dependenciesNode.appendNode('dependency')
                    dependencyNode.appendNode('groupId', it.group)
                    dependencyNode.appendNode('artifactId', it.name)
                    dependencyNode.appendNode('version', it.version)
                }
            }
        }
    }
    
    repositories {
        maven {
            url = uri("https://testeandroid.jfrog.io/artifactory/test/")
            credentials {
                // Use properties or environment variables for secure credential storage
                username = "test"
                password = "sadfsadfafsa"
            }
        }
    }
}

通过添加artifact("$buildDir/submodule-aar/submodule.aar"),您可以将子模块的AAR文件包含在发布的部分中。
通过这些修改,当您将库发布到Artifactory时,发布的构件中应该包含您的库的AAR文件和子模块的AAR文件。在发布之前,请确保清理和重新构建您的项目,以确保包含最新的构件。

在上述实施之后,我遇到了以下问题: 执行任务“:librarysdk:publishReleasePublicationToMavenRepository”失败。
无法将发布物“release”发布到存储库“maven” 无效的发布物“release”:具有相同扩展名和分类器('aar','null')的多个构件。
- undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接