android - 避免将jar依赖打包成aar

标签 android gradle jar aar

我正在开发一个用于工作的 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/

相关文章:

android - Android Studio错误-无法加载类 'com.google.gson.JsonParseException'

带有引用库的Java程序: NoClassDefFound

java - .jar 文件是否受读取/编辑保护?

java - java.lang.NoClassDefFoundError:AmqpProviderFactory.createProvider中的org/apache/qpid/proton/engine/Collector

android - 如何在android中从下到上动画弹出窗口

android - 在 ViewPageIndicator 中使用多个布局

android - react native : Android back button does not work when the screen re mounts

android - Gradle 依赖项.. Kaltura Player 和 Google 分析不兼容 [Android]

java - 如何从 jar 文件内存流中加载类

android - 在 Vmware 中测试 Android 应用程序