gói R không tồn tại


114

Tôi nhận được gói đáng sợ Rkhông tồn tại, nó đang giết chết tôi. Mã ổn Tôi có các ứng dụng trên thị trường đang chạy mã.

Giờ đây, nó đang tạo ra các webviewứng dụng đơn giản . o.0

R.string.app_namelà lỗi của tôi main.xmlstring.xmlổn. Tôi rất bối rối.

Tôi đã mở lại một phiên bản cũ hơn cho "borrow"một số mã và nó tràn ngập R. errors.tôi đã làm sạch và không có gì thay đổi ngoại trừ nhập R.androidđược thêm ở trên cùng.

Tôi thậm chí đã tải vào Netbeans và tôi nhận được điều tương tự. Clean không hoạt động. Tôi có thể tự viết R.javatệp tin được không?

Đây là Rthứ gì? không R. phải tương ứng vớiR.java


1
res kiểm tra thư mục cho bất kỳ lỗi nào, nếu bạn có một số dự án được thêm vào như kiểm tra thư viện trong họ quá
Nắng Kumar Aditya

1
Nhấn Alt + Enter trên dòng setContentView (R.layout ... để thêm nhập.
live-love

Câu trả lời:


127

Đối với bất kỳ ai gặp phải vấn đề này, tôi đã cấu trúc lại bằng cách đổi tên các thư mục không gian tên. Tôi chỉ quên chỉnh sửa AndroidManifest và đó là lý do tại sao tôi gặp lỗi này.

Hãy chắc chắn rằng bạn cũng kiểm tra điều này.


1
Có vẻ như tôi chỉ có thể truy cập R từ trong các lớp hoạt động của mình. Tôi đã gặp lỗi này khi cố gắng truy cập nó từ các tệp lớp khác.
Joe Lapp

84

Chỉ để làm cho điều này đơn giản:

import your.app.package.R;

Tất nhiên, thay thế your.app.packagebằng gói ứng dụng của bạn.

Trong tất cả các lớp sử dụng tham chiếu tài nguyên R, hãy loại bỏ bất kỳ lớp nào khác importvới .R, tức làimport android.R;


3
Khi sử dụng Cordova, đây là giải pháp thích hợp. Đã kiểm tra với Cordova 3.0.9
Peter

1
Thực ra là sai lầm của tôi. Điều này cho phép dự án Cordova XÂY DỰNG đúng cách, tuy nhiên màn hình Splash vẫn KHÔNG xuất hiện ... Vì vậy, giải pháp này thực sự không giải quyết được vấn đề trong tầm tay.
Peter

Đây là những gì tôi cần làm khi chuyển đổi dự án thử nghiệm Eclipse sang mô-đun Android Studio.
RightHandedMonkey

Nếu bạn đang sử dụng phonegap và thêm câu lệnh nhập bên trên bên trong tệp plugin của mình, thì hãy đảm bảo xóa nền tảng và thêm lại. Thích cái này phonegap platform remove androidphonegap platform add android
Fawaz

54

TL; DR , nếu bạn gặp lỗi "gói R không tồn tại", lý do có thể là

  • một số lỗi trong tệp tài nguyên XML
    -> sửa lỗi XML
  • gói hiện tại khác với Rgói (xem package thuộc tính trong AndroidManifest.xml)
    -> nhập Rlớp, ví dụ import com.example.android.R;
    -> hoặc sử dụng gói thích hợp trong nguồn của bạn, ví dụ package com.example.android;
    -> hoặc thay đổi thuộc tính gói trong AndroidManifest.xml thành <manifest xmlns:android="..." package="com.example.android" ...>, nếu phù hợp
  • các Rid đã sử dụng là từ tài nguyên hệ thống
    -> không nhập android.R, nhưng đặt tiền tố cho các id vi phạm android., ví dụ: Tất nhiên, android.R.layout.simple_list_item_2
    bạn có thể nhập android.Rthay vì đặt trước id, nhưng sau đó bạn không thể nhập Rlớp ứng dụng nữa và phải đặt tiền tố cho id ứng dụng, ví dụ: com.example.android.R.id.main_menu.

Các R lớp học được tạo ra tự động từ các nguồn tài nguyên của ứng dụng. Nó chứa các ids cho các tài nguyên này và được chứa trong gói có tên trong <manifest> thẻ trong AndroidManifest.xmltệp tương ứng .

Nếu không có lỗi nào trong các tệp XML tài nguyên, thì R.javanguồn sẽ được tạo trong một thư mục con gói bên dưới gen/và được biên dịch.


Có một Rlớp khác nằm trong androidgói. Đây android.Rlớp có chứa một số lớp lồng nhau, do đó chứa ids và giá trị khác cho hệ thống tài nguyên.


Để sử dụng một lớp trong Java, bạn phải đặt tên lớp với toàn bộ gói, ví dụ:

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

hoặc nhập lớp và sau đó sử dụng nó mà không cần gói

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

Bạn cũng có thể sử dụng một lớp mà không cần đặt tên cho gói, nếu cả lớp hiện tại và lớp đã sử dụng đều nằm trong cùng một gói, ví dụ:

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

1
Trong trường hợp của tôi, vấn đề là classpath 'com.android.tools.build:gradle:3.3.0'. Tôi đã thay đổi nó thành classpath 'com.android.tools.build:gradle:3.2.1' và vấn đề đã được giải quyết.
Mohit Rajput

25

Đừng bao giờ cố gắng tự viết lớp R!

Bạn đã nhập đúng lớp R vào tệp của mình chưa?

Đang làm

import android.R;

thay vì

import com.example.R;

dường như là vấn đề của rất nhiều người. Sau khi dọn dẹp và xây dựng, các lớp học của tôi đôi khi nhập sai.


3
Nhưng tôi không hiểu rằng điều R không có ở đó khi tôi viết mã và tuân thủ chương trình ban đầu.
Taz Ryder

12

nếu bạn đang phát triển trong android studio và đã cấu trúc lại tên gói thì bạn nên thay đổi tên gói trong tệp kê khai android và tệp gradle ứng dụng.

 applicationId "change here your package name"

và trong tệp kê khai

 package="change here your package name"

Vâng. Ví dụ: cách viết hoa hơi khác của tên ứng dụng.
Steve White

9

R.java là một tệp được tạo tự động, nó thường không được biên dịch nếu bạn gặp lỗi trong tệp xml.

Không Bạn không thể viết tệp R.java của riêng mình, nó phải được tạo bởi trình biên dịch tài nguyên.

Kiểm tra lỗi trong tất cả các tệp xml của bạn.


1
Những loại lỗi nào và người mới bắt đầu nên phát hiện chúng như thế nào?
user1725145

6

Lớp R là mã Java được tạo tự động từ các tệp XML của bạn (bố cục giao diện người dùng, chuỗi quốc tế hóa, v.v.) Nếu mã từng hoạt động trước đây (có vẻ như vậy), bạn cần yêu cầu IDE của mình tạo lại các tệp này bằng cách nào đó :

  • trong IntelliJ, chọn Công cụ> Android> Tạo nguồn cho <dự án>
  • (Nếu bạn biết cách trong IDE khác, vui lòng chỉnh sửa câu trả lời này!)

Đây là ans tôi đã tìm kiếm. Cảm ơn .. +1
Adhikari Bishwash

5

Tôi cho rằng nó đã từng hoạt động nhưng bây giờ thì không ..

Điều này có thể xảy ra nếu bạn thay đổi tên PACKAGE bên trong tệp MANIFEST của mình

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

Nếu bạn muốn thay đổi tên gói

  1. Thay đổi tên gói theo cách thủ công trong tệp kê khai.
  2. Nhấp vào lớp R.java của bạn và nhấn F6. Nó sẽ cho phép bạn di chuyển lớp sang gói khác và tất cả các tham chiếu đến lớp đó sẽ được cập nhật.

Bạn là một vị thần! Tôi đang thay đổi dự án của mình từ com.example.rickydam.txtbookssang com.txtbooks.txtbooksbằng cách tạo một dự án mới và tôi đã chuyển mọi thứ sang dự án mới nhưng nó không tìm thấy R. Tôi đã thử vô hiệu hóa bộ nhớ đệm, đồng bộ hóa với gradle, dọn dẹp dự án, xây dựng lại dự án, cài đặt lại công cụ SDK ... Không có gì hoạt động! Nhưng giải pháp của bạn đã khắc phục sự cố của tôi! Cảm ơn một lần nữa! Tiếp tục viết mã!
Ricky Dam

4

Tôi vừa gặp phải lỗi này khi sử dụng Bazel để tạo ứng dụng 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.

Đảm bảo rằng android_library/ của bạn android_binaryđang sử dụng một thuộc tính AndroidManifest.xmlchính xác package=và nếu bạn đang sử dụng custom_packagethuộc tính trên android_libraryhoặc android_binary, hãy đảm bảo rằng nó được viết đúng chính tả.


3

Xóa nhập android.R; từ tất cả các tệp .. sau khi dọn dẹp dự án và xây dựng dự án .... Nó sẽ tạo


3

Mẫu: Gói của tôi là com.example.mypc.f01 , để sửa lỗi bạn thêm dòng bên dưới vào Activity:

import com.example.mypc.f01.R;


3

Dưới đây là một số kỹ thuật mà bạn có thể sử dụng để loại bỏ lỗi này: -

  1. Làm sạch dự án của bạn, Buidl-> Dự án sạch
  2. Xây dựng lại dự án, Xây dựng -> Xây dựng lại Dự án
  3. Mở tệp kê khai và kiểm tra xem có tài nguyên nào bị thiếu không
  4. Bố cục đăng ký vào id cụ thể nếu thiếu, hãy thêm nó
  5. Nếu các bước trên không hoạt động thì hãy khởi động lại android studio bằng cách làm mất hiệu lực bộ nhớ cache

2

Trong trường hợp của tôi, tôi nhận ra rằng tôi đang tạo nhiều gói trong dự án. Trong Bản kê khai Android, tôi thấy rằng tên nhà cung cấp giữ giá trị của MyContentProvider thay vì .provider.MyContentProvider không chính xác. Gói chính của tôi (với giao diện người dùng) là co.companyname.database.provider thay vì co.companyname.database.

Sau đó, trên các câu lệnh nhập cho lớp bị ảnh hưởng, tôi chỉ cần nhấp chuột phải và yêu cầu Android Studio (0.8.6) tối ưu hóa các câu lệnh nhập của tôi. Tôi cũng lưu ý rằng nếu bạn tìm kiếm .R trong thanh tìm kiếm AS ở góc trên cùng bên phải của IDE, bạn có thể tìm thấy tệp R.java được tạo tự động là một phần trong gói của bạn. Tại thời điểm này, bạn không phải thay đổi bất cứ điều gì. Studio sẽ sửa dự án sau khi bạn sửa tệp Android Manifest và xây dựng lại.

Một mục khác là trong một lớp học, tôi đã sử dụng toString (). Length () để đánh giá một chuỗi nhưng đã hoán đổi chúng cho TextUtils.IsEmpty (stringVal); Không thể nghĩ ra bất cứ điều gì khác mà tôi đã làm để giải quyết vấn đề.

Hy vọng điều này sẽ giúp ai đó.

NB - Tất cả những điều này là với AS 0.8.6

PS

R.java được tạo tự động, vì vậy hãy đọc tiêu đề: / * TẬP TIN ĐƯỢC TỰ ĐỘNG TẠO. KHÔNG SỬA ĐỔI. * * Lớp này được tạo tự động bởi công cụ * aapt từ dữ liệu tài nguyên mà nó tìm thấy. Nó * không nên được sửa đổi bằng tay. * /


2

Khi tôi gặp phải điều này, tôi đã tạo một dự án mới và sao chép các tệp từ dự án cũ sang dự án mới của mình.

  1. Bắt đầu một dự án mới
  2. Thêm các tệp cũ vào dự án mới (sao chép và nhấp chuột phải vào Bố cục, drawables, com.packagename, ...) để dán các tệp dự án cũ của tôi

Tuy nhiên, tôi vẫn có cùng một vấn đề: R does not exist. Sau đó, tôi nhận ra rằng mình đã sao chép và dán Tệp kê khai từ sổ ghi chú của mình vào tệp kê khai Android Studio và tôi đã không thay đổi tên gói trong tệp kê khai.

Do đó, khi tôi thay đổi tên gói trong tệp kê khai thành tên dự án mới, dự án mới mà tôi đã tạo đã hoạt động tốt.


1

Bạn đang nhập tệp nào vào tệp gặp lỗi R?

Sự hiểu biết của tôi về tệp R là chúng là danh sách tham chiếu được tạo tự động cho tất cả các thuộc tính trong ứng dụng Android. Do đó, bạn không thể tự mình thay đổi.

Bạn có đang sử dụng Eclipse để xây dựng dự án này không? Các dự án cũ có mắc phải những lỗi này trước khi cập nhật Eclipse không? Các tài liệu tham khảo đang bị lỗi là gì?

Kiểm tra để đảm bảo rằng bạn chưa nhập tệp R khác từ mã được sao chép khác trong ứng dụng khác.


Tôi đã gặp sự cố R khi tệp AndroidManifest.xml và tệp project.properties trong dự án không hiển thị cùng một phiên bản mục tiêu / tối thiểu của android.
Music Monkey

1

Tôi gặp phải sự cố này mỗi khi chuyển đổi máy tính và cố gắng nhập các dự án cũ từ các tệp được chuyển qua USB.

Cách giải quyết của tôi là chỉ tạo một dự án mới và sao chép (kéo) các tệp vào IDE (hiện đang sử dụng Netbeans) và xây dựng lại. Đây là một giải pháp khó chịu và hơi khó xử, nhưng nó đã khắc phục được vấn đề.

Nếu điều này xảy ra với bạn, trường hợp xấu nhất là bạn có thể phải sao lưu tệp của mình, xóa dự án và chỉ cần kéo tệp vào đó và biên dịch lại. Hy vọng rằng nó sẽ không đến nhưng đó sẽ là lựa chọn hạt nhân của bạn.


1

Bạn có thể thử

Menu trên cùng của Android Studio> Tệp> Vô hiệu hóa bộ nhớ đệm / khởi động lại ...

Nhấp vào nút vô hiệu hóa bộ nhớ cache / khởi động lại để khởi động lại dự án của bạn

Giải quyết lại R.xxxx.xxx nếu một số phân đoạn lớp R lớp không phân giải đúng cách

sau đó xây dựng lại dự án của bạn

Hy vọng nó giúp


0

Nếu bạn gặp phải lỗi này trong Android Studio:

Kiểm tra (các) tệp mô-đun Gradle -> defaultConfig -> cài đặt applicationId.

Kiểm tra thẻ gói tệp kê khai AndroidManifest.xml ->.

Kiểm tra khai báo gói trong tất cả các tệp java src.

Đồng bộ hóa, làm sạch rồi xây dựng lại bằng Gradle.

KHÔNG BAO GIỜ xây dựng tệp R của riêng bạn. R được tạo tự động từ các tệp java nguồn và cài đặt bản dựng của bạn.


0

Tôi đã có: "error: package R không tồn tại" và giả sử javac không có quyền truy cập vào R.java.
Vì vậy, tôi đã thêm% PROJ_LOC% \ gen vào chuacepath và nó đã hoạt động! SOURCEPATH =% PROJ_LOC% \ src;% PROJ_LOC% \ gen

Tôi không sử dụng Android Studio hoặc Ant (hoặc XML).


0

Nếu lỗi này xuất hiện sau khi giải quyết xung đột hợp nhất, dự án Build -> Clean đơn giản có thể giúp ích.


0

Chỉ cần thoát khỏi lỗi trong dự án của tôi. Tôi đã nhập một dự án mẫu, tôi đã thay đổi các thư mục gói nhưng tôi chưa cập nhật gói trong một trong các tệp java.

Rất có thể nguyên nhân của lỗi này 'gói R không tồn tại' là tên gói trong Java hoặc tệp kê khai không chính xác. Đảm bảo rằng nó là chính xác và đồng bộ và sau đó thực hiện một bản dựng sạch sẽ.


0

Đôi khi, nó được giải quyết khi bạn chỉ cần nhập lại dự án vào Android Studio.


0

Đường dẫn sai: Dự án "tính tiền" các con trỏ đến hình ảnh và nếu bạn đã thay đổi tên đường dẫn, ví dụ như gói hoặc thư mục được tái cấu trúc. Sau đó, chỉ cần viết lại chữ R và trình soạn thảo gợi ý đường đi phù hợp và nó sẽ hoạt động. Trong trường hợp này, tên tệp của bạn là đúng và nội dung được tham chiếu trong con trỏ R. hiện có nhưng đường dẫn sai, do đó, quá trình dọn dẹp và xây dựng sẽ không hoạt động.


0

Một trường hợp khác của sự cố R.Xử lý Chú thích .

Một số xử lý có thể tham chiếu đến các lớp nằm trong các thư mục hoặc cấp thư mục nhất định. Nếu bạn di chuyển các lớp cần thiết đến vị trí khác, bạn có thể nhận được R. là một lớp không xác định.

Rất tiếc, con trỏ lỗi cho vấn đề này không hiển thị trong Android Studio.


0

Không có lợi ích gì khi bạn tự viết R.java vì nó được thay đổi trên mọi bản dựng,

Chỉ cần nhớ sử dụng R.something, ví dụ: R.raw.filename từ các lớp bên trong có giá trị gói tương tự như giá trị gói bên trong AndroidManifest.xml

bởi vì các ID tài nguyên R. được xác định cho ứng dụng hoặc thư viện hiện tại và tất cả chúng đều được kiểm tra nếu tồn tại trong thời gian biên dịch, do đó, không có ý nghĩa gì khi cho phép chúng được truy cập từ "mã" không nhắm mục tiêu đến ứng dụng hoặc thư viện hiện tại và có thể được sử dụng ở những nơi khác.



-2

Tôi giải quyết vấn đề của mình:

gói R không tồn tại

.

Goto AndroidManifest.xmltệp và thay đổi minSDKVersion="17"từ 19


Tôi có ý kiến ​​khác. Bạn không nên có minSDKVersion trong tệp AndroidManifest.xml theo tiêu chuẩn hiện tại. Nếu bạn có nó thì hãy xóa nó khỏi tệp AndroidManifest.xml, đó là mã thừa. MinSDKVersion & targetSdkVersion chỉ nên được định nghĩa trong tệp build.gradle.
Ajay B
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.