避免将jar依赖包装到aar

时间:2017-01-17 11:36:38

标签: android gradle jar aar

我正在开发一个用于工作的android库,我们正在使用maven存储库中没有的一些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 }`

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

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依赖,那些工作正常。我只是想要使用图书馆的人必须得到并添加我们也在使用的那些罐子 当然,有一个不太复杂的方式来指定它吗?

1 个答案:

答案 0 :(得分:5)

根据this answer,jar文件必须向上移动一级,从mymodule/libs/移至mymodule/

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

provided file('externalDep.jar')

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