首页 > 解决方案 > BuildConfigField R.style.AKTheme 在 androidTest BuildConfig.java 类中不可访问

问题描述

我的项目有不同的构建类型,即调试、测试和生产,也有不同的产品风格,即质量保证和集成。我定义了一个

buildConfigField 'int', 'APP_THEME', 'R.style.AKTheme'

在 productFlavors 中为每种口味设置一个单独的主题。BuildConfig.java为应用程序源集生成的具有APP_THEME field并且它按预期工作。

最近我开始为我的应用程序编写仪器测试。当我尝试运行这些测试时,Android Studio 给了我无法解决 AKTheme的错误,即

final int APP_THEME = R.style.AKTheme在生成BuildConfig.java的测试源集中。

生成的文件(测试源集)似乎R.style.AKTheme无法访问。BuildConfig.java我在互联网上搜索但没有找到任何帮助。

标签: androidandroid-gradle-pluginandroid-testing

解决方案


R.style.AKTheme是引用,而不是值,而在 BuildConfig 中只能使用值。
有几种方法可以实现您想要的:

  1. 在 BuildConfig: 中使用样式的 String 名称,
    buildConfigField 'String', 'APP_THEME', '"AKTheme"'
    然后在代码中获取样式 res id:
    int style = context.getResources().getIdentifier(BuildConfig.APP_THEME, "style", context.getPackageName());
    现在可以使用style.
  2. 您可以使用不同的源集。
    如果您使用不同的构建类型,您可以为该构建类型创建一个目录,并将专门针对该构建类型的任何不同资源放在该目录中。该目录应创建在与main源目录相同的目录中,并且命名与 buildType 完全相同。详情:https ://developer.android.com/studio/build/build-variants

推荐阅读