【问题标题】:Avoid packaging jar dependencies into aar避免将jar依赖打包成aar
【发布时间】:2017-06-01 10:56:45
【问题描述】:

我正在开发一个用于工作的 android 库,我们正在使用一些在 maven 存储库中不可用的 jar。但是,法律不允许我们将这些 jar 打包到我们的库中,除了我们的库之外,消费者还必须自己获取这些 jar。

我的问题是我似乎不能要求我们图书馆的使用者提供这些罐子(我正在使用包含 aar 的测试应用程序)。我尝试了this similar question 的解决方案,但无济于事。

我尝试在我的 gradle 文件中将它们设置为 provided 而不是 compile

// Neither of these seem to fix the problem
compile files('libs/externalDep.jar')
provided files('libs/externalDep.jar')

我也尝试在包装选项中排除它们:

packagingOptions { exclude 'libs/externalDep.jar }`

我可以通过将其添加到我的build.gradle 中的android 标记来排除它们:

android.libraryVariants.all { variant ->
variant.outputs.each { output ->
    def packageLib = output.getPackageLibrary()
    packageLib.exclude('libs/externalDep.jar')
}

它们没有添加到 aar 但构建测试应用程序给了我:

com.android.build.api.transformTransformException:
  com.android.builder.packaging.DuplicateFileException:
    Duplicate files copied in APK VERSION.txt
File1: path/to/jar/in/test/app/project/externalDep.jar
File2: path/to/build/intermediates/exploded-aar/.../jars/classes.jar

澄清一下,我根本不关心 maven repo 依赖项,它们工作正常。我只希望使用该库的任何人都必须获取并添加我们正在使用的那些罐子。
肯定有一种不那么复杂的方式来指定这一点吗?

【问题讨论】:

    标签: android gradle jar aar


    【解决方案1】:

    jar 文件必须上移一级,根据this answermymodule/libs/mymodule/

    然后在build.gradle文件中,更改:
    compile file('libs/externalDep.jar')

    provided file('externalDep.jar')

    就是这样。
    它不会被复制到 aar 中,使用 aar 的客户端必须自己提供 jar 文件。
    使用 aar 的应用项目可以像往常一样指定compile file('lib/externalDep')

    【讨论】:

      猜你喜欢
      • 2015-01-10
      • 2016-01-31
      • 2019-06-04
      • 1970-01-01
      • 1970-01-01
      • 2018-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多