Android - 在gradle中如何排除依赖的某些资源文件?

时间:2017-07-21 00:09:49

标签: android gradle android-gradle build.gradle gradlew

我已经检查了很多关于stackoverflow的帖子,到目前为止它们都没有。所以我有一个依赖于一堆AAR的APK,其中一个AAR有10个我不需要的音频文件。由于我无法直接删除依赖项,因为我需要一些API,因此我想确保这些音频文件不会内置到APK中。

我检查音频文件是否内置的方法是运行此命令: zipinfo MyApk.apk | grep .mp3

有没有人知道如何从我的依赖AAR中排除这些音频文件?

1 个答案:

答案 0 :(得分:0)

这是我以前在AAR中排除少量文件的内容:

final List<String> exclusions = [];
Dependency.metaClass.exclude = { String[] currentExclusions ->
    currentExclusions.each {
        exclusions.add("${getGroup()}/${getName()}/${getVersion()}/${it}")
    }
    return thisObject
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile ('com.android.support:appcompat-v7:20.+')
    debugCompile ('com.squareup.leakcanary:leakcanary-android:1.3.1')
            .exclude("res/values-v21/values-v21.xml")
    releaseCompile ('com.squareup.leakcanary:leakcanary-android-no-op:1.3.1')
}

tasks.create("excludeTask") << {
    exclusions.each {
        File file = file("${buildDir}/intermediates/exploded-aar/${it}")
        println("Excluding file " + file)
        if (file.exists()) {
            file.delete();
        }
    }
}

tasks.whenTaskAdded({
    if (it.name.matches(/^process.*Resources$/)) {
        it.dependsOn excludeTask
    }
})

您可以查看Original Answer here