我正在开发一个用于工作的android库,并且我们使用了一些在Maven存储库中不可用的jar。但是,根据法律,我们不允许将这些 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 }`

我可以通过将其添加到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回购依赖项,这些都很好。我只希望使用该库的任何人都必须获取并添加我们也在使用的那些jar。
当然,有一种不太复杂的方法可以指定这一点?

最佳答案

必须按照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')

10-07 19:28
查看更多