簡體   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