Gradle: 排除依赖项的包

8

有没有可能从Android Gradle依赖项中排除一个,以便它不会出现在APK文件中?

例如:

dependencies {

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

但是出现了不同的情况,因为“package”不是一个有效的命令。


你想从依赖项中删除自己的APK或模块包吗? - AndiGeeky
从依赖中排除包。Facebook库示例具有许多com.facebook.XXX包,我不想包括其中一个。我更新了我的问题示例。 - Frank
可以的。请查看下面的答案! - AndiGeeky
该答案展示了如何移除一个依赖项的依赖项,而不是依赖项本身的包。 - Frank
1
哦耶!!我猜我们不能删除包。还需要等一段时间。如果有人知道,那会很有帮助。 - AndiGeeky
4个回答

1
您不能排除构件的特定部分,因为Gradle不知道其中包含什么。对于Gradle来说,它是单体的:你要么包含整个构件及其中所有内容,要么不包含。可能可以通过使用ProGuard实现您想要的效果。这是构建应用程序版本时的常规步骤,您可以指定规则进行缩减,从而删除不必要的代码。Android文档有一篇代码缩减文章,其中有更多详细信息。唯一可能出现的问题是,如果依赖项本身包含一个ProGuard配置文件,则可能无法强制缩减其中指定要保留的内容。但是,我刚刚看了一下您所询问的AAR文件,情况似乎并非如此。

好的,我明白了。在调试构建中使用Proguard会消耗太多的构建时间。我认为这是不可能的,我会接受这个答案。 - Frank

0

更新的答案,用于从依赖组中排除参考库

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'
}

0
以这种方式,您可以从库中排除一些包,这只是一个概念示例。
compile ('com.github.ganfra:material-spinner:1.1.1'){
        exclude group: 'com.nineoldandroids', module: 'library'
        exclude group: 'com.android.support', module: 'appcompat-v7'
}

这些是你的依赖项中的包还是引用库?我认为是后者。如果不是,请举一个例子说明如何在com.github.ganfra内部使用它,例如“com.github.ganfra.somepackage”。 - Frank
我不知道关于应用程序的情况,但是假设您正在构建一个库,并且希望避免导入其他库和包时可能出现的冲突,但用户可能已经导入了那些流行的库,例如Retrofit等。在这种情况下,我们可以使用排除命令从您的库中删除这些依赖项...以便您的库可以使用项目本身中的依赖项。 - Ak9637

0
您可以在 build.gradle 中使用 sourceSets 过滤您不想打包进 apk 或 aab 的包或类。例如 -
android {
  sourceSets {
        main {
            java {
                exclude 'com/a/b/helper/**'
                exclude 'com/a/ext/util/TestUtils.java'
            }
        }
    }
}

希望它能帮助到你 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接