Eclipse'de Android için Geliştirme: R.java yenilenmiyor


309

R.java'mın hiçbir zaman güncellenmediğini öğrendim, bu yüzden yeni kaynaklarım hakkında bilgi içermiyor, bu yüzden silmeye karar verdim ve Eclipse'in yeni bir tane oluşturacağını düşündüm. Ama bu olmadı ve şimdi R.java'm yok. Nasıl yenileyebilirim?

Windows 7 kullanıyorum.

Yorumlardan birinden: " Benim için soruna neden olan proje -> Temizlik Yapmak . Temizleme R.java'yı siler ... ve herhangi bir nedenle eklenti dosyayı yeniden oluşturmuyor."


temizlik yaparken benim çözümüm işe yaramadı: SDK yöneticisinde Build Tools'u indirip sistemi yeniden başlatmam gerekiyordu. ADT 22.3.0'ım var.
Moradnejad

Yanıtlar:


177

Bu site şunları önerir:

projede bir temiz çalıştırırsanız, oluşturulan tüm Java dosyalarını, yani R'yi yeniden oluşturmalıdır.

...ve...

Eclipse'de, Proje menüsünün altında, otomatik olarak oluşturulan bir seçenek bulunur. Bu, her değişiklik yapıldığında R.java dosyasını oluşturmanıza yardımcı olur. Clean ... seçeneği Project altında da bulunmaktadır.

Bu site başka bir çözüm önermektedir.


1
Kim düşünebilirdi, teşekkürler çocuklar +1 Burada benim düzenim ile ilgili bir sorun vardı ve bu yüzden R.Java oluşturulmuyordu. Büyük kafa! Şerefe.

101
Benim için soruna neden olan proje-> Temizlik yapmak. Temizleme R.java'yı siler ... ve herhangi bir nedenle eklenti dosyayı yeniden oluşturmuyor.
Cerin

7
Yüklediğimden farklı bir Android destek API sürümü gerektiren bir kütüphaneye bağlandığımda bu pop-up vardı. Bağımlılıklar işe yaramadı ve bundan sonra R'm üretilmedi. Diğerlerinin söylediği gibi, hata günlüğünde görünür, bu yüzden orada kontrol edin.
mikebabcock

1
Benim durumumda, projeyi temizlemek, onu yenilemek yerine kaldırır R.java . stackoverflow.com/questions/13065425/…
RobinJ

96
Res dizininde bazı hatalarınız varsa R.java yeniden oluşturmaz. Kaldırılan hatalar -> benim durumumda sorun çözüldü :)
JavaRunner

300

Bunu bana kırık bir düzende buldum ve her şey patladı. Rahatlayın, bir noktalı virgül unuttuğunuz ve yüz hata ürettiği C programlamasını ilk öğrendiğinizde bu eski bir hata gibi. Birçok panik, tüm düğmelere basın ve işleri daha da kötüleştirir.

Çözüm

  • R.Bağlantıların hiçbir şeyin bozuk olmadığından emin olun . XML dosyalarınızdaki tüm hataları düzeltin . ADK'larda herhangi bir şey bozulursa, Ryenilenmez.
  • Bir şekilde bir şeye vurup import android.Retkinliğinizde oluşturduysanız kaldırın .
  • Projeyi Çalıştır -> Temizle . Bu, R ve BuildConfig dosyalarını siler ve yeniden oluşturur.
  • Project -> Otomatik Olarak Oluştur öğelerinin işaretli olduğundan emin olun . Değilse, üzerinden manuel olarak oluşturun Menu -> Project -> Build Project.
  • Hataların kaybolması için birkaç saniye bekleyin .
  • Çalışmazsa, / gen / klasörün içindeki her şeyi silin
  • Hala çalışmıyorsa , projenizi sağ tıklamayı deneyin -> Android Araçları -> Proje Özelliklerini Düzelt .
  • * .Properties dosyalarınızı kontrol edin (uygulama klasörünüzün kök klasöründe) ve oradaki bağlantıların bozuk olmadığından emin olun.
  • Projenizi> özellikler> Android'i sağ tıklayın . Sayfanın sağ tarafındaki Proje Oluşturma Hedefi ve Kütüphane bölümlerine bakın. Oluşturma Hedefiniz AndroidManifest.xml dosyanızdaki hedefle eşleşmelidir. Dolayısıyla, AndroidManifest'te hedef 17 olarak ayarlanmışsa, Hedef Adının Android 4.2 olduğundan emin olun. Kitaplığınızda başvuru altında bir X varsa, kitaplığı yeşil bir onay işareti olana kadar kaldırın ve yeniden ekleyin. Bu, birkaç dosya ve klasörü hareket ettirdiyseniz olabilir.

R yenilenmezse ne yapmalı

Bu genellikle bozuk bir XML dosyanız olduğunda olur.

  • XML dosyalarınızdaki, özellikle /res/klasör içindeki hataları kontrol edin
  • Ortak yerler /layout/ve /values/özellikle yakınlarda birini değiştirdiyseniz
  • Kontrol edin AndroidManifest.xml. Ben sık sık bir dize değiştirmek ve dize adını değiştirmek için unuttum buluyorum AndroidManifest.xml.
  • Android SDK Build-toolsYüklü olup olmadığını kontrol edin . Pencere -> Android SDK Yöneticisi -> Araçlar -> Android SDK Oluşturma araçları
  • Android SDK ToolsGüncellediğinizde, Android SDK Platform-toolsve öğelerini de güncellediğinizden emin olun Android ADK Build-tools. Eşleşmezlerse derleme sessizce başarısız olur.
  • Sorunu bulamazsanız, / gen / -> Yerel geçmişten geri yükle'yi sağ tıklayın ... -> R.java'yı işaretleyin -> Geri Yükle'yi tıklayın . Sorunu çözmese bile, sorunun daha kolay bulunmasını sağlamak için ekstra hataları temizler.

21
bu en iyi cevap olmalı!
john.k.doe

6
Gerçekten de, ortamımın hala araçların güncellenmesi gerektiğini fark etmemi sağladı.
woodleg.as

11
Pencere-> Android SDK Yöneticisi-> Araçlar-> Android SDK Oluşturma araçları benim için bir çözüm, upvoted

1
Düzinelerce cevap okudum ve sadece bu yanıt SDK Oluşturma araçlarını kontrol etmekten bahsetti. Eclipse'in tüm Android araçlarını indirip yüklemesine izin veriyorum. O kısmı tamamen kaçırdı.
Justin Aquadro

1
Kontrol konsolu, düzeltilmesi gereken ayrıntılı hatalar verebilir ve sonra oluşturabilirsiniz. Bu benim durumumda yardımcı oldu
david72

40

Aynı sorunu yaşadım. Ne zaman ı ekose desenli XML kaynak adı düzeni altında doğru adlandırma kuralına sahip olmadığını buldum. Bazı büyük harfleri vardı. Bu yüzden tüm harfleri küçük harf yapmak için yeniden adlandırdım ve sihir çalıştı.


2
tnx ... aptal bana düzen isimlerimde büyük harf kullanabileceğimi düşünüyorum
Kevin

benim için de çalıştı: konsol şunu bildirdi: [2010-09-22 16:19:40 - projem] res \ drawable-ldpi \ downloadNow.png: Geçersiz dosya adı: yalnızca [a-z0-9_.]
sami

1
Teşekkürler, bu benim sorunumdu. Yerleşim klasöründe büyük harf olan bir .xml dosyası vardı ve dosyalamamın tamamı eksikti / bu nedenle oluşturmayacaktı. Bunu bilmenin tek yolu, adlandırma sözleşmesinin sermayeye izin vermediğini fark etmektir; hata oluşmadı.
Lemmings19

1
Kaynak dosyaları veya öznitelikleri adlandırırken, Java'da bir değişkeni u adlandırıyormuş gibi adlandırmayı deneyin. R.class kaynakları, yani id, çekilebilir, xml dosya adlarını genel statik son sabit konularla koyar, bu nedenle "-", "özel karakter" koymak R'nin üretilmesini durdurur, çünkü bu semboller başka aritmetik araçlara sahip olabilir.
IronBlossom

1
Evet, benim için sorun buydu. Res / xml dosyamdaki bir dosya var olmayan bir düzen dosyasına başvurdu ve görünüşe göre bu R.java'nın oluşturulmamasına neden oluyor, bu yüzden Clean'i çalıştırırsam, eksik bir R.java'ya neden olan yüzlerce içe aktarma hatasına neden oluyor ...
Cerin

28

R.class'ın aniden kaybolmasının bir nedeni, XML dosyalarınızda hatalar olmasıdır. Örneğin, myCoolLayout.xml gibi adlara izin verilmeyen büyük harfler içeren bir XML dosyası eklediğinizde. Veya mevcut dosyalara vb. İşaret etmeyen referanslarınız olduğunda.


17

Eclipse'de, projeyi temizlemek için Project -> clean komutunu kullanın. R.java otomatik olarak (yeniden) oluşturulacaktır.

Herhangi bir nedenle çalışmazsa: layout.xml dosyalarınızda hata bulunmadığından emin olun . Eclipse burada biraz hatalı görünüyor: bazen XML veya paket gezgini içindeki hataları işaretlemiyor. Böyle bir durumda: "temiz" kullandıktan sonra "konsol" veya "sorunlar" görünümüne bakın. Tüm hatalar orada gösterilmelidir. Onları düzeltin ve temiz bir şekilde yeniden yapın.

NOT: Eksik bir R dosyası nedeniyle aldığınız hataları düzeltmek GEREKMEZ! Sadece XML dosyalarını ve diğer proje hatalarını düzeltin ve temiz kullanın!


Kaynak dosya adlandırma kurallarınızın doğru olduğundan emin olun. @Masi temizlendikten sonra "konsol" a baktığınız için teşekkür ederiz. bu bana yardımcı oldu.
Bharath Booshan

10

Hızlı düzeltme:

Manifest'teki paket adının /srcklasördeki adla aynı olması gerekir , /genklasör paketi otomatik olarak yeniden oluşturulur.

Detaylı gözlem:

/genKlasördeki paketin adını gözlemleyin . Benim durumumda /srcklasördekinden farklıydı .

Manifest'te başvurulan paket, /genklasörün paketiydi.

/srcKlasöre klasör adıyla bir paket eklemeye /gençalıştım, ne olacağını görün, ancak bu sorunu çözmedi. Daha sonra /srcklasörün paket adıyla aynı olmayan paket adını kaldırmaya devam ettim . /srcKlasöre karşılık gelmeyen isimle bu paket, kaldırır kaldırmaz yeniden oluşturuldu.

Manifestteki paket referansı, anlamsız bir şekilde yeniden yaratılan ve /srcklasördeki pakete karşılık gelmediği için , bu package = "oldPackage"ile package = "srcFolderPackage".


9

Aynı sorunu vardı ve sonunda sorunu buldum: strings.xml'de, <string name="app_name">program-name</string>yeni bir Android projesi oluştururken varsayılan olarak mevcut olan çizgiyi tutmadım . Ben sadece orijinal program olan HelloWord programı için kullanıldığını düşündüm.

Ancak, AndroidManifest.xml bu değere başvurur, dolayısıyla:

=> Derleme hatası;
=> R.java güncellenmedi;
=> Kimlik tanınmıyor ...


string.xml içindeki satır "<string name =" app_name "> programın adı </string>" şeklindedir. Maalesef gönderimle ilgili bir sorun yaşadım.
Glaux

9

Android, yapı mekanizması için SDK oluşturma aracına ADT 22'yi ekledi. Sadece aşağıdaki adımları uygulamanız gerekir.

  1. Android SDK Aracını Güncelle
  2. Android SDK Platform Aracını Güncelle
  3. Android SDK Derleme Aracını Güncelle
  4. Oluşturma aracınızın yolunu yol değişkenine ekleyin. (yol ---- YÖNÜNÜZ-YOLUNUZ \ android-sdk \ build-tools)

Bu sorunu çözecektir.


Cevabım soruyla ilgili olan tek şey. hala sadece 3 oy aldı. garip!
Mr.India

8

R.java'nız oluşturulmuyorsa, çözümlerden biri "blabla.out.xml" adlı düzen dosyasını silmektir.

Bu dosyayı sildikten sonra, Project -> Clean menüsünden projeyi temizlemeyi deneyin .


7

Glaux'un cevabının bir genellemesi olarak, dizinde herhangi bir hata varsa res, R.java temizleyip yeniden oluştursanız bile üretmeyebilir. Önce bu hataları giderin.

Örneğin: "myimage-2.jpg" adlı bir görüntü dosyası eklediğinizde, dosya adları alfasayısal değerlerle sınırlı olduğundan sistem bunu bir hata olarak değerlendirir. Herhangi bir dosya ekledikten sonra 'res' dizininizi yenileyin ve herhangi bir dosya adı uyarısı için konsol pencerenizdeki çıktıyı izleyin.


Kesinlikle! Dizelerim.xml'deki dizeleri yeniden adlandırdığımda bu arada bir başıma geliyor. Bu, düzen dosyalarımda sarkan referanslar oluşturabilir. Ve THAT R.java üretimini engelliyor. XML kimliklerini yeniden düzenlemenin bir yolu yok.
Scott Biggs

6

İşletim sisteminiz Ubuntu ise, bazı önerilerde bulunabilirim:

  1. IA32-lib'i yükleyin veya yükseltin:

    sudo apt-get upgrade ia32-libs
  2. Aapt klasöründe doğru izne sahip olup olmadığınızı kontrol edin:

    cd ANDROID/adt-bundle-linux-x86_64-20130522/sdk/build-tools/android-4.2.2
    chmod 777 aapt
  3. Tutulmayı Başlat:

    sudo eclipse
  4. Projeyi Çalıştır -> Tutulmada Temizle


mükemmel. ve ayrıca adb işini yapar. Sadece hatırlat bana ubuntu yeniden yüklerken bunu yüklemeniz gerekir.
Yeung

Aynı çözüm Debian amd64 için de geçerli
Markus Peröbner


6

% 100'ünüz bir XML dosyasında hata var , ancak XML doğrulaması size hatayı göstermiyor. İlk olarak XML dosyalarınızı kontrol etmeniz gerekmesinin nedeni budur!


5

Eclipse'deki Problemler Sekmesine bakmak DAİMA faydalıdır . Benim durumumda, R.java'nın üretilmesini engelleyen bir " android 'android-8' hedefini çözemedi " hata mesajını alıyordum. Bu yüzden, içe aktarılan hedefi default.properties dosyasında kullandığım hedefe düzelttim , sonra Projeler-> Temizle ve temizle! R.java otomatik olarak oluşturulur! Umarım yardımcı olur!


Sorunlar sekmesine işaret ettiğiniz için teşekkür ederiz. Ben android ve tutulma için yeni, bu yüzden daha önce kullanmadım ve frustated alıyordum. Bu hatayla karşılaştığınızda ilk bakmanız gereken yer.
Maadinsh

4

Projeyi temizleme, Eclipse'i kapatma, yeniden açma ve projemi başlatma sonunda R.java'mı yeniden ortaya çıkardı ... Umarım yardımcı olur


Ben de yeniden başlatmak zorunda kaldı, Eclipse eksik aapt hakkında şikayet ediyordu ama mevcuttu ....
Filippo Mazza


4

Klasörde herhangi bir hata varsa R.java hiçbir zaman oluşturulmaz res. Örneğin, çekilebilir alt klasörde aynı ada sahip iki dosya vardır, biri icon.png ve diğeri icon.html.

Eclipse konsolu günlük penceresinde "Kaynak girişi simgesi zaten tanımlanmış" yazan bir hata görebilirsiniz. İcon.html dosyasını sildikten sonra genklasörü temizleyebilir veya silebilirsiniz . R.java'nın yaratıldığını göreceksiniz.


4

Ben fark ettik herhangi sahiptir dosya büyük harfler içinde resklasöründe bu hatayı yaratacaktır. Bu, eklediğim ve unuttuğum bir PNG dosyasıyla başıma geldi.


3

Birçok yayını ve YouTube videosunu okuduktan sonra, her birimizin R.javafarklı nedenlerden dolayı eksik olduğunu gördüm .

Eclipse bunu nasıl düzeltti:

  • İçinde R.java oluşturma genklasörüne manuel ve kaydedin.
  • Bundan sonra Project'e gidin ve "Temizle" yi tıklayın

Aşağıdaki mesaj görüntülenir ve dosyanız otomatik olarak yeniden yazılır:

R.java manuel olarak değiştirildi! Oluşturulan sürüme dönülüyor!


1
Anup .. Bunu yaptım /// Ama sadece temizlediğimde kaldırılacak ... Sorun hala benim için çözülmedi!
ejjyrex

3

Benim için v7 appcompat'ı iki kez bağladım. Her neyse, Eclipse'de, Paket Gezgini'nde veya Gezgin'de proje adını sağ tıklayın, Özellikler, Android'e gidin ve Kütüphane bölümündeki kopyaların işaretini kaldırın. Daha sonra Yapı -> Temizlemeniz gerekebilir.


2

Bunun kesin bir cevabı yok, ama işte burada görmediğim başka bir cevap var:

Ben yaşadım R.javabir takım Senkronize (teşebbüs) sonra kaybolur ve çatışma çözümü dosyaları projesi (yani vardı thingy.xml.mine, thingy.xml.r35vs.). Onları silmek / yeniden oluşturulan çatışmaları çözmek R.


2

Bu sorunu yaşadım. Yanlışlıkla bunu sildim

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

Java dosyalarımın yanı sıra XML dosyalarımda da projenin her yerinde derleme hatalarına neden oldu. Sildiğim şeyi geri alır yazmaz tekrar çalıştı :)


2

Tamam, bu sorunun birçok nedeni olabileceği açık. 64 bit linux bir makinedeyseniz ve ADT'yi ilk kez kuruyorsanız, R'nin otomatik olarak üretmediği bu sorunu alabilirsiniz. Konsol sekmesini kontrol edin ve aşağıdakine benzer bir hata görebilirsiniz:

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

Bu durumda, ia32-libs'i aşağıdaki gibi bir şey kullanarak yüklemeniz gerekir:

 sudo apt-get install ia32-libs

Ayrıntılar için buraya bakın: Android adb bulunamadı


2

Bu sorunla birkaç kez karşılaştım. R paketini uygulamamın adı aracılığıyla almadıysam, örneğin, uygulamamın paket adı example.test ise, o zaman herhangi birine erişmek için example.test.R'yi almak zorunda olduğumu buldum kaynaklar.

Bu içe aktarılmadıysa, geri döndürülen kaynaklar, kendimin hiçbirini içermeyen varsayılan kaynaklardı.

Bununla birlikte, yalnızca varsayılan kaynakların bir listesini aldığınızı fark ederseniz, android.R'yi değil application_package_name.R'yi içe aktardığınızdan emin olun.


2

Benim sorunum şuydu appcompat projemle aynı dizinde değildi.

Ant ile benim app derlerken bunu öğrendim .


1

Ayrıca ADT eklentisinin en son sürümüne sahip olduğunuzdan emin olun ve tüm SDK araçlarını en son sürüme güncellemek için Android SDK yöneticisini açın. Eclipse'in kendisindeki güncellemeleri de kontrol edin. Eşleşmeyen sürümler benim için soruna neden oldu.


1

Benim sorunum bir menü dosyasının içindeydi. Derleyici, içinde bulunmayan dizeler varsa sizi uyarmıyor gibi görünüyorstrings.xmlMenü dosyalarında başvurulursa . Senin olmadığını kontrol itemmenü XML dosyalarında s bulunmayan herhangi dizeleri başvuru strings.xml. Genellikle android:title.


1

Benim için, bu hata ile bir res/menutane oluşturmak yerine var olan bir kopyasını oluşturmaya çalıştığımda oluştu wizard.


1

Maven kullanıyorsanız tüm bu cevaplar işe yaramadı. Benim için çözüm,

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

android-maven-eklentisinin yapılandırma bölümüne gidin.


1

R.class'ın Eclipse tarafından tekrar yapıldıktan sonra neden yapılmadığına dair bir çözüm buldum - 2 temiz, inşa vb.

Sorun strings.xml dosyasında:

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

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

Bunlar, proje oluştururken varsayılan olarak Eclipse tarafından oluşturulur.

Kesinlikle strings.xml dosyasını kendi gereksinimleriniz için değiştiriyorsunuz. Bazen string.xmls kodunu bu iki satırı temizlersiniz:

AndroidManifest.xml dosyasında bir sorun çıkarıyor:

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

Bu yüzden strings.xml ile iletişim kuramaz.


1

Düzen XML dosya adımı değiştirdim ve daha sonra XML dosyasının (bu durumda widget sağlayıcısı) hala var olmayan ve R sınıfının otomatik oluşturulmasını / düzeltilmesini engelleyen eski düzen XML'sini ifade ettiğini öğrendim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.