android – 资源$NotFoundException当使用Robolectric与Gradle

我一直在追踪this tutorial设置Robolectric来测试我的Android Gradle项目.

我不断碰到这个错误:

android.content.res.Resources$NotFoundException: no such label com.mypackage.dev:string/app_name

通过从教程中下载示例项目,我确定问题是我的productFlavors(dev,staging,production).向工作示例项目添加风味会导致同样的问题.你可以看到我的build.gradle in this answer的轮廓.

我已经看到各种答案(例如here),这表明我需要为每种风味指定sourceSets.我已经尝试了很多组合,但不能完全正确.有人可以帮忙吗?

另一件令我困惑的事情是,我看到的所有Robolectric样品似乎都在指定“instrumentTest”的sourceSets和依赖关系,即使Robolectric测试总是只在“test”文件夹中.在我的情况下,我已经在instrumentTest文件夹中有Robotium测试了,我不明白为什么我需要为Robotium代码添加Robolectric依赖项.

我偶然发现了同样的问题(资源未找到),并找到了解决方案.有一个PackageName的setter,所以在我的自定义测试运行器中,我设置包名后返回清单.就像是:

@Override protected AndroidManifest getAppManifest(Config config) {
    String manifestProperty = System.getProperty("android.manifest");
    if (config.manifest().equals(Config.DEFAULT) && manifestProperty != null) {
        String resProperty = System.getProperty("android.resources");
        String assetsProperty = System.getProperty("android.assets");
        AndroidManifest manifest = new AndroidManifest(Fs.fileFromPath(manifestProperty), Fs.fileFromPath(resProperty),
                Fs.fileFromPath(assetsProperty));
        manifest.setPackageName("com.mypackagename");
        return manifest;
    }
    return super.getAppManifest(config);
}

我希望这有帮助.

翻译自:https://stackoverflow.com/questions/22102176/resourcesnotfoundexception-when-using-robolectric-with-gradle

转载注明原文:android – 资源$NotFoundException当使用Robolectric与Gradle