我在运行仪器测试时遇到了这个异常:
INSTRUMENTATION_RESULT: shortMsg=android.content.res.Resources$NotFoundException
INSTRUMENTATION_RESULT: longMsg=android.content.res.Resources$NotFoundException: String resource ID #0x7f020001
我确定资源存在!
我的项目结构:用户项目 A ,以及lib项目 B (apklib)。
在项目B中,我定义了资源文件B-project/res/values/strings.xml
:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">my app</string>
<string name="branding">release</string>
</resources>
项目A取决于项目B,在项目A中,我重写了在B中定义的一些属性(在A-project/res/values/strings.xml
中):
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">For demo</string>
</resources>
打包项目A时,事情变得更加陌生:
在项目A生成的资源中,我找到了R.java:
public final class R {
public static final class attr {
}
public static final class string {
public static int app_name=0x7f020000;
public static int branding=0x7f020001;
}
}
我还在R.txt
目录中找到target
(我正在使用maven来管理项目):
int drawable icon 0x7f020000
int string app_name 0x7f030000
int string branding 0x7f030001
错误:
R.branding
0x7f020001
,但真正的资源ID是: 0x7f030001
!
我认为这就是为什么我得到了Resources$NotFoundException
,但是我试图清理并重新编译项目很多次,仍然遇到了同样的问题。
答案 0 :(得分:0)
请仔细按照步骤进行操作
1)清理所有项目
2)为您的特定项目导入特定的R.java。
3)只导入你需要的特定类,不要像这样导入(它会抛出错误的东西),你引用了多个R.java文件
import org.project.a.R;
import org.project.b.R;
如果您在项目A中,则导入org.project.a.R;只是没有导入org.project.b.R;
假设您在A中使用项目b中的类,那么您必须具体 import org.project.b.ClassName;