我正在开发一个工作的android库,我们正在使用maven存储库中没有的一些jar.但是,我们在法律上不允许将这些罐装入我们的库中,除了我们的库之外,消费者必须自己获取这些罐子.
我的问题是,我似乎无法要求我们的库的消费者提供这些罐子(我正在使用包含aar的测试应用程序).我试过这个类似问题的解决方案无济于事.
我已经尝试将它们设置为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文件必须上升一个级别,从mymodule/libs/
到mymodule/
按照这个答案.
然后在build.gradle
文件中,将:更改
compile file('libs/externalDep.jar')
为
provided file('externalDep.jar')
而已.
它不会被复制到aar中,使用aar的客户端必须自己提供jar文件.
使用aar的应用程序项目可以compile file('lib/externalDep')
正常指定.