首页 文章

从混淆的classes.jar中删除外部库(在Android Studio / Gradle中)

提问于
浏览
5

我创建了一个安卓库(使用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文件中,因此不能以这种方式排除 .

我可以编辑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中的文件一样?

1 回答

  • 1

    在你的依赖项中,而不是写“编译”写“提供”,这意味着你正在编译的东西只是为了获得参考而不是用于打包 .

相关问题