我正在开发一个用于工作的 android 库,我们正在使用一些在 maven 存储库中不可用的 jar。但是,法律不允许我们将这些 jar 打包到我们的库中,除了我们的库之外,消费者还必须自己获取这些 jar。
我的问题是我似乎不能要求我们图书馆的消费者提供这些 jar (我正在使用一个包含 aar 的测试应用程序)。我尝试了 this similar question 的解决方案无济于事。
我尝试将它们设置为 provided
而不是 compile
在我的 gradle 文件中:
// 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 依赖项,那些工作正常。我只希望使用该库的任何人都必须获取并添加我们正在使用的那些 jar 。
当然有一种不那么复杂的方式来指定这一点?
最佳答案
jar 文件必须从 mymodule/libs/
上移一级。至mymodule/
根据 this answer .
然后在build.gradle
文件,更改:compile file('libs/externalDep.jar')
到provided file('externalDep.jar')
就是这样。
它不会被复制到 aar 中,使用 aar 的客户端必须自己提供 jar 文件。
使用 aar 的 App 项目可以指定 compile file('lib/externalDep')
像平常一样。
关于android - 避免将jar依赖打包成aar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41696117/