在自定义构建类型下找不到Drawable

时间:2016-08-19 12:43:48

标签: android android-gradle android-drawable android-build-type

我尝试为我的应用程序配置一个与我的发布配置相同的构建类型,只是它加载了一些用于测试应用程序的示例数据。我执行了以下步骤:

我在应用的buildTypes中使用了以下build.gradle配置:

buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        signingConfig signingConfigs.config
    }
    debug {
        applicationIdSuffix ".debug"
        versionNameSuffix "-debug"
    }
    sampledata {
        applicationIdSuffix ".sampledata"
        versionNameSuffix "-sampledata"
        signingConfig signingConfigs.config
    }
}

sourceSets {
    main { res.srcDirs = ['src/main/res', 'src/androidTest/res'] }
    sampledata { res.srcDirs = ['src/sampledata/res', 'src/main/res'] }
}

我在src文件夹下创建了相应的源集(文件夹结构)。

当我尝试使用以下语句获取资源时,找不到资源(返回0):

int resId = context.getResources().getIdentifier("someResource", "drawable", "com.myapp");

我在源代码集中使用字符串资源时没有遇到任何问题,但在此配置中我无法访问drawables 。将它们移至drawable下的main文件夹也无效。我错过了什么?

1 个答案:

答案 0 :(得分:0)

为了访问源集中的资源,包名必须与构建类型的名称匹配,即包括applicationIdSuffix。将getIdentifier()语句更改为

int resId = context.getResources()
    .getIdentifier("someResource", "drawable", "com.myapp.sampledata");

int resId = context.getResources()
    .getIdentifier("someResource", "drawable", context.getPackageName());