繁体   English   中英

Gradle:排除依赖项的包

[英]Gradle: exclude a dependency's package

是否可以从 Android Gradle 依赖项中排除,使其不会最终出现在 APK 中?

如:

dependencies {

    compile('com.facebook.android:facebook-android-sdk:4.17.0') {
        exclude package 'com.facebook.share'
    }
}

但随后不同,因为“包”不是有效的命令。

这样,你可以从库中排除几个包,这只是概念的一个例子

compile ('com.github.ganfra:material-spinner:1.1.1'){
        exclude group: 'com.nineoldandroids', module: 'library'
        exclude group: 'com.android.support', module: 'appcompat-v7'
}

您不能排除工件的某些特定部分,因为 Gradle 对其中的内容一无所知。 对于 Gradle 来说,它是整体式的:您要么将工件包含在其中,要么不包含。

使用 ProGuard 可以实现您想要的。 这是构建应用程序的发布版本时的常见步骤,您可以指定进行收缩的规则,这将删除不必要的代码。 Android 文档中有一篇代码缩减文章,其中包含更多详细信息。

唯一可能出现的问题是,如果依赖项本身包含 ProGuard 配置文件,则可能无法强制收缩指定要保存在其中的内容。 但是,我刚刚查看了您询问的 AAR,情况似乎并非如此。

您可以在 build.gradle 中使用 sourceSets 来过滤您不想捆绑在 apk 或 aab 中的包或类。 例如——

android {
  sourceSets {
        main {
            java {
                exclude 'com/a/b/helper/**'
                exclude 'com/a/ext/util/TestUtils.java'
            }
        }
    }
}

希望它会有所帮助:)

从依赖项组中排除参考库的更新答案

implementation (group: 'net.sf.jasperreports', name: 'jasperreports', version: '6.1.0'){
    //example : org.olap4j:olap4j:0.9.7.309-JS-3
    exclude group: 'org.olap4j', module: 'olap4j'
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM