ไม่สามารถแก้ไข R - ข้อผิดพลาดของ Android


1071

ฉันเพิ่งดาวน์โหลดและติดตั้ง Android SDK ใหม่ ฉันต้องการสร้างแอปพลิเคชันแบบง่าย ๆ เพื่อทดสอบ

ตัวช่วยสร้างสร้างรหัสนี้:

package eu.mauriziopz.gps;

import android.app.Activity;
import android.os.Bundle;

public class ggps extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}

แต่Eclipseทำให้ฉันมีข้อผิดพลาด

R ไม่สามารถแก้ไขได้

ออนไลน์

setContentView(R.layout.main);

ทำไม?

PS: ฉันจะมีไฟล์ XML ชื่อภายใต้main.xmlres/layout/


สำหรับผู้ที่ยังคงประสบปัญหากับ eclipse ไม่สามารถอัปเดต / สร้าง R.java ทางออกที่เป็นไปได้คือการสร้าง dummy xml และเพียงแค่ลบ xml นั้น ในกรณีของฉันนี่คือทางออก
denil

สุจริตมันฟังดูงี่เง่า (และเป็น) แต่ปรับเปลี่ยน AndroidManifest.xml แล้วเลิกทำการแก้ไขนั้นแล้วบันทึกไฟล์ที่ทำงานให้ฉัน ถ้าฉันทำความสะอาดโครงการหลังจากนั้นมันก็พังอีกครั้ง และทุกครั้งที่ฉันคิดว่า Xcode เป็น IDE เดียวที่มีข้อผิดพลาดลึกลับประเภทนี้
iwasrobbed

3
คุณลองคลิกขวาที่โครงการ -> เครื่องมือ Android -> แก้ไขการตั้งค่าโครงการหรือไม่
Sergei

6
โปรดตรวจสอบไฟล์เลย์เอาต์ XMl ของคุณหากมีข้อผิดพลาดเป็น xml คุณไม่สามารถสร้าง R.java ได้และข้อผิดพลาดจะเกิดขึ้นหลังจาก bulid และทำความสะอาดด้วย
swiftBoy

1
แค่คำแนะนำ: เมื่อฉันเปลี่ยน IDE จาก Eclipse เป็น Android Studio สิ่งนี้ก็หยุดฉัน
mata

คำตอบ:


840

หลังจากติดตามปัญหานี้เช่นกันฉันพบบันทึกย่อนี้ในเอกสารประกอบ Android:

http://source.android.com/source/using-eclipse.html

* หมายเหตุ: บางครั้ง Eclipse ชอบเพิ่มคำสั่ง "import android.R" ที่ด้านบนของไฟล์ของคุณที่ใช้ทรัพยากรโดยเฉพาะอย่างยิ่งเมื่อคุณขอให้ Eclipse เรียงลำดับหรือจัดการการนำเข้า นี่จะทำให้การทำลายของคุณ ระวังคำสั่งการนำเข้าที่ผิดพลาดเหล่านี้และลบออก *

ขณะที่จะผ่านบทเรียนตัวอย่าง Android ผมมักจะใช้Ctrl+ Shift+ Oคำสั่ง "จัดระเบียบการนำเข้า" และสร้างงบนำเข้าใด ๆ ที่ขาดหายไป บางครั้งสิ่งนี้จะสร้างคำสั่งการนำเข้าที่ไม่ถูกต้องซึ่งจะซ่อนR.javaคลาสที่สร้างขึ้นโดยอัตโนมัติเมื่อคุณสร้าง


32
สิ่งนี้เกิดขึ้นเช่นกัน แต่ไฟล์เลย์เอาต์ที่เด้งขึ้นมาสามารถทำให้เกิดขึ้นได้
GHz

113
ข้อผิดพลาดแบบคลาสสิคนี้อยู่ใน Eclipse เป็นเวลาหลายปีและไม่เคยได้รับการแก้ไข ผู้คนหลายพันคนประสบปัญหาเดียวกันนี้
Carol

52
นักพัฒนา Eclipse โปรดลบ $ £% & "$ & / bug! นักพัฒนา Google นี้โปรดให้ชุด $ & $"% & Android Android คล้ายกับ Xcode สำหรับ iPhone!
Abramodj

18
@ 2-Stroker: มันเป็นข้อผิดพลาด มันเกิดขึ้นกับฉันเมื่อฉันสร้างโครงการ Andorid ใหม่ผ่าน eclipse WIZARD และมันบ่นเกี่ยวกับ 'R ไม่สามารถแก้ไขได้' ฉันต้องคอมเม้นท์บรรทัด setContentView & getMenuInflater จากนั้น eclipse ก็สร้าง R.java หลังจากนั้นฉันก็ไม่สามารถคอมเม้นท์ setContentView & getMenuInflator ได้ Abramodj ถูกต้องสภาพแวดล้อมมีปัญหาร้ายแรงหากแม้แต่ตัวอย่าง 'สวัสดีโลก' ของคุณก็ไม่ได้รวบรวม แก้ไข google!
CF_Maintainer

5
Google ไม่ให้เงิน eclipse.org เพื่อรับไอเท็มแบบนี้ได้อย่างไร
Cris

391

ทุกครั้งที่ฉันมีปัญหากับ R ไม่ถูกสร้างหรือหายไปนี่เป็นเพราะปัญหาบางอย่างในไฟล์เลย์เอาต์ XML ที่ป้องกันไม่ให้แอปพลิเคชันถูกสร้างขึ้น


21
+1 สำหรับสิ่งนี้ ฉันมีไฟล์ styles.xml ที่เก่ากว่าพร้อม parent = "android: WindowTitleBackground" และมันก็ทำให้งานสร้างของฉันพังและป้องกันสิ่งที่สร้างขึ้นเพื่อ "gen" ข้อผิดพลาดไม่ได้ถูกรายงานจริงยกเว้นในหน้าต่างคอนโซลทันทีที่ฉันเปิดโครงการครั้งแรก
Scott Persinger

12
ถ้าคุณคัดลอกเลย์เอาต์จากโครงการอื่นและกำลังได้รับสิ่งนี้มองหา drawable ที่ขาดหายไป - ซึ่งจะแก้ไขได้ทันที!
Gabor

4
ฉันผอมฉันมีปัญหาเดียวกันมีวิธีใดบ้างที่จะรู้ว่าแม่มดเป็นหนึ่งในเลย์เอาต์หรือไม่?
Sergey Kucher

3
ใช่ฉันไม่มีไฟล์ที่สามารถถอดออกได้และทำให้ไฟล์ R ถูกสร้างขึ้น สิ่งประหลาดคือฉันมีการandroid:icon="@drawable/XXX"ประกาศ<item>ในทรัพยากรในเมนู แต่ไม่มีสัญญาณ squiggle สีแดงว่าทรัพยากร drawable XXX ไม่พบ ในอีกกรณีหนึ่ง"@drawable/YYY" ถูกตั้งค่าสถานะเมื่อไม่พบ YYY แต่ไม่ใช่ในกรณีนี้ ด้วยเหตุผลบางอย่าง.
เทย์เลอร์

5
ใช่แก้ปัญหาได้ดี เมื่อมีคนได้รับข้อผิดพลาดนี้ .. หลายครั้งที่ไฟล์เลย์เอาต์ทั้งหมดถูกทำเครื่องหมายว่ามีข้อผิดพลาด .. นี่เป็นเพราะพวกเขากำลังมองหาอาร์หนึ่งในนั้นอย่างไรก็ตามมีข้อผิดพลาดที่ไม่เกี่ยวข้องกับการยกเลิกการสร้าง ในกรณีของฉัน drawable ขาดหายไป
Todd Painton

201

เมื่อใดก็ตามที่คุณได้รับ

R ไม่สามารถแก้ไขได้

จากนั้นตรวจสอบ/resไดเรกทอรีและจะต้องมีไฟล์บางไฟล์ที่มีข้อผิดพลาดอยู่ในนั้น ตัวอย่างเช่นอาจเป็นไฟล์เลย์เอาต์หรืออาจเนื่องมาจากทรัพยากรบางอย่างหายไป แต่คุณได้กำหนดไว้แล้วในไฟล์ XML

หากคุณมีรูปภาพเพิ่มเติมแม้แต่ที่ไม่ได้ใช้ (!) หรือไม่ได้อ้างถึง (!) ในโฟลเดอร์เช่น res / drawables-mdpi ซึ่งไม่สอดคล้องกับข้อกำหนดการตั้งชื่อไฟล์ (อาจมีเพียง [a-z0-9_] คลาส R.java อาจไม่สร้างก่อให้เกิดห่วงโซ่ของเหตุการณ์โพสต์อื่น ๆ ทั้งหมดที่อ้างถึง หวังว่ามันจะช่วย!


ฉันมีปัญหากับตัวอย่าง ApiDemos ทรัพยากรที่ขาดหายไปบางส่วนในไฟล์ strings.xml ข้อผิดพลาดของ XML แสดงอยู่ในคอนโซลของ Eclipse
lemotdit

ขอบคุณ! นี่เป็นปัญหาของฉันฉันมีเลย์เอาต์ที่ผิดพลาด แต่ไม่มีข้อความเกี่ยวกับเรื่องนี้

29
คุณจะตรวจสอบข้อผิดพลาดได้อย่างไร? ฉันไม่ได้อะไรเลยในคอนโซลเมื่อสร้าง / ใช้งาน
Vincent

4
จะค้นหาไฟล์ WHICH ซึ่งทำให้เกิดข้อผิดพลาดได้อย่างไร Eclipse ไม่ได้ทำเครื่องหมายไว้!
Yar

1
ฉันมี 2 ภาพที่มีชื่อเดียวกันในโฟลเดอร์ hdpi (1 ที่มี png และ 1 ที่มีรูปแบบ jpg) การลบ 1 ในนั้นแก้ไขปัญหาได้
Haseeb Jadoon

134

โครงการของฉันมี r.java.at ไว้ด้วย แต่แรกแล้ว R.layout.main ทำงานได้ดี แต่หลังจากเพิ่มรหัสบางอย่างแล้วมันก็ใช้งานไม่ได้และข้อผิดพลาดคือ R.layout.main ไม่สามารถแก้ไขได้ ?

ดูการนำเข้าของคุณ โอกาสที่จะเกิดเส้น:

import android.R;

จะมี หากเป็นกรณีนี้ให้ลบออกเพื่อให้โครงการของคุณจะแก้ไข R ไม่ได้อยู่ในคลาส Android Resources เริ่มต้น แต่สร้างโดยอัตโนมัติหนึ่งรายการจาก / res / โฟลเดอร์ของคุณ


5
ขอบคุณ @ Dimitar ที่แก้ไขปัญหาของฉัน! Eclipse และคุณลักษณะการนำเข้าอัตโนมัติดูเหมือนจะทำให้ฉันได้รับโดยการเพิ่มบรรทัดการนำเข้านั้นโดยอัตโนมัติ
Steven

7
ฉันยังมีปัญหาที่คล้ายกันเมื่อฉันตั้งชื่อเลย์เอาต์โดยใช้อักษรตัวใหญ่
Travis

นี่เป็นหนึ่งในเหตุผล 5 อันดับแรกที่ผู้ใช้ได้รับ "ไม่พบ R" ฉันได้รวบรวมหน้าปัญหา / โซลูชันด้วยรูปภาพที่แสดง 5 หลักที่ลิงค์ด้านล่าง หวังอย่างยิ่งว่ารายการนี้จะช่วยผู้คนเนื่องจากปัญหานี้เป็นปัญหาทั่วไป spragucm.wordpress.com/2014/05/13/…
Chris Sprague

หลังจากลบ R ในบางแห่ง R ใช้เป็นคลาส & กำลังให้ข้อผิดพลาดตอนนี้จะแก้ไขได้อย่างไร
Narendra Jaggi

96

และอีกสิ่งหนึ่งที่อาจทำให้เกิดปัญหานี้:

ฉันติดตั้ง ADT ใหม่ (ข้อ 22) มันหยุดการสร้างโฟลเดอร์ซึ่งรวมถึงgen R.javaวิธีแก้ไขคือติดตั้งเครื่องมือ SDK ของ Android SDK ใหม่จาก Android SDK Manager

วิธีแก้ปัญหาพบได้ที่นี่


ตัวเองด้วย และเมื่อฉันเลือกผู้จัดการ SDK แล้วเห็นเครื่องมือสร้างจะตรวจสอบโดยอัตโนมัติสำหรับการติดตั้งโดยมีหมายเหตุว่ามันไม่ได้ติดตั้ง! สิ่งที่ช่วยให้???
David ที่ HotspotOffice

ฉันมีปัญหาเดียวกัน ฉันดีใจที่คุณแบ่งปันสิ่งนี้ ฉันดูข้อผิดพลาดจากรหัสของฉันเองสองวัน ฉันได้ลงทะเบียนกับ Google เป็นอย่างมากเพราะข้อความแสดงข้อผิดพลาดนี้แก้ไขได้ยากมาก แต่เกิดจากข้อผิดพลาดของตัวเองเครื่องมือทั้งหมดไม่ได้รายงานอย่างถูกต้องว่าเป็นสาเหตุอะไร ฉันได้เปลี่ยนแปลงโครงการของฉันในเวลาเดียวกันดังนั้นฉันคิดว่ามันเป็นความผิดของฉันอีกครั้ง
Reijo Korhonen

5
ทำงานให้ฉันขอบคุณ! มันเป็นการตอกย้ำมนต์ของฉัน: "ไม่ปรับปรุงอะไรในขณะที่การพัฒนา"
Rodrigo Dias

ฉันแขวนอยู่รอบ ๆ เพื่อค้นหาคำตอบ แต่ไม่มีอะไรทำงานให้ฉัน ฉันคิดว่ามันเป็นปัญหา eclipse หรือ sdk อย่างที่คุณพูดฉันแค่ลบ prev eclipse bundle และติดตั้งใหม่ แล้วมันก็ใช้งานได้ คำตอบของคุณได้รับการช่วยเหลือ
ผู้เริ่มต้น

นี่เป็นปัญหาในกรณีของฉัน! เสียวันหนึ่งพยายามแก้ไขข้อผิดพลาด R เพิ่ม / ลบข้อมูลอ้างอิงและลองใช้ตัวเลือกอื่น ๆ Mine เป็นชุดใหม่ของ ADT และการสร้างโครงการ android ใหม่และยังคงได้รับข้อผิดพลาด ในที่สุดมันก็เปิดออกฉันต้องติดตั้งการอัปเดตที่มีอยู่ทั้งหมดของ Android SDK Tools, เครื่องมือแพลตฟอร์ม Android SDK และเครื่องมือสร้าง SDK: p
Saurabh Kumar

87

R.javaเป็นไฟล์ที่ปลั๊กอิน Android Eclipse สร้างขึ้นในขณะที่สร้างแอปพลิเคชันของคุณ R.javaถูกสร้างขึ้นภายใต้ไดเรกทอรี "gen" ไฟล์นี้สร้างจากข้อมูลในไดเรกทอรี "res" หากคุณเรียกใช้เลือก "Project" -> "Clean ... " บนเมนู Eclipse จะลบและสร้างR.javaไฟล์ขึ้นใหม่

ปัญหา "R ไม่สามารถแก้ไขได้" เกิดขึ้นเมื่อคุณเปลี่ยนชื่อแพ็คเกจในAndroidManifest.xmlไฟล์ จะใช้ชื่อแพคเกจ Android ของคุณเพื่อสร้างไดเรกทอรีย่อยภายใต้ไดเรกทอรี "gen" ที่มันเก็บR.javaไฟล์

Eclipse อาจมีปัญหาในการดำเนินการใหม่ทั้งหมดเนื่องจากสับสนว่าR.javaไฟล์อยู่ที่ไหนเมื่อคุณเปลี่ยนชื่อแพ็กเกจ Android คุณสามารถเปลี่ยนชื่อไดเรกทอรีย่อยภายใต้genเพื่อให้ตรงกับชื่อแพคเกจใหม่ของคุณหรือคุณสามารถเปลี่ยนชื่อแพคเกจของคุณกลับไปเป็นชื่อเดิม ทำความสะอาดและเปลี่ยนชื่อแพ็คเกจเป็นชื่อใหม่ที่คุณต้องการ สิ่งนี้จะทำงานได้ดีที่สุดถ้าคุณหยุด Eclipse จากการพยายามสร้างในขณะที่คุณกำลังเปลี่ยนชื่อแพ็คเกจ ภายใต้เมนู "โครงการ" ให้ยกเลิกการเลือกตัวเลือก "สร้างโดยอัตโนมัติ" และเมื่อกล่องโต้ตอบ "ล้าง ... " ถามว่าควร "เริ่มสร้างทันที" หรือไม่เลือกช่องทำเครื่องหมายเพื่อไม่พยายามสร้างในขณะที่คุณกำลังเปลี่ยนแปลง ชื่อแพ็คเกจ หลังจากที่คุณเปลี่ยนชื่อแล้วคุณสามารถเปิด "สร้างโดยอัตโนมัติ" อีกครั้ง

โปรดทราบว่าหากAndroidManifest.xmlชื่อแพคเกจไฟล์ของคุณไม่ตรงกับชื่อแพ็คเกจ Java ของคุณ Eclipse จะลงท้ายด้วยการเพิ่ม "import <ชื่อแพคเกจ Android ของคุณ> .R;" โดยอัตโนมัติ บรรทัดใน.javaไฟล์ทั้งหมดของคุณที่มีการอ้างอิงถึง R หากคุณเปลี่ยนAndroidManifest.xml ชื่อแพ็กเกจบางครั้ง Eclipse จะไม่อัปเดตการนำเข้าที่เพิ่มทั้งหมดเหล่านี้ หากเป็นเช่นนั้นให้ใช้ Eclipse refactoring ( ALT+ Shift+ R) เพื่อเปลี่ยนคำสั่งการนำเข้าในหนึ่งในไฟล์ Java ของคุณเป็นAndroidManifest.xmlชื่อแพ็กเกจใหม่ของคุณ วิธีที่ดีที่สุดคือทำในขณะที่คุณปิดใช้งาน "สร้างโดยอัตโนมัติ"


21
ดูเหมือนว่าจะเป็นการตัดและวางโดยไม่มีการอ้างอิง
Casebash

1
หลายคัดลอก / วางของไฟล์และชื่อ refactoring นำไปสู่ปัญหาเดียวกันแม้จะมีชื่อไฟล์และเนื้อหาก็โอเค การทำความสะอาดโครงการการลบ R.java ด้วยตนเองและส่วนหัวนำเข้าทั้งหมดจากนั้นสร้างส่วนหัวนำเข้าเหล่านี้ใหม่ (ยังคงมี CTRL + SHIFT + O) ทำงานได้ดี
hornetbzz

สิ่งนี้ใช้ได้สำหรับฉัน ฉันเปลี่ยนชื่อแพ็คเกจในไฟล์ Manifest ฉันต้องใช้ ctrl-shift-O ในคลาสที่อ้างอิงค่าคลาส R ที่สร้างขึ้นเพื่อเพิ่มการนำเข้าที่ถูกต้อง
Chuck Krutsinger

สิ่งนี้แก้ไขได้สำหรับฉัน เคยเห็นปัญหาการนำเข้าเกิดขึ้นในอดีต แต่คราวนี้ปัญหาคือชื่อแพคเกจในรายการไม่ตรงกับชื่อแพ็กเกจในโฟลเดอร์ src
Jim Range

ฉันมีสองกิจกรรมในใบสมัครของฉัน หนึ่งมีชื่อแพคเกจที่แตกต่างกับชื่อ R ที่ถูกสร้างขึ้น ฉันต้องนำเข้า R ด้วยตนเองโดยใช้บางอย่างเช่นimport com.example.main.package.name.R;
Oliver Moran

85

สิ่งที่จะพูดถูกต้อง

R เป็นคลาสที่สร้างขึ้นโดยอัตโนมัติซึ่งเก็บค่าคงที่ที่ใช้เพื่อระบุทรัพยากรของคุณ หากคุณไม่มีไฟล์ R.java (มันจะเป็น gen / eu.mauriziopz.gps / R.java ใน> Eclipse กับ 1.5 SDK) ฉันขอแนะนำให้ปิดและเปิดโครงการของคุณใหม่หรือไปที่> โครงการ> สร้างทั้งหมด (และเลือก "สร้างโดยอัตโนมัติ" ในขณะที่มีตามที่แนะนำโดย> Josef) หากนั่นไม่ได้ผลดีกว่าลองสร้างโครงการใหม่หากปัญหาถูกสร้างขึ้นใหม่กว่า> โพสต์ที่นี่อีกครั้งและเราจะพูดถึงรายละเอียดเพิ่มเติม

แต่ฉันพบว่ามีปัญหาอื่นที่ทำให้เกิดปัญหาแรก เครื่องมือในไดเรกทอรี SDK ไม่มีสิทธิ์ในการดำเนินการดังนั้นจึงเป็นเหมือนไม่มีอยู่สำหรับ Eclipse ดังนั้นจึงไม่ได้สร้างR.javaไฟล์

ดังนั้นการแก้ไขสิทธิ์และเลือก "สร้างโดยอัตโนมัติ" แก้ปัญหาได้


@Jignesh cd $ANDROID_SDK_ROOT/build-tools/<version>- จากนั้นchmod a+xในไฟล์เช่นaapt, aidl, dexdump, dxฯลฯANDROID_SDK_ROOTควรจะตั้งอยู่ในสภาพแวดล้อมของคุณและมันจะชี้ไปที่การติดตั้ง SDK ของคุณ ตัวอย่างเช่น/opt/android-sdk. มันสำคัญที่จะต้องตั้งค่าทั้งสองANDROID_SDK_ROOTและANDROID_NDK_ROOTเนื่องจากเครื่องมือ Android ใช้ภายใน ดูไดเรกทอรี NDK ที่แนะนำหรือไม่ ในรายการผู้ใช้ NDK
jww

@Lewis .. ฉันเลือก "สร้างโดยอัตโนมัติ" แล้ว แต่ข้อผิดพลาดยังคงอยู่
d_unknown

39

R เป็นคลาสที่สร้างขึ้นโดยอัตโนมัติซึ่งเก็บค่าคงที่ที่ใช้เพื่อระบุทรัพยากรของคุณ หากคุณไม่มีไฟล์ R.java (อาจเป็น gen / eu.mauriziopz.gps / R.java ใน Eclipse ด้วย 1.5 SDK) ฉันขอแนะนำให้ปิดและเปิดโครงการของคุณใหม่หรือไปที่โครงการ> สร้างทั้งหมด (และ เลือก "สร้างโดยอัตโนมัติ" ในขณะที่มีตามคำแนะนำโดย Josef) หากนั่นไม่ได้ผลดีกว่าลองสร้างโครงการใหม่ถ้าปัญหาถูกสร้างขึ้นใหม่กว่าโพสต์ที่นี่อีกครั้งและเราจะพูดถึงรายละเอียดเพิ่มเติม


8
สิ่งนี้ใช้ได้สำหรับฉัน แต่ฉันต้อง "Project -> Clean ... " ก่อน
Matt Connolly

27

ปิดไฟล์ทั้งหมดล้างโครงการรีสตาร์ท Eclipse


23
+1 แต่บางครั้งก็ต้องการการรีสตาร์ท 3 eclipse และล้างอีก 7 โครงการ ลองต่อไป ;-) #rant
Matthias Bauch

3
มิกซ์ด้วยการสัมผัส (แก้ไข + บันทึก) ไฟล์. xml (strings.xml ... )
Ali Shakiba

24

AndroidManifest.xmlมันเป็นมูลค่าการตรวจสอบใน คุณลักษณะpackageมีค่าที่ถูกต้อง

นั่นคือ:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="your.correct.package.name"
   ...

หลังจากที่คุณเปลี่ยนแปลงสิ่งนั้นR.javaจะถูกสร้างขึ้นใหม่


ชื่อแพ็คเกจเดิมของฉันคือ com.xxxxxdroid.router ฉันสร้างแอพรุ่นใหม่ขึ้นมาแล้ว com.xxxxxdroid2.router เมื่อฉันทำสิ่งนี้แล้วฉันต้องอัปเดตชื่อแพ็คเกจใน AndroidManifest.xml แต่หลังจากนั้นฉันก็เริ่มคัดลอกและวางคลาสเก่าในภายหลัง ขอบคุณสำหรับตัวชี้!
Eugene van der Merwe

นี่เป็นการแก้ไขปัญหาของฉันฉันกำลังทำงานในไฟล์ xml ดีใจที่ฉันจำได้ว่าไฟล์ใดฉันได้โหลดมาแล้ว ... ขอบคุณ ...
GHz

19

ข้อผิดพลาดนี้อาจเกิดจากการเพิ่มกิจกรรมในเนมสเปซที่แตกต่างจากเนมสเปซรูทสำหรับแพ็คเกจของคุณ

ตัวอย่างเช่นหากcom.example.myappเป็นรูทเนมสเปซสำหรับแพ็คเกจของคุณคุณสามารถเพิ่มกิจกรรมลงในcom.example.myapp.activitiesเนมสเปซ

สิ่งนี้จะทำให้เกิดข้อผิดพลาด "R ไม่สามารถแก้ไขได้"

ในการแก้ไขการนำเข้า R ในเนมสเปซเริ่มต้นในกิจกรรมของคุณควรทำดังนี้

import com.example.myapp.R;

สิ่งนี้ช่วยฉันฉันได้ย้ายกิจกรรมของฉันลงในแพ็คเกจใต้รูทโดยเพิ่มแพ็คเกจรูทเป็นการนำเข้า (import com.example.myapp.R;) เพื่อแก้ไขปัญหา
eageranalyst

19

พร้อมด้วยคำแนะนำที่ดีในคำตอบก่อนหน้าตรวจสอบให้แน่ใจว่าได้ตั้งค่าเป้าหมาย Android ของคุณแล้ว:

  1. คลิกขวาที่โครงการของคุณ
  2. เลือกคุณสมบัติ
  3. เลือก Android ในเมนูด้านซ้าย
  4. ทำเครื่องหมายที่ช่องถัดจากเป้าหมายการสร้างโครงการที่เหมาะสม
  5. คลิกใช้และตกลง

แก้ไข: หนึ่งปีต่อมาฉันพบสาเหตุอื่น ฉันมีภาพ. jpg ในโฟลเดอร์ drawable ที่มีชื่อเดียวกันกับภาพ. png การอ้างอิงอิมเมจนี้ในรหัสของฉันต้องทำให้โปรแกรมสับสนและทำให้เกิดข้อผิดพลาด "R ไม่สามารถแก้ไขได้"


17

ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้งเครื่องมือสร้าง Android จาก sdk manager

คลิกขวาที่โปรเจ็กต์ Properties-> Java BuildPath เลือก Library และเพิ่ม android-support.jar ทำตามขั้นตอนต่อไปนี้

ไปที่ Project-> Properties-> Java Build Path กว่าเลือกแท็บสั่งซื้อและส่งออก ตั้งค่าการตรวจสอบไลบรารี่ที่รองรับ android .jar และตั้งไว้ที่ด้านบนของรายการ และทำความสะอาดและสร้างใหม่ ... มันใช้ได้กับกรณีส่วนใหญ่

ป้อนคำอธิบายรูปภาพที่นี่


15

ฉันเพิ่งมีปัญหานี้เป็นล้านครั้งและรู้ว่าอะไรเป็นสาเหตุ: ฉันสร้างไฟล์ XML ด้วยตัวอักษรตัวพิมพ์ใหญ่ในชื่อ ทั้งหมดชื่อไฟล์ XML ของคุณในการแข่งขันต้อง/res[a-z0-9\\._]


นอกจากนี้ฉันเพิ่งสังเกตเห็นกองล้นล้นต้องการให้เราหนีพ้นแบ็กสแลชทั้งหมด

14

วิธีแก้ปัญหาที่ง่ายที่สุด - บางครั้งคุณเพียงแค่ต้องบันทึกไฟล์ XML ที่คุณกำลังทำอยู่เพื่อให้ตัวสร้างอัตโนมัติเริ่มทำงาน

บันทึกไฟล์ (เช่น main.xml) จากนั้นลบไฟล์ R.java และดูว่า R.java ที่สร้างใหม่แก้ปัญหาการแก้ไข R ได้หรือไม่


จริง บางครั้งหากมีข้อความระบุว่ามีปัญหาใน XML ของคุณที่ไม่มี (เส้นสีแดงไก่เขี่ยหรือเครื่องหมายอัศเจรีย์สีเหลือง) ให้ลบบรรทัดที่ไม่เหมาะสมออกจากนั้นบันทึกไฟล์ XML วางบรรทัดลงในนั้นและบันทึกอีกครั้ง หากคุณไม่ได้สร้างโดยอัตโนมัติให้สร้างอีกครั้งหลังจากนั้นและมันอาจจะทำงานได้ Eclipse บางครั้งโง่ :)
hotshot309

แม้จะมีคำตอบอื่น ๆ ที่ระบุไว้ข้างต้น แต่สิ่งนี้กลับกลายเป็นคำตอบที่ถูกต้องสำหรับฉัน เริ่มแรกฉันได้รับข้อความ "ไม่พบ APK" เมื่อฉันรวบรวมรหัสตัวอย่างจากนั้นทำความสะอาดซึ่งสร้างข้อผิดพลาด "R ไม่สามารถแก้ไขได้" จากนั้นก็เปิดไฟล์. xml และบันทึกข้อผิดพลาดด้วยตนเอง ถูกล้างและฉันสามารถรวบรวม
sXe

ดังนั้นจริง: หลังจากทำความสะอาดโครงการแล้ว R.java ก็หายไป - การแก้ไขและการบันทึก strings.xml แก้ไขปัญหาได้
BurninLeo

12

ตรวจสอบชื่อไฟล์ XML ตรวจสอบให้แน่ใจว่าพวกเขาทั้งหมดเป็นตัวพิมพ์เล็ก

ตรวจสอบให้แน่ใจด้วยว่าชื่อทรัพยากรรูปภาพใด ๆ ล้วนมีอยู่ใน LOWER CASE ฉันมีอักษรตัวใหญ่ในชื่อไฟล์ jpg ของฉันและทำให้เกิดข้อผิดพลาด R ที่ไม่ได้รับการแก้ไขในโครงการของฉัน


+1 สำหรับปัญหานี้เป็นปัญหาของฉัน คุณจะต้องตั้งชื่อรูปภาพของคุณอย่างเช่น: eicon.png ไม่ใช่ eIcon.png ฉันพบข้อผิดพลาดโดยดูที่คอนโซล มันกลับข้อผิดพลาดในไฟล์ที่มีชื่อไฟล์ไม่ถูกต้อง: ...
jasonflaherty


10

ข้อผิดพลาดนี้เกิดขึ้นเมื่อการติดตั้ง x64 Linux Mint ของฉัน มันกลับกลายเป็นว่าผลที่ได้คือความล้มเหลวในADBไบนารีเพราะia32-libsแพคเกจไม่ได้ติดตั้ง เพียงแค่วิ่งapt-get install ia32-libsและเปิดใหม่ Eclipse แก้ไขข้อผิดพลาด

หาก x64 distro ของคุณไม่มี ia32-libs คุณจะต้องใช้ Multiarch

ตรวจสอบ # 4 และ # 5 ในโพสต์นี้: http://crunchbang.org/forums/viewtopic.php?pid=277883#p277883

หวังว่านี่จะช่วยใครซักคน


มันน่าสังเกตว่าถ้าคุณมีการติดตั้ง Linux แบบ 64 บิตคุณจะต้องใช้ ia32-libs หากคุณไม่มีมันการพยายามรันคำสั่ง adb จะส่งผลให้เกิดข้อความแปลกแจ้งว่าไม่พบไฟล์หรือไดเรกทอรี
rs_atl

10

คุณอาจจำเป็นต้องอัปเดต / ติดตั้งเครื่องมือ SDK เปิดใช้งานตัวจัดการ SDK Android อีกครั้งและติดตั้งรายการใหม่: Android SDK Build-tools.one โดยลบครั้งเดียวแก้ไขอันที่เหมาะกับคุณป้อนคำอธิบายรูปภาพที่นี่


9

คุณอาจต้องอัปเดตเครื่องมือ SDK เปิดใช้งานตัวจัดการ SDK Android อีกครั้งและติดตั้งรายการใหม่: Android SDK Build-tools

ป้อนคำอธิบายรูปภาพที่นี่


8

ฉันมีปัญหานี้เช่นกัน ปรากฎว่าฉันได้ลบทรัพยากรสตริง "app_name" ออกจากstrings.xmlไฟล์โดยไม่ได้ตั้งใจซึ่งทำให้เกิดข้อผิดพลาดเงียบ เมื่อฉันเพิ่มกลับเข้าไปคลาส R ก็สร้างสำเร็จแล้วและทุกอย่างก็สำรองแล้วทำงาน


6

พยายามทำให้ชื่อไฟล์ XML เลย์เอาต์ใหม่เป็นตัวพิมพ์เล็ก ตัวอย่างเช่นใช้แทนmy_file.xmlmyFile.xml


+1 ใช่! ตรวจสอบให้แน่ใจว่าเป็นไปตามอนุสัญญาการตั้งชื่อที่ถูกต้อง ... [a-z0-9_.]
jasonflaherty

6

อีกเหตุผลหนึ่งที่R.javaอาจไม่ได้รับการสร้างอัตโนมัติคือถ้าคุณมีไดเรกทอรีเช่นres / drawable-hdpi , res / drawable-mdpiหรือres / drawable-ldpiความละเอียด

1.6+ ดูเหมือนว่าตกลงกับไดเรกทอรีเหล่านี้ แต่ 1.5 ไม่ต้องการ เมื่อฉันลบไดเรกทอรีเหล่านั้นR.javaเริ่มสร้างอัตโนมัติให้ฉันอีกครั้ง


6

การตรวจสอบครั้งแรกจะมีข้อผิดพลาดในรูปแบบ xml ใด ๆ หรือไม่หากแก้ไขได้ก่อน

มิฉะนั้นลบการอ้างอิง junit จากโครงการและสร้างโครงการใหม่

ป้อนคำอธิบายรูปภาพที่นี่


5

บ่อยครั้งเป็นเพราะหมายเลขเวอร์ชั่น MinSDK ที่คุณให้ไว้เมื่อสร้างโครงการ ตัวอย่าง:

หากคุณต้องการให้ 2.1 เป็นขั้นต่ำ Android 2.1 เป็น API ระดับ 7 อย่างแท้จริง

คุณสามารถเห็นสิ่งที่ฉันกำลังพูดถึงเมื่อคุณเรียกดู SDK ที่คุณดาวน์โหลดและติดตั้ง นำทางไปยังสถานที่ที่คุณติดตั้ง SDK เพื่อ ( C:\android-sdk-windowsตัวอย่าง) และเปิดโฟลเดอร์ชื่อ "แพลตฟอร์ม" คุณจะเห็นบางอย่างเช่น "android-7" ที่ระบุไว้เป็นโฟลเดอร์และหากคุณเปิดขึ้นมาจะมีsource.propertiesไฟล์ที่มีเมื่อเปิดด้วยโปรแกรมแก้ไขข้อความจะแสดงเวอร์ชันของแพลตฟอร์มที่สอดคล้องกัน

เมื่อคุณสร้างโครงการและคุณต้องเลือก "สร้างเป้าหมาย" API คอลัมน์สุดท้ายในรายการที่ชื่อ "ระดับ API" จะแสดงหมายเลขที่คุณกำลังค้นหาเมื่อเติมการตั้งค่า MinSDK

นี่อาจเป็นหนึ่งในข้อผิดพลาดที่พบบ่อยที่สุดที่ทำให้R.javaไฟล์ไม่ได้ถูกสร้างขึ้นภายใต้โครงการ> gen> packagename> R.java


5

main.out.xmlลบ ฉันยังใหม่กับสิ่งนี้และยังไม่รู้ว่าไฟล์นี้ใช้สำหรับอะไร แต่การลบมันเป็นการแก้ปัญหา


5

เพียงไปที่รายการเมนูบน Android คลิกที่รูปร่างเมนูในภายใต้รูปร่างคลิกที่สร้างโครงการ

ป้อนคำอธิบายรูปภาพที่นี่


4

ฉันมีตัวอย่างของ Android 8 และพยายามใช้ Android 7 SDK เมื่อฉันปิดโปรเจ็กต์และเปิดโฟลเดอร์แอปพลิเคชันอีกครั้งและเลือกใช้ Android 8 SDK มันสามารถค้นหาไฟล์ R ได้ หวังว่านี่จะช่วยได้


4

AndroidManifest.xmlในกรณีของฉันฉันมีข้อผิดพลาดในของฉัน คนอื่น ๆ บอกว่าไฟล์ XML ของคุณจะต้องปราศจากข้อผิดพลาด แต่ฉันดูเฉพาะใน res / โฟลเดอร์ ค้นหาและแก้ไขข้อผิดพลาดให้ได้มากที่สุดและปัญหาอาจแก้ไขได้เอง


นี่คือผู้ร้ายในกรณีของฉัน ข้อผิดพลาดใด ๆ ในไฟล์ manifest.xml อาจทำให้เกิดปัญหานี้หากยังไม่ได้สร้าง R.java
Scott Biggs

4

ในกรณีที่ใครสนใจ (ฉันอาจจะช่วยชีวิตคุณที่นี่) ฉันมีข้อผิดพลาดR.xmlไม่สามารถแก้ไขได้แตกต่างกันเล็กน้อยในโครงการ GLS hmmmm หลังจากดูR.javaแล้วฉันพบว่าคลาสที่สร้างขึ้นโดยอัตโนมัติXML.java(ฉันคิดว่า) ไม่ได้อยู่ที่นั่น

สารละลาย? มันต้องการโฟลเดอร์ใหม่ในres: res\xmlและไฟล์ที่เรียกว่าdefault_values.xml ในนั้น จากนั้นทั้งหมดก็โอเค

ในกรณีที่คุณยังไม่มีไฟล์นั้นมันคือ:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
    xmlns:android="http://schemas.android.com/apk/res/android">
</PreferenceScreen>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.