android - 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
我在互联网上搜索但没有找到任何帮助。
解决方案
R.style.AKTheme
是引用,而不是值,而在 BuildConfig 中只能使用值。
有几种方法可以实现您想要的:
- 在 BuildConfig: 中使用样式的 String 名称,
buildConfigField 'String', 'APP_THEME', '"AKTheme"'
然后在代码中获取样式 res id:
int style = context.getResources().getIdentifier(BuildConfig.APP_THEME, "style", context.getPackageName());
现在可以使用style
. - 您可以使用不同的源集。
如果您使用不同的构建类型,您可以为该构建类型创建一个目录,并将专门针对该构建类型的任何不同资源放在该目录中。该目录应创建在与main
源目录相同的目录中,并且命名与 buildType 完全相同。详情:https ://developer.android.com/studio/build/build-variants
推荐阅读
- python - 神经网络 XOR 总是给出 0.5
- sql - Oracle SQL:如果不是表或视图,它是什么?
- haskell - 将二进制数转换为没有递归性的十进制数 [HASKELL]
- android - 将注册用户的列表数据从一个应用程序发送到另一个应用程序?
- google-chrome - 如何将关键事件从应用程序发送到 Chrome OS 中的其他应用程序?
- ffmpeg - Ffmpeg将原始视频的两倍大小的视频转换为第二部分没有音频
- c++ - 未在范围内声明的函数/如何一起使用 header.h、header.cpp 和 main.cpp?
- c++ - 具有命名空间范围的名称的 c++ 内部链接
- python - 无法将复数转换为浮点数
- android - 在导航抽屉菜单项中更改开关颜色