Android 專案建置時出現 `R cannot be resolved` 或 `R.java` 內容異常,通常是資源檔(XML/圖片/字串)有錯誤導致 `aapt` 無法產生 `R.java`,或是 `gen/` 目錄下舊檔案殘留。本文提供標準排查與修復流程。
常見錯誤現象
- Java 代碼中 `R.id.xxx`、`R.layout.xxx` 紅線,提示 `R cannot be resolved to a variable`
- `gen/` 目錄下沒有 `R.java`,或 `R.java` 內容為空/不完整
- Console 輸出 `error: Error: No resource found that matches the given name`
快速修復三步驟
- 清理專案:Eclipse/ADT → `Project` → `Clean...` → 勾選專案 → `OK`
- 檢查資源錯誤:`Problems` 視圖 / `Console` 紅字,修復所有 XML 語法錯誤、圖片檔案損壞、資源命名不合法(如大寫、特殊字元)
- 刪除 gen/ 重建:專案右鍵 → `Android Tools` → `Fix Project Properties`,或手動刪除 `gen/` 目錄後再 `Clean`
資源檔常見錯誤清單
| 錯誤類型 | 例子 | 修正 |
| XML 語法錯誤 | 漏關標籤、屬性值未加引號 | 用編輯器語法高亮/格式化檢查 |
| 檔名/資源名非法 | `res/drawable/MyImage.png`、`@string/app_name` 含大寫 | 全小寫、底線、數字:`my_image.png` |
| 圖片損壞/格式不支援 | `.jpg` 實為 PNG、超過 16MP | 重新匯出標準 PNG/WebP,尺寸適中 |
| 重複資源 ID | 同名檔案在不同 density 目錄 | 確保同名檔案內容一致或重新命名 |
| AndroidManifest.xml 錯誤 | package 名稱與 Java 套件不符 | 核對 `package="com.example.app"` |
進階:命令列強制重新產生 R.java
# 在專案根目錄
ant clean
# 或 Gradle
./gradlew clean assembleDebug
# 查看 aapt 輸出
aapt package -f -m -J gen -M AndroidManifest.xml -S res -I android.jar
Android Studio / Gradle 專案對應操作
- `Build` → `Clean Project`
- `Build` → `Rebuild Project`
- `File` → `Invalidate Caches / Restart` → `Invalidate and Restart`
- 檢查 `build.gradle` 中 `compileSdkVersion`、`buildToolsVersion` 與 SDK Manager 安裝版本一致
避坑提醒
- **不要手動編輯 `R.java`** —— 它是自動產生的,任何修改下次建置會被覆蓋
- 資源檔修改後,**務必 Save All (Ctrl+Shift+S)** 再 Clean
- 若專案引用 Library Module,確保 Library 也 `Clean` 且無資源錯誤
- 大量新增圖片時,分批建置,避免 `aapt` 記憶體不足
遵循「Clean → 修資源錯 → 刪 gen → Rebuild」標準流程,99% 的 `R.java` 找不到/報錯問題可在 5 分鐘內解決。