如何从gradle构建风格中排除res文件夹?

时间:2015-10-21 15:39:57

标签: android gradle android-gradle build.gradle

我需要从风格中删除特定的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

2 个答案:

答案 0 :(得分:7)

我终于解决了这个问题!

我找到了this link

这样做了:

  1. 将xml文件添加到res / raw文件夹。我把它命名为resources_discard.xml,就是这样:

    <?xml version="1.0" encoding="utf-8"?>
    <resources xmlns:tools="http://schemas.android.com/tools"
    tools:discard="@raw/hd/*" />
    
  2. 此文件放在正确的目录结构中,名为lite(&#34; src / lite / res / raw&#34;)

  3. 这样,res / hd文件夹的内容不包含在lite版本中,有效地将我的精简构建apk大小减少了50%

    更新:要从不同的风格中排除一些图像,您必须将图像放入&#34; assets&#34;文件夹,并在gradle声明:

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

    我还了解到你在/ res / raw文件夹中没有子文件夹。

答案 1 :(得分:0)

您可以尝试使用拆分。

示例(来自android SDK网页):

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类是相同且可互换的(基本上与android SDK的不同版本之间发生的相同)。然后,为您的flavor创建至少两个特定的依赖项配置,一个用于应该使用MDPI的配置,另一个用于那些不应该使用MDPI的配置。

configurations {
    mdpiCompile
    allCompile
}

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

然后,由于在layoutAll中没有MDPI资源,所以你很高兴。