Gradle:如何从存储库中包含依赖项以输出 aar 文件

新手上路,请多包涵

我正在尝试在 Android Studio 中构建一个 arr 包。此软件包包含 Zendesk 的依赖项:

 allprojects {
    repositories {
        maven { url 'https://zendesk.artifactoryonline.com/zendesk/repo' }
    }
}

compile (group: 'com.zendesk', name: 'sdk', version: '1.7.0.1') {
    transitive = true
}

compile (group: 'com.zopim.android', name: 'sdk', version: '1.3.1.1') {
    transitive = true
}

我想为 Unity3d 项目构建这个包。此包应包含 Zendesk 的所有依赖项(transitive = true 属性)。当我打开 aar 文件时,没有 Zendesk 的依赖项。怎么了?

原文由 Konstantin Gindemit 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 612
2 个回答

默认情况下,AAR 不包含任何依赖项。如果你想包含它们,你必须将这些库从 artifactory/你的缓存文件夹复制到你的包中,要么通过手动执行,要么这个任务可能对你有帮助: https ://stackoverflow.com/a/33539941/4310905

原文由 and_dev 发布,翻译遵循 CC BY-SA 3.0 许可协议

我知道这个答案来得有点晚,但仍然……

您编写的 transitive 参数将包括传递依赖项(您的依赖项的依赖项),必须在 pom.xml 您设置为 compile 的依赖项文件中设置 --- 。因此,您实际上不需要为 aar 包装执行此操作,除非它用于任何其他目的。

First, think that you can package an aar with some jar s inside (in the libs folder), but you cannot package an aaraar 内。

解决问题的方法是:

  • 从您感兴趣的依赖项中获取已解决的工件。
  • 检查哪些已解决的工件是 jar 文件。
  • 如果它们是 jar ,将它们复制到一个文件夹并设置为 compile 你的 dependencies 关闭中的那个文件夹。

所以或多或少是这样的:

 configurations {
    mypackage // create a new configuration, whose dependencies will be inspected
}

dependencies {
    mypackage 'com.zendesk:sdk:1.7.0.1' // set your dependency referenced by the mypackage configuration
    compile fileTree(dir: "${buildDir.path}/resolvedArtifacts", include: ['*.jar']) // this will compile the jar files within that folder, although the files are not there yet
}

task resolveArtifacts(type: Copy) {
    // iterate over the resolved artifacts from your 'mypackage' configuration
    configurations.mypackage.resolvedConfiguration.resolvedArtifacts.each { ResolvedArtifact resolvedArtifact ->

        // check if the resolved artifact is a jar file
        if ((resolvedArtifact.file.name.drop(resolvedArtifact.file.name.lastIndexOf('.') + 1) == 'jar')) {
            // in case it is, copy it to the folder that is set to 'compile' in your 'dependencies' closure
            from resolvedArtifact.file
            into "${buildDir.path}/resolvedArtifacts"
        }
    }
}

现在您可以运行 ./gradlew clean resolveArtifacts build 并且 aar 包中将包含已解析的 jar s。

我希望这有帮助。

原文由 jjnunog 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题