ไม่มีแพ็คเกจ R


114

ฉันได้รับแพคเกจที่น่ากลัวRมันกำลังฆ่าฉัน รหัสใช้ได้ดีฉันมีแอปในตลาดที่ใช้รหัส

ตอนนี้มันมีผลกับwebviewแอพพลิเคชั่นง่ายๆ o.0

R.string.app_nameเป็นข้อผิดพลาดของฉันmain.xmlและstring.xmlไม่เป็นไร ฉันสับสนมาก

ฉันเปิดเวอร์ชันเก่ากว่าเป็น"borrow"โค้ดบางส่วนและมันเต็มไปด้วยR. errors.ฉันทำความสะอาดและไม่มีอะไรเปลี่ยนแปลงยกเว้นR.androidการเพิ่มการนำเข้าที่ด้านบน

ฉันโหลดลงใน Netbeans และได้รับสิ่งเดียวกัน คลีนไม่ทำงาน ฉันสามารถเขียนR.javaไฟล์ด้วยตัวเองได้หรือไม่?

สิ่งนี้คืออะไรR? Rไม่ใช่ ควรจะสอดคล้องกับR.java


1
ตรวจสอบโฟลเดอร์ res เพื่อหาข้อผิดพลาดหากคุณมีบางโครงการเพิ่มเข้ามาในไลบรารีให้ตรวจสอบด้วย
Sunny Kumar Aditya

1
กด Alt + Enter ในบรรทัด setContentView (Rlayout ... เพื่อเพิ่มการนำเข้า
live-love

คำตอบ:


128

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

อย่าลืมตรวจสอบสิ่งนี้ด้วย


1
ดูเหมือนว่าฉันจะเข้าถึง R ได้จากในชั้นเรียนกิจกรรมเท่านั้น ฉันได้รับข้อผิดพลาดนี้ขณะพยายามเข้าถึงจากไฟล์คลาสอื่น
Joe Lapp

85

เพื่อให้ง่ายขึ้น:

import your.app.package.R;

แน่นอนแทนที่your.app.packageด้วยแพ็คเกจแอปของคุณ

ในคลาสทั้งหมดที่ใช้การอ้างอิงรีซอร์ส R ให้ลบอื่น ๆimportด้วย.Rเช่นimport android.R;


3
เมื่อใช้ Cordova นี่เป็นวิธีแก้ปัญหาที่เหมาะสม ทดสอบกับ Cordova 3.0.9
Peter

1
จริงๆแล้วความผิดพลาดของฉัน สิ่งนี้ช่วยให้โครงการ Cordova สามารถสร้างได้อย่างถูกต้อง แต่หน้าจอ Splash ยังไม่ปรากฏขึ้น ... ดังนั้นวิธีนี้จึงไม่สามารถแก้ปัญหาได้จริง
Peter

นี่คือสิ่งที่ฉันต้องทำเมื่อแปลงโครงการทดสอบ Eclipse เป็นโมดูล Android Studio
RightHandedMonkey

หากคุณใช้ phonegap และเพิ่มคำสั่งนำเข้าด้านบนในไฟล์ปลั๊กอินของคุณให้แน่ใจว่าได้ลบแพลตฟอร์มและเพิ่มอีกครั้ง แบบนี้phonegap platform remove androidและphonegap platform add android
Fawaz

54

TL; DRหากคุณได้รับข้อผิดพลาด "ไม่มีแพ็คเกจ R" สาเหตุที่เป็นไปได้คือ

  • ข้อผิดพลาดบางอย่างในไฟล์ทรัพยากร XML
    -> แก้ไขข้อผิดพลาด XML
  • แพ็กเกจปัจจุบันแตกต่างจากRแพ็กเกจ (ดูpackage แอตทริบิวต์ใน AndroidManifest.xml)
    -> Rคลาสการนำเข้าเช่นimport com.example.android.R;
    -> หรือใช้แพ็กเกจที่เหมาะสมในซอร์สของคุณเช่นpackage com.example.android;
    -> หรือเปลี่ยนแอ็ตทริบิวต์แพ็กเกจใน AndroidManifest.xml เป็น <manifest xmlns:android="..." package="com.example.android" ...>หากเหมาะสม
  • Rรหัสที่ใช้มาจากทรัพยากรระบบ
    -> ห้ามนำเข้าandroid.Rแต่นำหน้ารหัสที่ละเมิดandroid.เช่นandroid.R.layout.simple_list_item_2
    คุณสามารถนำเข้าandroid.Rแทนที่จะนำหน้ารหัสแน่นอน แต่คุณไม่สามารถนำเข้าRคลาสแอปพลิเคชันได้อีกต่อไปและต้องนำหน้ารหัสแอปพลิเคชันเช่นcom.example.android.R.id.main_menu.

R ชั้นถูกสร้างขึ้นโดยอัตโนมัติจากทรัพยากรของโปรแกรมประยุกต์ ประกอบด้วยids สำหรับทรัพยากรเหล่านี้และบรรจุอยู่ในแพ็กเกจที่มีชื่อใน <manifest> แท็กในAndroidManifest.xmlไฟล์ที่เกี่ยวข้อง

หากไม่มีข้อผิดพลาดในไฟล์ XML ของรีซอร์สR.javaซอร์สจะถูกสร้างขึ้นในไดเร็กทอรีย่อยของแพ็กเกจด้านล่างgen/และคอมไพล์


มีRคลาสอื่นอยู่ในandroidแพ็กเกจ นี้android.Rระดับชั้นเรียนมีบางส่วนที่ซ้อนกันซึ่งจะประกอบด้วยidและค่าอื่น ๆ สำหรับระบบทรัพยากร


ในการใช้คลาสใน Java คุณต้องตั้งชื่อคลาสด้วยแพ็กเกจทั้งหมดเช่น

java.util.List<Object> list = new java.util.ArrayList<Object>();

หรือนำเข้าคลาสแล้วใช้โดยไม่มีแพ็คเกจ

import java.util.List;
import java.util.ArrayList;
List<Object> list = new ArrayList<Object>();

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

package com.example.android;
public class A {
    /* ... */
}
package com.example.android;
public class B {
    public void useA() {
        A a = new A();
    }
}

1
ในกรณีของฉันปัญหาคือ classpath 'com.android.tools.build:gradle:3.3.0' ฉันเปลี่ยนเป็น classpath 'com.android.tools.build:gradle:3.2.1' และแก้ไขปัญหาได้แล้ว
Mohit Rajput

25

ไม่เคยลองเขียนคลาส R ด้วยตัวเอง!

คุณได้นำเข้าคลาส R ที่ถูกต้องในไฟล์ของคุณหรือไม่?

การทำ

import android.R;

แทน

import com.example.R;

ดูเหมือนจะเป็นปัญหาสำหรับคนจำนวนมาก หลังจากทำความสะอาดและสร้างชั้นเรียนของฉันบางครั้งก็นำเข้าชั้นเรียนที่ไม่ถูกต้อง


3
แต่ฉันไม่เข้าใจว่าสิ่งที่ R ไม่ได้อยู่ที่นั่นเมื่อฉันเขียนโค้ดและปฏิบัติตามโปรแกรมในตอนแรก
Taz Ryder

12

หากคุณกำลังพัฒนาใน android studio และปรับเปลี่ยนชื่อแพ็กเกจคุณควรเปลี่ยนชื่อแพ็กเกจในไฟล์ manifest ของ android และ app gradle

 applicationId "change here your package name"

และในไฟล์รายการ

 package="change here your package name"

อ๋อ ตัวอย่างเช่นการใช้อักษรตัวพิมพ์ใหญ่ของชื่อแอปที่แตกต่างกันเล็กน้อย
Steve White

9

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

ไม่คุณไม่สามารถเขียนไฟล์ R.java ของคุณเองได้ต้องสร้างโดยรีซอร์สคอมไพเลอร์

ตรวจสอบข้อผิดพลาดในไฟล์ xml ทั้งหมดของคุณ


1
ข้อผิดพลาดประเภทใดและผู้เริ่มต้นควรสังเกตเห็นได้อย่างไร?
user1725145

6

คลาส Rคือโค้ด Java ที่สร้างขึ้นโดยอัตโนมัติจากไฟล์ XML ของคุณ (รูปแบบ UI สตริงการทำให้เป็นสากล ฯลฯ ) หากโค้ดเคยใช้งานได้ก่อนหน้านี้ (ตามที่ดูเหมือนจะเป็น) คุณต้องบอก IDE ของคุณให้สร้างไฟล์เหล่านี้ขึ้นมาใหม่ :

  • ใน IntelliJ เลือกเครื่องมือ> Android> สร้างแหล่งที่มาสำหรับ <โครงการ>
  • (หากคุณรู้แนวทางใน IDE อื่นอย่าลังเลที่จะแก้ไขคำตอบนี้!)

นี่คือ ans ที่ฉันค้นหา ขอบคุณ .. +1
Adhikari Bishwash

5

ฉันคิดว่ามันเคยได้ผล แต่ตอนนี้มันไม่ ..

สิ่งนี้สามารถเกิดขึ้นได้หากคุณเปลี่ยนชื่อ PACKAGE ภายในไฟล์ MANIFEST ของคุณ

<manifest
   package="com.example.android...."

หากคุณต้องการเปลี่ยนชื่อแพ็กเกจ

  1. เปลี่ยนชื่อแพ็กเกจด้วยตนเองในไฟล์รายการ
  2. คลิกที่คลาส R.java ของคุณและกด F6 จะช่วยให้คุณสามารถย้ายคลาสไปยังแพ็กเกจอื่นและการอ้างอิงทั้งหมดไปยังคลาสนั้นจะได้รับการอัปเดต

คุณเป็นพระเจ้า! ฉันกำลังเปลี่ยนโปรเจ็กต์จากcom.example.rickydam.txtbooksไปเป็นcom.txtbooks.txtbooksโดยสร้างโปรเจ็กต์ใหม่และฉันย้ายทุกอย่างไปที่โปรเจ็กต์ใหม่ แต่ไม่พบอาร์ฉันลองใช้แคชที่ไม่ถูกต้องซิงค์กับ gradle ทำความสะอาดโปรเจ็กต์สร้างโปรเจ็กต์ใหม่ติดตั้งเครื่องมือ SDK ใหม่ ... ไม่มีอะไรทำงาน! แต่วิธีแก้ปัญหาของคุณแก้ปัญหาของฉันได้! ขอบคุณอีกครั้ง! เขียนโค้ดต่อไป!
Ricky Dam

4

ฉันเพิ่งพบข้อผิดพลาดนี้ขณะใช้ Bazel เพื่อสร้างแอป Android:

error: package R does not exist
                + mContext.getString(R.string.common_string),
                                      ^
Target //libraries/common:common_paidRelease failed to build
Use --verbose_failures to see the command lines of failed build steps.

ตรวจสอบให้แน่ใจว่าandroid_library/ android_binaryกำลังใช้แอตทริบิวต์ที่AndroidManifest.xmlถูกต้องpackage=และหากคุณใช้custom_packageแอตทริบิวต์บนandroid_libraryหรือandroid_binaryตรวจสอบให้แน่ใจว่าสะกดถูกต้อง


3

ลบนำเข้า android.R; จากไฟล์ทั้งหมด .. เมื่อทำความสะอาดโครงการและสร้างโครงการ .... มันจะสร้าง


3

ตัวอย่าง: แพ็คเกจของฉันคือcom.example.mypc.f01 หากต้องการแก้ไขข้อผิดพลาดคุณเพิ่มบรรทัดด้านล่างในกิจกรรม:

import com.example.mypc.f01.R;


3

ด้านล่างนี้เป็นเทคนิคบางอย่างที่คุณสามารถใช้เพื่อลบข้อผิดพลาดนี้: -

  1. ทำความสะอาดโครงการของคุณ Buidl-> clean Project
  2. สร้างโครงการสร้าง -> สร้างโครงการใหม่
  3. เปิดรายการและตรวจสอบว่ามีทรัพยากรที่ขาดหายไปหรือไม่
  4. เค้าโครงเช็คอินสำหรับ id เฉพาะหากขาดเพิ่ม
  5. หากขั้นตอนข้างต้นไม่ได้ผลให้รีสตาร์ท android studio โดยทำให้แคชเป็นโมฆะ

2

ในกรณีของฉันฉันรู้ว่าฉันกำลังสร้างแพ็คเกจหลายชุดในโครงการ ภายใน Android Manifest ฉันพบว่าชื่อผู้ให้บริการถือค่าของ MyContentProvider แทน .provider.MyContentProvider ไม่ถูกต้อง แพ็กเกจหลักของฉัน (พร้อม UI) คือ co.companyname.database.provider แทนที่จะเป็น co.companyname.database

จากนั้นในคำสั่งนำเข้าสำหรับคลาสที่ได้รับผลกระทบฉันเพียงแค่คลิกขวาและขอให้ Android Studio (0.8.6) เพิ่มประสิทธิภาพคำสั่งนำเข้าของฉัน ฉันสังเกตด้วยว่าหากคุณค้นหา. R ในแถบค้นหา AS ที่มุมขวาบนของ IDE คุณจะพบไฟล์ R.java ที่สร้างขึ้นโดยอัตโนมัติซึ่งเป็นส่วนหนึ่งของแพ็กเกจของคุณ ณ จุดนี้คุณไม่ต้องเปลี่ยนแปลงอะไร Studio ควรแก้ไขโครงการหลังจากที่คุณแก้ไขไฟล์ Android Manifest และสร้างใหม่

อีกรายการหนึ่งคือในคลาสหนึ่งฉันใช้ toString (). length () เพื่อประเมินสตริง แต่สลับสิ่งเหล่านั้นออกเป็น TextUtils.IsEmpty (stringVal); ไม่สามารถคิดถึงสิ่งอื่นใดที่ฉันทำเพื่อแก้ไขปัญหานี้

หวังว่านี่จะช่วยใครบางคนได้

NB - ทั้งหมดนี้มาพร้อมกับ AS 0.8.6

PS

R.java ถูกสร้างขึ้นโดยอัตโนมัติดังนั้นโปรดอ่านส่วนหัว: / * ไฟล์ที่สร้างขึ้นโดยอัตโนมัติ อย่าแก้ไข * * คลาสนี้สร้างขึ้นโดยอัตโนมัติโดยเครื่องมือ * aapt จากข้อมูลทรัพยากรที่พบ ไม่ควรแก้ไขด้วยมือ * /


2

เมื่อพบปัญหานี้ฉันจึงสร้างโครงการใหม่และคัดลอกไฟล์จากโครงการเก่าไปยังโครงการใหม่

  1. เริ่มโครงการใหม่
  2. เพิ่มไฟล์เก่าลงในโครงการใหม่ (คัดลอกและคลิกขวาที่ Layout, drawables, com.packagename, ... ) เพื่อวางไฟล์โครงการเก่าของฉัน

อย่างไรก็ตามฉันยังคงมีปัญหาเดิม: R does not exist . จากนั้นฉันก็รู้ว่าฉันได้คัดลอกและวาง Manifest จาก notepad ของฉันลงในรายการ Android Studio และฉันไม่ได้เปลี่ยนชื่อแพ็คเกจในไฟล์รายการ

ดังนั้นเมื่อฉันเปลี่ยนชื่อแพ็กเกจในรายการเป็นชื่อโปรเจ็กต์ใหม่โปรเจ็กต์ใหม่ที่ฉันสร้างขึ้นก็ใช้ได้ดี


1

คุณนำเข้าไฟล์ใดบ้างที่ได้รับข้อผิดพลาด R

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

คุณใช้ Eclipse เพื่อสร้างโครงการนี้หรือไม่ โครงการที่เก่ากว่าได้รับข้อผิดพลาดเหล่านี้เกิดขึ้นก่อนอัปเดต Eclipse หรือไม่ การอ้างอิงที่ได้รับข้อผิดพลาดคืออะไร?

ตรวจสอบให้แน่ใจว่าไม่ได้นำเข้าไฟล์ R อื่นจากโค้ดอื่นที่คัดลอกในแอพอื่น


ฉันมีปัญหา R เมื่อไฟล์ AndroidManifest.xml และไฟล์ project.properties ภายในโปรเจ็กต์ไม่แสดง Android เวอร์ชันเป้าหมาย / ขั้นต่ำเดียวกัน
Music Monkey

1

ฉันพบปัญหานี้ทุกครั้งที่เปลี่ยนคอมพิวเตอร์และพยายามนำเข้าโครงการเก่าจากไฟล์ที่ถ่ายโอนผ่าน USB

วิธีแก้ปัญหาของฉันคือสร้างโปรเจ็กต์ใหม่และคัดลอก (ลาก) ไฟล์ไปยัง IDE (ปัจจุบันใช้ Netbeans) และสร้างใหม่ นี่เป็นสิ่งที่น่ารำคาญและเป็นวิธีแก้ปัญหาที่แฮ็ก แต่สามารถแก้ไขปัญหาได้

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


1

คุณอาจลอง

เมนูด้านบนของ Android Studio> ไฟล์> ไม่ถูกต้องแคช / รีสตาร์ท ...

คลิกที่ปุ่มแคช / รีสตาร์ทไม่ถูกต้องเพื่อเริ่มโครงการของคุณใหม่

แก้ไข R.xxxx.xxx อีกครั้งหากคลาส Fragment คลาส R บางส่วนไม่สามารถแก้ไขได้อย่างถูกต้อง

จากนั้นสร้างโครงการของคุณใหม่

หวังว่าจะช่วยได้


0

หากคุณพบข้อผิดพลาดนี้ใน Android Studio:

ตรวจสอบไฟล์โมดูล Gradle -> defaultConfig -> การตั้งค่า applicationId

ตรวจสอบแท็กแพ็คเกจ AndroidManifest.xml -> manifest

ตรวจสอบการประกาศแพ็กเกจในไฟล์ src java ทั้งหมด

ซิงค์ล้างแล้วสร้างใหม่ด้วย Gradle

อย่าสร้างไฟล์ R ของคุณเอง R ถูกสร้างขึ้นโดยอัตโนมัติจากไฟล์ Java ต้นทางของคุณและสร้างการตั้งค่า


0

ฉันมี: "error: package R ไม่มีอยู่" และถือว่า javac ไม่มีสิทธิ์เข้าถึง R.java
ดังนั้นฉันจึงเพิ่ม% PROJ_LOC% \ gen ให้กับ sourcepath และมันก็ใช้ได้! sourcepath =% PROJ_LOC% \ src;% PROJ_LOC% \ Gen

ฉันไม่ได้ใช้ Android Studio หรือ Ant (หรือ XML)


0

หากข้อผิดพลาดนี้ปรากฏขึ้นหลังจากการแก้ไขข้อขัดแย้งในการผสาน Build -> Clean project อย่างง่ายสามารถช่วยได้


0

เพิ่งกำจัดข้อผิดพลาดในโครงการของฉัน ฉันได้นำเข้าโปรเจ็กต์ตัวอย่างฉันได้เปลี่ยนโฟลเดอร์แพ็กเกจ แต่ฉันไม่ได้อัปเดตแพ็คเกจในไฟล์ java

สาเหตุส่วนใหญ่ของข้อผิดพลาดนี้ 'ไม่มีแพ็คเกจ R' คือชื่อแพ็คเกจใน Java หรือไฟล์รายการไม่ถูกต้อง ตรวจสอบให้แน่ใจว่าถูกต้องและซิงค์จากนั้นทำการสร้างใหม่ทั้งหมด



0

เส้นทางที่ไม่ถูกต้อง: โปรเจ็กต์ "แคช" ตัวชี้ไปยังรูปภาพและหากคุณได้ทำการเปลี่ยนชื่อเส้นทางตัวอย่างเช่นแพ็คเกจหรือโฟลเดอร์ที่รีแฟคเตอร์ จากนั้นเพียงแค่เขียนตัวอักษร R อีกครั้งและตัวแก้ไขจะแนะนำเส้นทางที่ถูกต้องและมันจะได้ผล ในกรณีนี้ชื่อไฟล์ของคุณถูกต้องและมีเนื้อหาที่อ้างถึงในตัวชี้ R แต่พา ธ ไม่ถูกต้องดังนั้นจึง Clean และ build จะไม่ทำงาน


0

อีกกรณีหนึ่งของการแตกของR.คือการประมวลผลคำอธิบายประกอบคำอธิบายประกอบการประมวลผล

การประมวลผลบางอย่างอาจอ้างถึงคลาสที่อยู่ในโฟลเดอร์หรือโฟลเดอร์บางระดับ หากคุณย้ายคลาสที่ต้องการไปยังตำแหน่งอื่นคุณจะได้รับRเป็นคลาสที่ไม่รู้จัก

น่าเสียดายที่ตัวชี้ข้อผิดพลาดของปัญหานี้ไม่ปรากฏใน Android Studio


0

ไม่มีประโยชน์ในการเขียน R.java ด้วยตัวคุณเองเพราะมีการเปลี่ยนแปลงในทุกงานสร้าง

อย่าลืมใช้R.something ตัวอย่างเช่น R.raw.filenameจากภายในคลาสที่มีค่าแพ็กเกจใกล้เคียงกับค่าแพ็กเกจภายใน AndroidManifest.xml

เนื่องจากรหัสทรัพยากร R ถูกกำหนดไว้สำหรับแอปพลิเคชันหรือไลบรารีปัจจุบันและทั้งหมดจะถูกตรวจสอบหากมีอยู่ในเวลาคอมไพล์ดังนั้นจึงไม่สมเหตุสมผลที่จะอนุญาตให้เข้าถึงได้จาก "รหัส" ที่ไม่ได้กำหนดเป้าหมายไปยังแอปพลิเคชันหรือไลบรารีปัจจุบันและสามารถ นำไปใช้ในสถานที่อื่น ๆ



0

ด้านล่างนี้ใช้งานได้สำหรับฉัน

  1. ในAndroidManifest.xmlไฟล์ให้ตรวจสอบว่าพิมพ์ชื่อแพ็กเกจถูกต้องหรือไม่
  2. นำเข้า com.example.appName.R; (แพ็คเกจนำเข้า _name.R;)

หากขั้นตอนแรกไม่ได้ผลให้ลองขั้นตอนที่สอง


-2

ฉันแก้ปัญหาของฉัน:

ไม่มีแพ็คเกจ R

.

ไปที่AndroidManifest.xmlไฟล์และเปลี่ยนminSDKVersion="17"จาก 19


ฉันขอแตกต่าง คุณไม่ควรมี minSDKVersion ในไฟล์ AndroidManifest.xml ตามมาตรฐานปัจจุบัน หากคุณมีให้ลบออกจากไฟล์ AndroidManifest.xml มันเป็นรหัสซ้ำซ้อน ควรกำหนด minSDKVersion & targetSdkVersion ในไฟล์ build.gradle เท่านั้น
Ajay B
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.