Как исключить папку res из атрибутов построения градации?

У меня есть требование удалить конкретную папку res из аромата.

sourceSets { main { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src'] res.srcDirs = ['res'] aidl.srcDirs = ['src'] assets.srcDirs = ['assets'] } } productFlavors { flavor1 { sourceSets { flavor1 { resources { exclude 'res/drawable-mdpi/*' } } } } flavorDimensions "flavor" } 

Но все же папка drawable-mdpi подходит к apk.

Так может кто-нибудь, пожалуйста, указать, какую ошибку я делаю.

Спасибо Vivek

Я, наконец, решил эту проблему!

Я нашел эту ссылку .

И сделал это:

  1. Добавьте xml-файл в папку res / raw. Я назвал его resource_discard.xml, вот он:

     <?xml version="1.0" encoding="utf-8"?> <resources xmlns:tools="http://schemas.android.com/tools" tools:discard="@raw/hd/*" /> 
  2. Этот файл помещается в правильную структуру каталогов для моего вкуса, называемого lite "scr / lite / res / raw"

Таким образом, содержимое папки res / hd не включается в сборку lite, что значительно снижает размер apk для сборки Lite на 50%

UPD: чтобы исключить некоторые изображения из разных вкусов, вам нужно поместить изображения в папку с данными, а в градисе объявить:

  flavor { aaptOptions { ignoreAssetsPattern '/folder:*.jpg:*.png' //use : as delimiter } } 

Также я узнал, что у вас нет подпапок в папке / raw.

Вы можете попробовать использовать расщепления.

Пример (прямо с веб-страницы SDK Android):

 android { ... splits { // Configures multiple APKs based on screen density. density { // Configures multiple APKs based on screen density. enable true // Specifies a list of screen densities Gradle should not create multiple APKs for. Here you should add all the densities except MDPI. exclude "ldpi", "xxhdpi", "xxxhdpi" // Specifies a list of compatible screen size settings for the manifest. compatibleScreens 'small', 'normal', 'large', 'xlarge' } } } 

Если это не сработает, вы можете разделить ваши res / MDPI и остальные папки res / Density на два отдельных модуля (давайте назовем их layoutMdpi и layoutAll). Оба модуля должны иметь одинаковое имя пакета, поэтому их классы R идентичны и взаимозаменяемы (по сути, это то же самое, что происходит между различными версиями SDK android). Затем создайте по крайней мере две конкретные конфигурации зависимостей для ваших вкусов, одну для тех, кто должен использовать MDPI, и один для тех, кто не должен.

 configurations { mdpiCompile allCompile } dependencies { ... mdpiCompile project(':layoutMdpi') allCompile project(':layoutAll') } 

И тогда, поскольку ресурсы MDPI отсутствуют в layoutAll, вам хорошо идти.