使用Gradle为不同的应用程序变体使用不同的资源

18


我有一个安卓应用程序,想要创建不同的版本。具体来说,我想要创建两个版本,每个版本使用不同的字符串(即不同的 strings.xml 文件),也许还要使用一些不同的图标。

我已经尝试在项目根目录下创建了两个文件夹:flav1flav2,并使用以下的 build.gradle 文件:

android {
    compileSdkVersion "Google Inc.:Google APIs:15"
    buildToolsVersion "17.0.0"

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }

        instrumentTest.setRoot('tests')
    }

    productFlavors {
        flav1 {
            packageName "com.ic.flav1"
        }

        flav2 {
            packageName "com.ic.flav2"
        }
    }

    android.sourceSets.flav2 {
        res {
            srcDir 'flav2'
        }
        resources {
            srcDir 'flav2'
        }
    }
    android.sourceSets.flav1 {
        res {
            srcDir 'flav1'
        }
        resources {
            srcDir 'flav1'
        }
    }
}

结果是没有一个字符串被识别,会得到多个以下类型的错误:

构建失败 :

错误:找不到与给定名称匹配的资源(在 'contentDescription' 中的值为 '@string/txt_addr')。

我错过了什么吗?build.gradle应该怎么写呢?

谢谢

1个回答

9
解决方案是在每个相应的res文件夹下添加目录值,所有字符串都被识别。

"res"和"resources"有什么区别?我是一个从Eclipse转来的AS新手...我在我的项目中看到了这个文件夹,但我不确定它的作用以及为什么每个口味都要有一个单独的"resources"。 - Lou Morda
Res和resources是同一件事情。只是AS使用的命名约定不同而已(“res”)。 为每个flavor拥有不同的资源,可以让你有机会为相同的资源ID(例如R.id.logo)设置不同的图片。 - Thomas Kaliakos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接