我的项目有不同的构建类型,即调试,测试和生产,并且还有不同的产品风格,即QA和集成。我已经定义了
buildConfigField 'int', 'APP_THEME', 'R.style.AKTheme'
为每个风格分别设置一个主题。生成的BuildConfig.java
for app源集具有APP_THEME field
,并且按预期工作。
最近我开始为我的应用程序编写测试测试。当我尝试运行这些测试时,Android studio会给我一个无法解析AKTheme 的错误,即
测试源集的生成final int APP_THEME = R.style.AKTheme
中的 BuildConfig.java
。
生成的R.style.AKTheme
文件(测试源集)似乎无法访问BuildConfig.java
。我在互联网上搜索但没有找到任何帮助。
答案 0 :(得分:0)
R.style.AKTheme
是引用,而不是值,而在BuildConfig中,您只能使用值
有几种方法可以达到你想要的效果:
buildConfigField 'String', 'APP_THEME', '"AKTheme"'
int style = context.getResources().getIdentifier(BuildConfig.APP_THEME, "style", context.getPackageName());
style
。 main
sources目录相同的目录中创建,并且命名与buildType完全相同。详情:https://developer.android.com/studio/build/build-variants 答案 1 :(得分:0)
我遇到了同样的问题。我在build.gradle中有此选项,以根据环境获取正确的ssl证书。 :
buildConfigField 'int', 'SSL_CERTIFICAT_RAWRES_', 'R.raw.devcert'
这正在构建和运行项目,但是当我想运行任务时遇到了一个问题:“ compileDebugAndroidTestJavaWithJavac”(在我的案例中用于声纳)。编译器在自动生成buildConfig文件时找不到资源文件R。
解决方案是在build.gradle中放入一个字符串来标识我的证书文件“ devcert”,而不是直接使用resInt“ R.raw”:
buildConfigField 'String', 'SSL_CERTIFICAT_RAWRES_STRING', '"devcert"'
然后在我的代码中,我得到像这样的原始文件证书:
final int raw = context.getResources().getIdentifier(BuildConfig.SSL_CERTIFICAT_RAWRES_STRING, "raw", context.getPackageName());
这样,生成的buildConfig可以使用上面的代码正确找到String标识符以检索所需的原始文件。
答案 2 :(得分:0)
我在这里找到了答案:https://developer.android.com/studio/test#create_instrumented_test_for_a_build_variant
就我而言,我的测试项目和主项目引用了不同的包名称,例如在 BuildConfig.java 的顶部,一个引用包“com.xxx.xxx”,而一个引用包“com.xxx.xxx.test”
添加行
<块引用>testApplicationId = "com.xxx.xxx"
在应用级 build.gradle 文件中的 defaultConfig 为我解决了这个问题