【问题标题】:Unable to get transitive dependencies of my library in my Android app无法在我的 Android 应用程序中获取我的库的传递依赖项
【发布时间】:2019-10-31 23:59:17
【问题描述】:

我在 Android Studio 中创建了一个 Android 库,它有一些外部依赖项(例如,Retrofit)。 但是当我尝试在 Android 应用程序中使用此库时,该应用程序不包含传递依赖项(包含在库中的那些)。

我已经尝试将库发布到 Bintray,将 app-gradle 文件中的 'implementation' 关键字更改为 'api'。 我还尝试在我的应用程序的 gradle 文件中设置 transitive = true

在尝试构建 Android 应用程序时,它显示 Resource Linking Failed for CardView 在我的库中使用。

【问题讨论】:

  • 首先在pom文件中检查jcenter是否依赖列表正确。
  • 那里没有 pom.xml 文件!下面给出的答案解决了这个问题。

标签: android gradle dependencies android-library transitive-dependency


【解决方案1】:

我在为 Android 构建库时遇到了同样的问题。 我试图直接将 .aar 文件从 android studio 上传到 bintray。但显然,它不包括 pom.xml 文件。 所以我按照this教程生成了zip文件。 然后在 bintray 创建一个新版本,然后使用 UI upload 选项手动上传 zip 文件 另外,上传时不要忘记检查explode this Archive 选项。 然后,您可以发布该库并将其与所有传递依赖项一起使用。 这是一个示例build.gradle 代码:

def version = 'your.version'
def localReleaseDest = "${buildDir}/release/${version}"
uploadArchives {
    repositories.mavenDeployer {
        pom.groupId = 'your.package.name'
        pom.artifactId = 'yourModuleName'
        pom.version = 'your.version'
        // Add other pom properties here if you want (developer details / licenses)
        repository(url: "file://${localReleaseDest}")
    }
}

task androidJavadocs(type: Javadoc) {
    source = android.sourceSets.main.java.srcDirs
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}

task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) {
    classifier = 'javadoc'
    from androidJavadocs.destinationDir
}

task androidSourcesJar(type: Jar) {
    classifier = 'sources'
    from android.sourceSets.main.java.srcDirs
}

artifacts {
    archives androidSourcesJar
    archives androidJavadocsJar
}
task zipRelease(type: Zip) {
    from localReleaseDest
    destinationDir buildDir
    archiveName "release-${version}.zip"
}

task generateRelease {
    doLast {
        println "Release ${version} can be found at ${localReleaseDest}/"
        println "Release ${version} zipped can be found ${buildDir}/release-${version}.zip"
    }
}

generateRelease.dependsOn(uploadArchives)
generateRelease.dependsOn(zipRelease)

根据需要修改后,将此代码放在应用级别 gradle 中的所有块之外。 现在,在 Android Studio 中同步项目并打开终端,然后执行以下命令:

./gradlew clean build generateRelease

这将在您的app/build 目录中生成一个 .zip 文件,您可以像上面描述的那样将其上传到 bintray

【讨论】:

    猜你喜欢
    • 2021-08-18
    • 1970-01-01
    • 1970-01-01
    • 2021-01-02
    • 2015-11-05
    • 2023-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多