我创建了一个Android库(使用Android Studio),它导入一个外部.jar文件(仅包含接口)以便正确构建。但最终的库文件不应包含此文件,因为主应用程序项目将包含已包含外部库中包含的这些接口类的.jar文件。如果我将文件留在里面,编译器会抱怨"多个dex文件定义..."。
我可以使用gradle从.aar中自动删除外部.jar库:
android.libraryVariants.all { variant ->
variant.outputs.each { output ->
def packageLib = output.getPackageLibrary()
packageLib.exclude('libs/externalLibrary.jar')
}
}
但是如果使用ProGuard (minifyEnabled true)对库进行模糊处理,那么将外部库中的所有类文件添加到classes.jar中,然后将其打包到.aar文件中,因此可以&# 39;不要这样排除。
我可以编辑classes.jar文件并使用gradle自动从中删除文件:
task makeRelease(type: Jar) {
baseName='changedClasses'
destinationDir=file('../../release/')
from zipTree('build/intermediates/bundles/release/classes.jar')
exclude "com/externallibrary/**"
}
在完成库的构建后运行此任务时有效。但是我需要在proguard任务完成后运行此任务,但在将文件打包到最终的.aar之前,以便自动构建并运行最终的应用程序。到目前为止,我还没有找到任何办法......
因此:如何从包含在最终.aar文件中的classes.jar中自动删除文件?或者我可能会以错误的方式解决这个问题,是否有另一种方法可以解决我的问题,比如告诉proguard不要在classes.jar中包含文件?
答案 0 :(得分:1)
在您的依赖项中,而不是编写"编译"写"提供"这意味着你正在编译的东西只是为了获得参考,而不是用于包装。