Berkembang untuk Android di Eclipse: R.java tidak beregenerasi

309

Saya menemukan bahwa R.java saya tidak pernah diperbarui, jadi tidak mengandung informasi tentang sumber daya baru saya, jadi saya memutuskan untuk menghapusnya dan berpikir bahwa Eclipse akan menghasilkan yang baru. Tetapi itu tidak terjadi, dan saya tidak memiliki R.java sekarang. Bagaimana saya bisa membuat ulang?

Saya menggunakan Windows 7.

Dari salah satu komentar: "Melakukan Proyek -> Bersihkanlah yang menyebabkan masalah bagi saya. Pembersihan menghapus R.java ... dan untuk alasan apa pun plugin tidak membuat ulang file."

Peter Mortensen
sumber
solusi saya ketika membersihkan tidak berfungsi: saya perlu mengunduh Build Tools di SDK manager dan kemudian restart sistem. Saya memiliki ADT 22.3.0.
Moradnejad

Jawaban:

177

Situs ini menyarankan:

jika Anda menjalankan clean pada proyek itu harus membuat ulang semua file Java yang dihasilkan, yaitu R.

...dan...

Di Eclipse, di bawah menu Project, adalah opsi membangun secara otomatis. Itu akan membantu Anda membangun file R.java setiap kali modifikasi dilakukan. Opsi Bersihkan ... juga ada di bawah Project.

Situs ini menyarankan solusi lain.

aioobe
sumber
1
Siapa yang akan berpikir, terima kasih teman-teman +1 di sini saya punya masalah dengan tata letak saya dan jadi R.Java tidak sedang dibuat. Kepala bagus! Bersulang.
101
Melakukan Proyek-> Bersihkan adalah penyebab masalah bagi saya. Pembersihan menghapus R.java ... dan karena alasan apa pun plugin tidak membuat ulang file.
Cerin
7
Saya memiliki pop up ini ketika saya ditautkan ke perpustakaan yang membutuhkan versi dukungan API Android berbeda dari yang saya instal. Ketergantungan tidak bekerja dan R saya tidak dihasilkan setelah itu. Seperti yang orang lain katakan, itu muncul di log kesalahan, jadi periksa di sana.
mikebabcock
1
Dalam kasus saya, membersihkan proyek hanya menghilangkan R.java , bukan regenerasi itu. stackoverflow.com/questions/13065425/…
RobinJ
96
R.java doens't regenerasi jika Anda memiliki beberapa kesalahan di direktori res. Kesalahan yang dihapus -> memecahkan masalah dalam kasus saya :)
JavaRunner
300

Saya menemukan ini terjadi pada saya dengan tata letak yang rusak dan semuanya meledak. Tenang, ini seperti kesalahan lama ketika Anda pertama kali belajar pemrograman C di mana Anda lupa satu titik koma dan menghasilkan seratus kesalahan. Banyak panik, tekan semua tombol, dan membuat segalanya lebih buruk.

Larutan

  • Pastikan semua R.tautan tidak rusak. Perbaiki semua kesalahan dalam file XML Anda . Jika ada sesuatu di ADK rusak, Rtidak akan diperbarui.
  • Jika Anda entah bagaimana mengenai sesuatu dan membuat import android.Raktivitas Anda, hapuslah .
  • Jalankan Proyek -> Bersihkan . Ini akan menghapus dan membuat ulang R dan BuildConfig.
  • Pastikan Proyek -> Bangun Secara Otomatis dicentang. Jika tidak, buat secara manual via Menu -> Project -> Build Project.
  • Tunggu beberapa detik hingga kesalahannya hilang.
  • Jika tidak berhasil, hapus semua yang ada di folder / gen /
  • Jika masih tidak berhasil, coba klik kanan proyek Anda -> Alat Android -> Perbaiki Properti Proyek .
  • Periksa file * .properties Anda (di folder root folder aplikasi Anda) dan pastikan tautan di sana tidak rusak.
  • Klik kanan proyek Anda > properti> Android . Lihatlah bagian Sasaran Proyek dan bagian Perpustakaan di sisi kanan halaman. Target Bangun Anda harus cocok dengan target di AndroidManifest.xml Anda. Jadi jika diatur ke target 17 di AndroidManifest, pastikan bahwa Nama Target adalah Android 4.2. Jika Perpustakaan Anda memiliki X di bawah referensi, hapus dan tambahkan kembali perpustakaan sampai ada tanda centang hijau. Ini mungkin terjadi jika Anda telah memindahkan beberapa file dan folder.

Apa yang harus dilakukan jika R tidak regenerasi

Ini biasanya terjadi ketika Anda memiliki file XML yang rusak.

  • Periksa kesalahan di dalam file XML Anda, terutama di dalam /res/folder
  • Tempat umum adalah /layout/dan /values/, terutama jika Anda telah mengubah salah satunya baru-baru ini
  • Periksa AndroidManifest.xml. Saya menemukan bahwa sering saya mengubah string dan lupa mengubah nama string AndroidManifest.xml.
  • Periksa apakah Android SDK Build-toolssudah diinstal. Window -> Android SDK Manager -> Tools -> Android SDK Build-tools
  • Pastikan ketika Anda memperbarui Android SDK Tools, Anda juga memperbarui Android SDK Platform-toolsdan Android ADK Build-tools. Build gagal secara diam-diam jika tidak cocok.
  • Jika Anda tidak dapat menemukan masalahnya, klik kanan / gen / -> Pulihkan dari riwayat lokal ... -> centang R.java -> klik Pulihkan . Bahkan jika itu tidak menyelesaikan masalah, itu akan menghapus kesalahan ekstra untuk membuat masalah lebih mudah ditemukan.
Muz
sumber
21
ini harus menjadi jawaban teratas!
john.k.doe
6
Memang, itu membuat saya sadar bahwa lingkungan saya masih membutuhkan pembaruan untuk alat-alat tersebut.
woodleg.as
11
Window-> Android SDK Manager-> Tools-> Android SDK Build-tools ini adalah solusi untuk saya,
1
Saya membaca lusinan jawaban dan hanya yang ini yang menyebutkan memeriksa SDK Build-tools. Saya secara membabi buta membiarkan eclipse mengunduh dan menginstal semua perangkat Android saya ketika ditawarkan untuk melakukannya. Itu benar-benar merindukan bagian itu.
Justin Aquadro
1
Periksa konsol, mungkin memberi Anda kesalahan terperinci yang perlu diperbaiki, dan kemudian Anda dapat membangun. Ini membantu dalam kasus saya
david72
40

Saya memiliki masalah yang sama. Ketika saya memeriksanya, saya menemukan bahwa nama sumber daya XML di bawah tata letak tidak memiliki konvensi penamaan yang benar. Itu memiliki beberapa huruf kapital. Jadi saya menamainya untuk membuat semua huruf menjadi huruf kecil dan keajaiban itu berhasil.

Amit Kumar
sumber
2
tnx ... konyol saya berpikir saya bisa menggunakan huruf besar dalam nama tata letak saya
Kevin
bekerja untuk saya juga: konsol melaporkan ini: [2010-09-22 16:19:40 - myproject] res \ drawable-ldpi \ downloadNow.png: Nama file tidak valid: harus mengandung hanya [a-z0-9_.]
sami
1
Terima kasih, ini masalah saya. Saya memiliki file .xml di folder tata letak dengan modal di dalamnya, dan seluruh file R.java saya hilang / tidak dapat dihasilkan karena itu. Satu-satunya cara untuk mengetahui itu adalah dengan menyadari bahwa konvensi penamaan tidak memungkinkan modal; tidak ada kesalahan yang dihasilkan.
Lemmings19
1
Saat memberi nama file sumber daya atau atribut, coba beri nama seperti Anda beri nama variabel di Java. R.class menempatkan sumber daya yaitu id, drawable, nama file xml dengan hal-hal konstan akhir statis publik, sehingga menempatkan "-", "karakter khusus" akan menyebabkan berhenti menghasilkan R, karena simbol-simbol tersebut mungkin memiliki cara aritmatika lainnya.
IronBlossom
1
Yap, ini masalah bagi saya. File di res / xml saya merujuk ke file tata letak yang tidak ada, dan tampaknya ini menyebabkan R.java tidak dihasilkan, jadi jika saya menjalankan Clean, yang menyebabkan R.java hilang, menghasilkan ratusan kesalahan impor ...
Cerin
28

Salah satu alasan R.class dapat hilang secara tiba-tiba adalah ketika ada kesalahan dalam file XML Anda. Misalnya, ketika Anda menambahkan file XML dengan huruf besar dalam nama seperti myCoolLayout.xml yang tidak diizinkan. Atau ketika Anda memiliki referensi yang tidak mengarah ke file yang ada, dll.

Pawel
sumber
17

Di Eclipse, cukup gunakan Project -> clean untuk membersihkan proyek. R.java akan secara otomatis dibuat kembali.

Jika karena alasan tertentu dos tidak berfungsi: Pastikan file layout.xml Anda tidak mengandung kesalahan. Eclipse tampaknya agak bermasalah di sini: kadang-kadang tidak menandai kesalahan dalam XML atau paket explorer. Dalam kasus seperti itu: Lihatlah tampilan "konsol" atau "masalah" setelah menggunakan "bersih". Semua kesalahan harus ditampilkan di sana. Perbaiki dan ulangi pembersihan.

CATATAN: BUKAN perlunya memperbaiki kesalahan yang Anda dapatkan karena file R yang hilang! Perbaiki file XML dan kesalahan proyek lainnya dan gunakan clean!

masi
sumber
Pastikan konvensi penamaan file sumber daya Anda sudah benar. @Masi terima kasih atas tip Anda mencari "konsol" untuk kesalahan setelah bersih. ini membantu saya.
Bharath Booshan
10

Perbaikan cepat:

Nama paket dalam manifes harus sama dengan yang ada di /srcfolder, /genpaket folder akan secara otomatis direproduksi.

Pengamatan detail:

Amati nama paket di /genfolder tersebut. Dalam kasus saya itu berbeda dari yang ada di /srcfolder.

Paket yang dirujuk dalam manifes adalah dari /genfolder.

Saya mencoba untuk menambahkan paket dengan nama /srcfolder ke /genfolder juga melihat apa yang akan terjadi, tetapi ini tidak menyelesaikan masalah. Saya kemudian melanjutkan untuk menghapus nama paket yang tidak sama dengan nama paket /srcfolder. Paket ini dengan nama yang tidak sesuai dengan /srcfolder itu dibuat kembali segera setelah saya menghapusnya.

Karena referensi paket di manifes berhubungan dengan yang dibuat ulang tanpa alasan dan yang tidak sesuai dengan paket di /srcfolder, ini diminta untuk mengganti nama package = "oldPackage"dengan package = "srcFolderPackage".

androidWorkerTheEighth
sumber
9

Saya memiliki masalah yang sama, dan akhirnya saya menemukan masalah: Di strings.xml, saya tidak menjaga garis <string name="app_name">program-name</string>yang ada secara default saat membuat proyek Android baru. Saya pikir itu hanya digunakan untuk program HelloWord, yang merupakan program asli.

Namun, AndroidManifest.xml merujuk pada nilai ini, karenanya:

=> Kesalahan kompilasi;
=> R.java tidak diperbarui;
=> ID tidak dikenali ...

Glaux
sumber
baris dalam string.xml adalah "<string name =" app_name "> nama program </string>". Maaf, saya punya masalah dengan posting saya.
Glaux
9

Android telah menambahkan dalam SDK build tool ADT 22 untuk mekanisme pembangunan. Anda hanya perlu melakukan langkah-langkah berikut.

  1. Perbarui Alat Android SDK
  2. Perbarui Alat Platform SDK Android
  3. Perbarui Alat Android SDK Build
  4. Tambahkan path alat build Anda ke variabel path. (jalan ke ---- DIREKTORI ANDA-PATH \ android-sdk \ build-tools)

Ini akan menyelesaikan masalah.

Amol
sumber
Jawaban saya adalah satu-satunya yang berhubungan dengan pertanyaan itu. masih mendapat hanya 3 suara. aneh!
Mr.India
8

Jika R.java Anda tidak dibuat, salah satu solusinya adalah menghapus file tata letak bernama "blabla.out.xml".

Setelah menghapus file ini, coba bersihkan proyek dari menu Project -> Clean .

Shashank
sumber
7

Sebagai generalisasi dari jawaban glaux ini, jika Anda memiliki setiap kesalahan dalam resdirektori, maka R.java mungkin tidak menghasilkan - bahkan jika Anda bersih dan membangun kembali. Atasi kesalahan itu terlebih dahulu.

Sebagai contoh: ketika Anda menambahkan file gambar katakanlah, "myimage-2.jpg", sistem akan menganggap ini sebagai kesalahan, karena nama file terbatas pada nilai alfanumerik. Lakukan penyegaran pada direktori 'res' Anda setelah menambahkan file apa pun dan tonton hasilnya di jendela konsol Anda untuk peringatan nama file apa pun.

Abel
sumber
Persis! Ini terjadi pada saya sesekali ketika saya mengganti nama string di strings.xml saya. Ini dapat membuat referensi yang menggantung di file tata letak saya. Dan itu menghambat produksi R.java. Sayang sekali tidak ada cara untuk memperbaiki ID XML.
Scott Biggs
6

Jika OS Anda adalah Ubuntu, saya dapat memberikan beberapa saran:

  1. Pasang atau tingkatkan ia32-lib:

    sudo apt-get upgrade ia32-libs
  2. Periksa apakah Anda memiliki izin yang benar pada folder aapt:

    cd ANDROID/adt-bundle-linux-x86_64-20130522/sdk/build-tools/android-4.2.2
    chmod 777 aapt
  3. Mulai Eclipse:

    sudo eclipse
  4. Jalankan Project -> Clean in Eclipse

Nevin Chen
sumber
luar biasa. dan juga itu membuat adb berfungsi. Ingatkan saya bahwa saya harus menginstal ini ketika menginstal ulang ubuntu.
Yeung
solusi yang sama berlaku untuk Debian amd64
Markus Peröbner
Jawaban ini stackoverflow.com/questions/19523502/… memberikan instruksi yang lebih segar, ia32-libs tidak ada di Elementary
Singagirl
6

Anda 100% memiliki kesalahan dalam file XML , tetapi verifikasi XML tidak menunjukkan kesalahan. Inilah alasan mengapa Anda perlu memeriksa file XML Anda terlebih dahulu!

Erdinc Ay
sumber
5

SELALU bermanfaat untuk melihat Tab Masalah di Eclipse. Dalam kasus saya, saya mendapatkan pesan kesalahan " android tidak dapat menyelesaikan target 'android-8' " yang membuat R.java tidak dihasilkan. Jadi, saya mengoreksi target yang diimpor ke yang saya gunakan di file default.properties , kemudian saya melakukan pembersihan melalui Projects-> Clean dan voila! R.java dihasilkan secara otomatis! Semoga ini bisa membantu!

goseib
sumber
Terima kasih telah menunjuk ke tab masalah. Saya baru mengenal android dan gerhana, jadi tidak menggunakannya sebelumnya dan merasa frustrasi. Ini tempat pertama yang harus dilihat ketika menemukan kesalahan ini.
Maadinsh
4

Membersihkan proyek, menutup Eclipse, membuka kembali dan meluncurkan proyek saya akhirnya membuat R.java saya muncul kembali ... Semoga ini membantu

Filippo Mazza
sumber
Saya juga harus reboot, Eclipse mengeluh tentang kehilangan aapt tapi itu hadir ....
Filippo Mazza
4

Pastikan Anda tidak mengimpor

android.R;

Zain Ali
sumber
4

R.java tidak akan pernah dihasilkan jika ada kesalahan dalam resfolder. Misalnya, dalam subfolder yang dapat ditarik ada dua file yang memiliki nama yang sama, satu adalah icon.png dan yang lainnya adalah icon.html.

Anda dapat melihat beberapa kesalahan di jendela log konsol Eclipse yang mengatakan "Ikon entri sumber daya sudah ditentukan.". Setelah menghapus icon.html, Anda dapat membersihkan atau menghapus genfolder. Anda akan menemukan bahwa R.java dibuat.

Peter Mortensen
sumber
4

Saya menemukan bahwa file apa pun yang memiliki huruf kapital di resfolder akan membuat kesalahan ini. Ini terjadi pada saya dengan file PNG yang saya tambahkan dan lupakan.

Peter Mortensen
sumber
3

Setelah membaca banyak posting dan video YouTube, saya menemukan bahwa masing-masing dari kita R.javakehilangan karena alasan yang berbeda.

Inilah cara saya memperbaikinya di Eclipse:

  • Buat R.java di genfolder secara manual dan simpan.
  • Setelah itu pergi ke Project dan klik "Clean"

Pesan berikut akan ditampilkan dan file Anda akan secara otomatis ditulis ulang:

R.java telah dimodifikasi secara manual! Mengembalikan ke versi yang dibuat!

Anup Singh
sumber
1
Anup .. aku melakukan itu /// Tapi hanya untuk dihapus ketika aku membersihkannya ... Masalahnya masih belum terpecahkan untukku!
ejjyrex
3

Bagi saya, saya telah menautkan v7 appcompat dua kali. Bagaimanapun, di Eclipse, klik kanan nama proyek di Package Explorer atau Navigator, buka Properties, Android, dan hapus centang duplikat apa pun di bagian Perpustakaan. Anda mungkin perlu Membangun -> Bersihkan setelah itu.

Shanker Kaura
sumber
2

Jelas tidak ada satu jawaban terakhir untuk ini, tapi ini satu lagi yang belum saya lihat di sini:

Aku sudah R.javahilang setelah (mencoba) Tim Sinkronisasi, dan ada file resolusi konflik dalam proyek (yaitu, thingy.xml.mine, thingy.xml.r35, dll). Menghapusnya / menyelesaikan konflik yang muncul kembali R.

Ben Mosher
sumber
2

Saya punya masalah ini. Secara tidak sengaja saya menghapus ini

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

yang mulai menyebabkan kesalahan pembangunan di seluruh proyek dalam file XML saya serta file Java saya. Segera setelah saya mengetik ulang apa yang saya hapus, itu berhasil lagi :)

Mohamed El-Saka
sumber
2

OK jadi jelas bahwa ada banyak penyebab untuk masalah ini. Jika Anda menggunakan mesin linux 64 bit dan Anda baru saja mengatur ADT untuk pertama kali, Anda mungkin mendapatkan masalah ini ketika R tidak secara otomatis menghasilkan. Periksa tab konsol dan Anda mungkin melihat kesalahan yang mirip dengan:

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

Jika itu masalahnya Anda perlu menginstal ia32-libs, menggunakan sesuatu seperti:

 sudo apt-get install ia32-libs

Lihat di sini untuk detail: Android adb tidak ditemukan

Patrick
sumber
2

Saya telah menemukan masalah ini beberapa kali. Saya menemukan bahwa jika saya tidak mengimpor paket R melalui nama aplikasi saya, misalnya, jika aplikasi saya memiliki contoh nama paket.test maka saya menemukan bahwa saya harus mengimpor example.test.R untuk mengakses salah satu sumber daya.

Jika ini tidak diimpor maka sumber daya yang dikembalikan adalah sumber daya default tanpa termasuk saya sendiri.

Dengan itu dikatakan jika Anda menemukan bahwa Anda hanya mendapatkan daftar sumber daya default maka hanya memeriksa untuk memastikan bahwa Anda mengimpor application_package_name.R dan bukan android.R.

Peter Mortensen
sumber
2

Masalah saya adalah bahwa appcompatdirektori itu tidak sama dengan proyek saya.

Saya menemukan ini ketika menyusun aplikasi saya dengan Ant .

Martin
sumber
1

Pastikan juga Anda memiliki versi terbaru dari plugin ADT, dan buka manajer Android SDK untuk memperbarui semua alat SDK ke versi terbaru. Periksa pembaruan di Eclipse sendiri. Versi yang tidak cocok menyebabkan masalah bagi saya.

gak
sumber
1

Masalah saya ada di dalam file menu. Kompiler tampaknya tidak memperingatkan Anda jika string yang tidak ada di dalamnya strings.xmldirujuk dalam file menu. Periksa apakah itemfile XML Anda di menu Anda referensi string apa pun yang tidak ada di file Anda strings.xml. Biasanya di android:title.

Stefan Anca
sumber
1

Bagi saya, kesalahan ini disebabkan ketika saya mencoba menduplikasi yang sudah ada res/menualih - alih membuatnya dengan wizard.

Hakim
sumber
1

Semua jawaban ini tidak dapat berfungsi jika Anda menggunakan Maven. Solusi bagi saya adalah menambahkan

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

ke bagian konfigurasi android-maven-plugin.

Bevor
sumber
1

Saya menemukan solusi mengapa R.class tidak dibuat oleh Eclipse setelah membuatnya lagi - 2 bersih, bangun, dll.

Masalahnya ada di sini di strings.xml:

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

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

Ini secara default dibuat oleh Eclipse ketika Anda membuat proyek.

Tentunya Anda mengubah strings.xml untuk kebutuhan Anda sendiri. Terkadang Anda menghapus string.xmls dua baris ini dari kode Anda:

Itu membuat masalah di file AndroidManifest.xml:

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

Jadi itu tidak dapat berkomunikasi dengan strings.xml.

aarifmkhan
sumber
1

Saya mengubah nama file XML layout saya dan mengetahui kemudian bahwa file XML (penyedia widget dalam hal ini) masih mengacu pada layout XML lama yang tidak ada, dan yang mencegah pembuatan otomatis / koreksi kelas R.

Howard
sumber