作者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