Phát triển cho Android trong Eclipse: R.java không tái tạo


309

Tôi đã phát hiện ra rằng R.java của tôi không bao giờ được cập nhật, vì vậy nó không chứa thông tin về các tài nguyên mới của tôi, vì vậy tôi đã quyết định xóa nó và nghĩ rằng Eclipse sẽ tạo ra một tài nguyên mới. Nhưng điều đó đã không xảy ra và bây giờ tôi không có R.java. Làm thế nào tôi có thể tái sinh một?

Tôi đang sử dụng Windows 7.

Từ một trong những ý kiến: "Thực hiện dự án -> Làm sạch là nguyên nhân gây ra sự cố cho tôi. Việc dọn dẹp xóa R.java ... và vì bất kỳ lý do gì, plugin không tạo lại tệp."


Giải pháp của tôi khi dọn dẹp không hoạt động: tôi cần tải xuống Công cụ xây dựng trong trình quản lý SDK và sau đó khởi động lại hệ thống. Tôi có ADT 22.3.0.
Moradnejad

Câu trả lời:


177

Trang web này gợi ý:

nếu bạn chạy sạch dự án, nó sẽ tạo lại tất cả các tệp Java được tạo, cụ thể là R.

... và ...

Trong Eclipse, trong menu Project, là một tùy chọn xây dựng tự động. Điều đó sẽ giúp bạn xây dựng tệp R.java mỗi lần sửa đổi được thực hiện. Tùy chọn Clean ... cũng nằm trong Project.

Trang web này gợi ý một giải pháp khác.


1
Ai có thể nghĩ, cảm ơn mọi người +1 ở đây tôi đã gặp vấn đề với bố cục của mình và vì vậy R.Java đã không được tạo. Tuyệt vời đứng lên! Chúc mừng.

101
Làm Project-> Clean là điều gây ra vấn đề cho tôi. Việc dọn dẹp sẽ xóa R.java ... và vì bất kỳ lý do gì, plugin không tạo lại tệp.
Cerin

7
Tôi đã bật lên khi tôi liên kết với thư viện yêu cầu phiên bản API hỗ trợ Android khác với cài đặt. Các phụ thuộc không hoạt động và R của tôi đã không được tạo ra sau đó. Như những người khác đã nói, nó xuất hiện trong nhật ký lỗi, vì vậy hãy kiểm tra ở đó.
mikebabcock

1
Trong trường hợp của tôi, làm sạch dự án chỉ cần loại bỏ R.java , thay vì tái tạo nó. stackoverflow.com/questions/13065425/
Mạnh

96
R.java không tái tạo nếu bạn có một số lỗi trong thư mục res. Đã xóa các lỗi -> đã giải quyết vấn đề trong trường hợp của tôi :)
JavaRunner

300

Tôi thấy điều này xảy ra với tôi với một bố cục bị hỏng và mọi thứ nổ tung. Hãy thư giãn, nó giống như lỗi cũ khi bạn mới học lập trình C khi bạn quên một dấu chấm phẩy và nó tạo ra hàng trăm lỗi. Nhiều người hoảng loạn, nhấn tất cả các nút và làm cho mọi thứ tồi tệ hơn.

Giải pháp

  • Hãy chắc chắn rằng bất cứ điều gì các R.liên kết đến không bị phá vỡ. Sửa tất cả các lỗi trong các tệp XML của bạn . Nếu bất cứ thứ gì trong ADK bị hỏng, Rsẽ không tái sinh.
  • Nếu bạn bằng cách nào đó nhấn một cái gì đó và tạo ra import android.Rtrong hoạt động của bạn, hãy loại bỏ nó .
  • Chạy dự án -> Sạch sẽ . Điều này sẽ xóa và tạo lại R và BuildConfig.
  • Đảm bảo Project -> Build Automatic được chọn. Nếu không, xây dựng nó bằng tay thông qua Menu -> Project -> Build Project.
  • Đợi vài giây để các lỗi biến mất.
  • Nếu nó không hoạt động, xóa mọi thứ trong thư mục / gen /
  • Nếu nó vẫn không hoạt động, hãy thử nhấp chuột phải vào dự án của bạn -> Công cụ Android -> Khắc phục thuộc tính dự án .
  • Kiểm tra các tệp * .properations của bạn (trong thư mục gốc của thư mục ứng dụng của bạn) và đảm bảo rằng các liên kết trong đó không bị hỏng.
  • Nhấp chuột phải vào dự án của bạn > thuộc tính> Android . Nhìn vào phần Project Build Target và Library ở bên phải trang. Mục tiêu xây dựng của bạn phải phù hợp với mục tiêu trong AndroidManifest.xml của bạn. Vì vậy, nếu nó được đặt thành mục tiêu 17 trong AndroidManifest, hãy đảm bảo rằng Tên mục tiêu là Android 4.2. Nếu Thư viện của bạn có dấu X dưới tham chiếu, hãy xóa và thêm lại thư viện cho đến khi có dấu tick màu xanh lá cây. Điều này có thể xảy ra nếu bạn đã di chuyển một vài tệp và thư mục xung quanh.

Phải làm gì nếu R không tái sinh

Điều này thường xảy ra khi bạn có một tệp XML bị hỏng.

  • Kiểm tra lỗi bên trong các tệp XML của bạn, chủ yếu trong /res/thư mục
  • Các địa điểm phổ biến là /layout//values/, đặc biệt là nếu bạn đã thay đổi một trong số chúng gần đây
  • Kiểm tra AndroidManifest.xml. Tôi thấy rằng tôi thường thay đổi một chuỗi và quên thay đổi tên chuỗi từ đó AndroidManifest.xml.
  • Kiểm tra xem đã Android SDK Build-toolsđược cài đặt chưa. Cửa sổ -> Trình quản lý SDK Android -> Công cụ -> Công cụ xây dựng SDK Android
  • Hãy chắc chắn rằng khi bạn cập nhật Android SDK Tools, bạn cũng cập nhật Android SDK Platform-toolsAndroid ADK Build-tools. Xây dựng thất bại âm thầm nếu họ không phù hợp.
  • Nếu bạn không thể tìm thấy sự cố, nhấp chuột phải / gen / -> Khôi phục từ lịch sử địa phương ... -> đánh dấu R.java -> nhấp vào Khôi phục . Ngay cả khi nó không giải quyết được vấn đề, nó sẽ xóa các lỗi thừa để làm cho vấn đề dễ tìm hơn.

21
đây sẽ là câu trả lời hàng đầu
john.k.doe

6
Thật vậy, nó khiến tôi nhận ra môi trường của mình vẫn cần một bản cập nhật cho các công cụ.
woodleg.as

11
Window-> Android SDK Manager-> Tools-> Android SDK Build-tools đây là giải pháp cho tôi, được nâng cấp

1
Tôi đã đọc hàng tá câu trả lời và chỉ có câu trả lời này đề cập đến việc kiểm tra SDK Build-tools. Tôi mù quáng để nhật thực tải xuống và cài đặt tất cả các công cụ Android của tôi khi nó bị xúc phạm để làm như vậy. Nó hoàn toàn bỏ lỡ phần đó.
Justin Aquadro

1
Kiểm tra bảng điều khiển, có thể cung cấp cho bạn lỗi chi tiết cần được sửa chữa, và sau đó bạn có thể xây dựng. Điều này giúp ích trong trường hợp của tôi
david72

40

Tôi gặp vấn đề tương tự. Khi tôi kiểm tra nó, tôi thấy rằng tên của tài nguyên XML theo bố cục không có quy ước đặt tên chính xác. Nó có một số chữ in hoa. Vì vậy, tôi đã đổi tên nó để làm cho tất cả các chữ cái viết thường và phép thuật hoạt động.


2
tnx ... ngớ ngẩn tôi nghĩ rằng tôi có thể sử dụng chữ hoa trong tên bố trí của mình
Kevin

làm việc cho tôi quá: giao diện điều khiển báo cáo này: [2010/9/22 16:19:40 - myproject] res \ drawable-ldpi \ downloadNow.png: tên file không hợp lệ: phải chứa chỉ [. một-Z0-9_]
sami

1
Cảm ơn, đây là vấn đề của tôi. Tôi đã có một tệp .xml trong thư mục bố cục có chữ in hoa và toàn bộ tệp R.java của tôi bị thiếu / sẽ không tạo vì nó. Cách duy nhất để biết điều đó là nhận ra rằng quy ước đặt tên không cho phép vốn; không có lỗi được tạo ra.
Lemmings19

1
Khi đặt tên các tệp tài nguyên hoặc thuộc tính, hãy thử đặt tên nó giống như u đặt tên một biến trong Java. R. class đặt các tài nguyên tức là id, có thể vẽ, tên tệp xml với hằng số cuối cùng tĩnh công khai, do đó, việc đặt "-", "ký tự đặc biệt" sẽ dẫn đến việc ngừng tạo R, vì các ký hiệu đó có thể có các phương tiện số học khác.
IronBlieo

1
Đúng, đây là vấn đề đối với tôi. Một tệp trong res / xml của tôi đề cập đến một tệp bố cục không tồn tại và rõ ràng điều này khiến R.java không được tạo, vì vậy nếu tôi chạy Clean, điều đó gây ra R.java bị thiếu, dẫn đến hàng trăm lỗi nhập ...
Cerin

28

Một lý do khiến R. class có thể bị mất đột ngột là khi có lỗi trong các tệp XML của bạn. Chẳng hạn, khi bạn thêm một tệp XML có chữ in hoa trong tên như myCoolLayout.xml không được phép. Hoặc khi bạn có tài liệu tham khảo không trỏ đến các tệp hiện có, v.v.


17

Trong Eclipse, chỉ cần sử dụng Project -> clean để làm sạch dự án. R.java sẽ được tự động xử lý lại.

Nếu vì một lý do nào đó không hiệu quả: Hãy đảm bảo các tệp layout.xml của bạn không có lỗi. Eclipse dường như có một chút lỗi ở đây: đôi khi nó không đánh dấu các lỗi trong XML cũng như trình thám hiểm gói. Trong trường hợp như vậy: Hãy xem giao diện "bảng điều khiển" hoặc "sự cố" sau khi sử dụng "sạch". Tất cả các lỗi nên được hiển thị ở đó. Sửa chúng và làm lại sạch sẽ.

LƯU Ý: KHÔNG cần thiết phải sửa các lỗi bạn gặp phải do thiếu tệp R! Chỉ cần sửa các tệp XML và các lỗi dự án khác và sử dụng sạch!


Hãy chắc chắn rằng các quy ước đặt tên tệp tài nguyên của bạn là chính xác. @Masi cảm ơn bạn đã xem xét "console" cho các lỗi sau khi xóa. Điều này đã giúp tôi.
Bharath Booshan

10

Khắc phục nhanh:

Tên gói trong tệp kê khai cần giống với tên trong /srcthư mục, /gengói thư mục sẽ được tự động sao chép.

Quan sát chi tiết:

Quan sát tên của gói trong /genthư mục. Trong trường hợp của tôi, nó khác với cái trong /srcthư mục.

Gói được tham chiếu trong tệp kê khai là của /genthư mục.

Tôi đã cố gắng thêm một gói có tên của /srcthư mục vào thư mục để /genxem điều gì sẽ xảy ra, nhưng điều này không giải quyết được vấn đề. Tôi đã tiến hành xóa tên gói không giống với tên gói của /srcthư mục. Gói này với tên không tương ứng với /srcthư mục đã được tạo lại ngay sau khi tôi gỡ bỏ nó.

Vì tham chiếu gói trong tệp kê khai tương ứng với tham chiếu được tạo lại một cách vô nghĩa và không tương ứng với gói trong /srcthư mục, điều này nhắc nhở đổi tên package = "oldPackage"với package = "srcFolderPackage".


9

Tôi đã có cùng một vấn đề và cuối cùng tôi đã tìm thấy vấn đề: Trong chuỗi String, tôi không giữ dòng <string name="app_name">program-name</string>có mặt theo mặc định khi tạo dự án Android mới. Tôi nghĩ rằng nó chỉ được sử dụng cho chương trình HelloWord, đây là chương trình gốc.

Tuy nhiên, AndroidManifest.xml đề cập đến giá trị này, do đó:

=> Một lỗi biên dịch;
=> R.java không được cập nhật;
=> ID không được công nhận ...


dòng trong chuỗi XML là "<string name =" app_name "> tên của chương trình </ string>". Xin lỗi, tôi đã có một vấn đề với bài viết của tôi.
Glaux

9

Android đã thêm vào công cụ xây dựng SDK ADT 22 cho cơ chế xây dựng. Bạn chỉ cần làm các bước sau.

  1. Cập nhật công cụ SDK Android
  2. Cập nhật công cụ nền tảng SDK Android
  3. Cập nhật công cụ xây dựng SDK Android
  4. Thêm đường dẫn của công cụ xây dựng của bạn vào biến đường dẫn. (đường dẫn đến ---- GIÁM ĐỐC CỦA BẠN-PATH \ android-sdk \ build-tools)

Điều này sẽ giải quyết vấn đề.


Câu trả lời của tôi là duy nhất liên quan đến câu hỏi. vẫn chỉ có 3 phiếu bầu. lạ thật
Mr.Ấn Độ

8

Nếu R.java của bạn không được tạo, một trong những giải pháp là xóa tệp bố cục có tên "blabla.out.xml".

Sau khi xóa tệp này, hãy thử làm sạch dự án khỏi menu Project -> Clean .


7

Là một khái quát của câu trả lời của Glaux, nếu bạn có bất kỳ lỗi nào trong resthư mục, thì R.java có thể không tạo ra - ngay cả khi bạn dọn dẹp và xây dựng lại. Giải quyết những lỗi đó trước.

Ví dụ: khi bạn thêm một tệp hình ảnh có nội dung "myimage-2.jpg", hệ thống sẽ coi đây là một lỗi, vì tên tệp được giới hạn ở các giá trị chữ và số. Thực hiện làm mới trên thư mục 'res' của bạn sau khi thêm bất kỳ tệp nào và xem đầu ra trong cửa sổ bảng điều khiển của bạn để biết bất kỳ cảnh báo tên tệp nào.


Chính xác! Điều này xảy ra với tôi mỗi lần khi tôi đổi tên các chuỗi trong chuỗi DOM của tôi. Điều này có thể tạo tài liệu tham khảo lơ lửng trong tập tin bố trí của tôi. Và THAT ức chế việc sản xuất R.java. Quá tệ, không có cách nào để cấu trúc lại các ID XML.
Scott Biggie

6

Nếu hệ điều hành của bạn là Ubuntu, tôi có thể cung cấp một số gợi ý:

  1. Cài đặt hoặc nâng cấp ia32-lib:

    sudo apt-get upgrade ia32-libs
  2. Kiểm tra xem bạn có đúng quyền trên thư mục aapt không:

    cd ANDROID/adt-bundle-linux-x86_64-20130522/sdk/build-tools/android-4.2.2
    chmod 777 aapt
  3. Bắt đầu Eclipse:

    sudo eclipse
  4. Chạy dự án -> Làm sạch trong Eclipse


thông minh. và nó cũng làm cho adb hoạt động. Chỉ cần nhắc tôi nên cài đặt cái này khi cài đặt lại Ubuntu.
Yeung

giải pháp tương tự cũng đúng với Debian amd64
Markus Peröbner

Câu trả lời này stackoverflow.com/questions/19523502/ từ cung cấp các hướng dẫn mới hơn, ia32-libs không tồn tại trên Tiểu học
Singagirl

6

Bạn 100% có lỗi trong tệp XML , nhưng xác minh XML không hiển thị cho bạn lỗi. Đây là lý do tại sao bạn cần kiểm tra các tệp XML của mình trước!


5

Thật là hữu ích khi xem qua Tab Vấn đề trong Eclipse. Trong trường hợp của tôi, tôi đã nhận được thông báo lỗi " android không thể giải quyết mục tiêu 'android-8' " khiến R.java không được tạo. Vì vậy, tôi đã sửa mục tiêu đã nhập thành mục tiêu tôi đang sử dụng trong tệp default.properIES , sau đó tôi thực hiện xóa sạch thông qua Dự án-> Làm sạch và voila! R.java được tạo tự động! Hy vọng nó giúp!


Cảm ơn bạn đã chỉ vào tab vấn đề. Tôi mới sử dụng Android và nhật thực, vì vậy trước đây không sử dụng nó và cảm thấy thất vọng. Đó là nơi đầu tiên để tìm khi gặp lỗi này.
Maadinsh

4

Dọn dẹp dự án, đóng Eclipse, mở lại và khởi chạy dự án của tôi cuối cùng đã khiến R.java của tôi xuất hiện trở lại ... Hy vọng nó sẽ giúp


Tôi cũng phải khởi động lại, Eclipse đã phàn nàn về việc mất tích nhưng nó đã có mặt ....
Filippo Mazza


4

R.java sẽ không bao giờ được tạo nếu có bất kỳ lỗi nào trong resthư mục. Ví dụ: trong thư mục con có thể vẽ có hai tệp có cùng tên, một là icon.png và tệp kia là icon.html.

Bạn có thể thấy một số lỗi trong cửa sổ nhật ký bảng điều khiển Eclipse có nội dung "Biểu tượng mục nhập tài nguyên đã được xác định." Sau khi xóa icon.html, bạn có thể xóa hoặc chỉ xóa genthư mục. Bạn sẽ thấy R.java được tạo.


4

Tôi thấy rằng bất kỳ tệp nào có chữ in hoa trong resthư mục sẽ tạo ra lỗi này. Điều này xảy ra với tôi với một tệp PNG tôi đã thêm và quên đi.


3

Sau khi đọc qua nhiều bài đăng và video trên YouTube, tôi thấy rằng mỗi chúng ta đều R.javathiếu vì những lý do khác nhau.

Đây là cách tôi sửa lỗi này trong Eclipse:

  • Tạo R.java trong genthư mục thủ công và lưu.
  • Sau đó, vào Project và bấm "Clean"

Thông báo sau sẽ hiển thị và tệp của bạn sẽ tự động được viết lại:

R.java đã được sửa đổi bằng tay! Hoàn nguyên về phiên bản đã tạo!


1
Anup .. Tôi đã làm điều đó /// Nhưng chỉ được gỡ bỏ khi tôi dọn dẹp ... Vấn đề vẫn chưa được giải quyết cho tôi!
ejjyrex

3

Đối với tôi, tôi đã liên kết v7 appcompat hai lần. Dù sao, trong Eclipse, nhấp chuột phải vào tên dự án trong Gói Explorer hoặc Bộ điều hướng, đi đến Thuộc tính, Android và bỏ chọn bất kỳ bản sao nào trong phần Thư viện. Bạn có thể cần Xây dựng -> Làm sạch sau đó.


2

Rõ ràng không có câu trả lời cuối cùng cho vấn đề này, nhưng đây là một câu trả lời khác mà tôi chưa thấy ở đây:

Tôi đã có R.javabiến mất sau (cố gắng) một đội Đồng bộ hóa, và có file giải quyết xung đột trong dự án (ví dụ thingy.xml.mine, thingy.xml.r35vv). Xóa chúng / giải quyết các xung đột được tái sinh R.


2

Tôi đã có vấn đề này. Vô tình tôi đã xóa cái này

xmlns:tools="http://schemas.android.com/tools"

đã bắt đầu gây ra lỗi xây dựng trên toàn dự án trong các tệp XML cũng như các tệp Java của tôi. Ngay sau khi tôi gõ lại những gì tôi đã xóa, nó đã hoạt động trở lại :)


2

OK để rõ ràng rằng có thể có rất nhiều nguyên nhân cho vấn đề này. Nếu bạn đang sử dụng máy linux 64 bit và bạn chỉ thiết lập ADT lần đầu tiên, bạn có thể gặp sự cố này khi R không tự động tạo. Kiểm tra tab bảng điều khiển và bạn có thể thấy một lỗi tương tự như:

 'No such file or directory' while attempting to get adb version from '/home/patrick/code/android-sdks/platform-tools/adb'

Nếu đó là trường hợp bạn cần cài đặt ia32-libs, sử dụng cái gì đó như:

 sudo apt-get install ia32-libs

Xem tại đây để biết chi tiết: Không tìm thấy adb Android


2

Tôi đã gặp vấn đề này một vài lần. Tôi thấy rằng nếu tôi không nhập gói R thông qua tên ứng dụng của mình, ví dụ, nếu ứng dụng của tôi có tên gói example.test thì tôi thấy rằng tôi phải nhập example.test.R để truy cập bất kỳ tài nguyên.

Nếu cái này không được nhập thì tài nguyên nơi được trả về là tài nguyên mặc định không có tài nguyên của riêng tôi.

Như đã nói nếu bạn thấy rằng bạn chỉ nhận được một danh sách các tài nguyên mặc định thì chỉ cần kiểm tra để đảm bảo rằng bạn đang nhập application_package_name.R chứ không phải android.R.


2

Vấn đề của tôi là nó appcompatkhông nằm trong cùng thư mục với dự án của tôi.

Tôi đã tìm thấy điều này khi biên dịch ứng dụng của mình với Ant .


1

Đồng thời đảm bảo rằng bạn có phiên bản mới nhất của plugin ADT và mở trình quản lý SDK Android để cập nhật tất cả các công cụ SDK lên phiên bản mới nhất. Kiểm tra các bản cập nhật trong chính Eclipse. Phiên bản không phù hợp gây ra vấn đề cho tôi.


1

Vấn đề của tôi là trong một tập tin menu. Trình biên dịch dường như không cảnh báo bạn nếu các chuỗi không tồn tại bên trong strings.xmlđược tham chiếu trong các tệp menu. Kiểm tra xem itemcác tệp trong menu của bạn có tham chiếu các chuỗi không tồn tại trong chuỗi của bạn không strings.xml. Thường trong android:title.


1

Đối với tôi, lỗi này xảy ra khi tôi cố gắng sao chép một lỗi hiện có res/menuthay vì tạo một lỗi với wizard.


1

Tất cả những câu trả lời này không thể hoạt động nếu bạn sử dụng Maven. Giải pháp cho tôi là thêm

<genDirectory>${project.basedir}/gen</genDirectory>

đến phần cấu hình của android-maven-plugin.


1

Tôi đã tìm thấy một giải pháp tại sao R. class không được tạo bởi Eclipse sau khi thực hiện lại - 2 dọn dẹp, xây dựng, v.v.

Vấn đề nằm ở đây trong chuỗi XML:

<string name="hello">Hello World, HelloAutoComplete!</string>

<string name="app_name">HelloAutoComplete</string>

Chúng được mặc định tạo bởi Eclipse khi bạn tạo các dự án.

Chắc chắn bạn đang thay đổi chuỗi XML cho yêu cầu của riêng bạn. Đôi khi, bạn xóa chuỗi hai tệp này khỏi mã của bạn:

Nó đang gây ra sự cố trong tệp AndroidManifest.xml:

<application android:icon="@drawable/icon"  android:label="@string/app_name">
<activity android:name=".HelloAutoComplete" android:label="@string/app_name">

Vì vậy, nó không thể giao tiếp với String.xml.


1

Tôi đã thay đổi tên tệp XML bố cục của mình và phát hiện ra sau đó là tệp XML (nhà cung cấp tiện ích trong trường hợp này) vẫn đề cập đến XML bố cục cũ không tồn tại và điều đó ngăn cản việc tạo / sửa lỗi tự động của lớp R.

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.