当前位置: 代码迷 >> Android >> 如何从gradle构建风格中排除res文件夹?
  详细解决方案

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

热度:48   发布时间:2023-08-04 10:43:22.0

我需要从flavor中删除特定的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文件夹。 我把它命名为resources_discard.xml,这是它:

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

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

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

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

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

您可以尝试使用拆分。

示例(右侧来自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资源,因此您可以继续使用。

  相关解决方案