如何在同一个android项目的多个资源文件夹之间进行更改?

时间:2015-09-07 09:40:48

标签: java android gradle

我有一个Android项目,其中我想拥有2个(可能更多)资源文件夹(每个不同的外观一个),核心功能是相同的但它们之间的唯一区别是颜色,主题和值字符串等(它们都具有相同的资源id,只有不同的内容/值) 我希望能够指定我想要编译的文件夹。

enter image description here

之前我曾尝试在productFlavours中指定res.srcDirs,但它无法正常工作。

3 个答案:

答案 0 :(得分:1)

使用这些依赖项:

android{
.....
sourceSets {
    main.res.srcDirs += ['src/main/res', 'src/main/res_apt2']
      }
}

编辑:首先在main /文件夹中手动添加“res_apt2”文件夹,然后添加此行

答案 1 :(得分:1)

这正是口味的含义。定义与flavor相同名称的flavor和source文件夹。这将与" main"处于同一水平。并且会有" res"在里面。

productFlavors {
      look1 {}
      look2 {}
}

然后,您的项目的文件夹look1look2与main相同,包含您需要的所有资源,例如look1/res/values/strings.xml

答案 2 :(得分:1)

阅读本页,它非常详细:Using flavours to build multiple editions of an application

但简而言之:

Flavors可以覆盖你的主要代码和文件,所以如果你有一个res文件夹并且想要修改应用程序的外观,你只需要在main上面有一个文件夹,其名称与新res文件夹的风格相同,同名但修改内容。

这是您的gradle文件。

productFlavors {
    vanilla {
        packageName "com.example.multiflavorapp"
    }
    strawberry {
        packageName "com.example.multiflavorapp.strawberry"
    }
}

这是你的目录(不执行它,我不能发布图像)

app/
|--libs/
|--src/
   |--vanilla/
   |  |--java/
   |     |--com/example/
   |        |--Flavor.java
   |--strawberry/
   |  |--java/
   |     |--com/example/
   |        |--Flavor.java
   |--main/
      |--java/
      |  |--...
      |--res/
      |  |--...
      |--AndroidManifest.xml

示例如果您的代码中引用了一个字符串app_name =“vanilla”,并希望在另一种风格中使用不同的值来修改该值,请说app_name =“strawberry”就是这样。