作者littleshan (我要加入剑道社!)
看板AndroidDev
标题[问题] R.java 与 library 的顺序
时间Wed Mar 21 10:30:33 2012
最近为了整理乱七八糟的 source tree
把一项 android project 的目录移动到另一个地方
然後在 eclipse 中重新汇入、设定 library
(这个 project 用了另外四个 library project 里面都包含 resource)
然後就爆炸了
一执行就 force close
logcat 出现
android.content.res.Resources$NotFoundException: Resource ID
#0x7f050030 is not valid
但打开 apk 後确认 resource 是有在里面的
google 了一阵子,试着使用 eclipse 中的 clean project
或是直接砍掉 R.java 让它重新产生等等的方法
全部都没有用
後来我挖出了可以执行的旧版程式送去 decompile 检查他的 R.java
发现旧版的 R.java 内容与新版完全不同!
比如说旧版可能是这样:
public static final class R {
public static final class color {
public static final int transparent = 0x7f060000;
}
...
public static final class string {
public static final int app_name = 0x7f040000;
...
}
}
新版变成了这样:
public static final class R {
public static final class color {
public static final int transparent =
0x7f040000;
}
...
public static final class string {
public static final int app_name =
0x7f050000;
...
}
}
也就是 resource type 的排列顺序就错了,产生出来的 id 也是错的
最後我打开 project property 调整了 library project 的顺序
结果...结果!结果就正确了 (怒
请问:
1. 这是 eclipse ADT 的 bug 吗?
2. 如果不是 bug,那我的 library project 应该如何排序才不会发生这种问题?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.135.3.139
1F:推 LaPass:这真的是恶梦.... orz.... 03/21 11:03
2F:推 LaPass:之前也被这种鬼问题卡很久,都是移动专案位置时出错 03/21 11:07
3F:→ KeySabre:之前听说把bin gen这些自动生成的资料夹砍掉让它重作可行 03/21 15:26
4F:→ littleshan:上述方法也试过喔 依然是错的 XD 03/21 16:09
5F:→ Killercat:这个问题无解,不过我当初全面clean(含lib project)可行 03/21 16:20
6F:→ Killercat:我猜(不确定)是因为目标专案产生res id的时候 发现跟 03/21 16:21
7F:→ Killercat:其中一个专案的某resource冲到,所以改assign另外一个 03/21 16:21
8F:推 blooker:其实是有解的 你可以用getIdentifier先拿id 03/21 23:59