Sviluppare per Android in Eclipse: R.java non si sta rigenerando


309

Ho scoperto che il mio R.java non viene mai aggiornato, quindi non contiene informazioni sulle mie nuove risorse, quindi ho deciso di eliminarlo e ho pensato che Eclipse ne avrebbe generato uno nuovo. Ma ciò non è accaduto e non ho R.java ora. Come posso rigenerarne uno?

Sto usando Windows 7.

Da uno dei commenti: "Fare progetto -> Pulisci è ciò che mi ha causato il problema. La pulizia cancella R.java ... e per qualsiasi motivo il plugin non sta rigenerando il file."


la mia soluzione durante la pulizia non funzionava: avevo bisogno di scaricare Build Tools nel gestore SDK e quindi riavviare il sistema. Ho ADT 22.3.0.
Moradnejad,

Risposte:


177

Questo sito suggerisce:

se si esegue un clean sul progetto, questo dovrebbe rigenerare tutti i file Java generati, vale a dire R.

...e...

In Eclipse, sotto il menu Progetto, è un'opzione creata automaticamente. Ciò ti aiuterebbe a creare il file R.java ogni volta che vengono apportate modifiche. L'opzione Pulisci ... è presente anche in Progetto.

Questo sito suggerisce un'altra soluzione.


1
Chi l'avrebbe mai detto, grazie ragazzi +1 qui ho avuto un problema con il mio layout e quindi R.Java non è stato creato. Ottimo testa a testa! Saluti.

101
Fare Project-> Clean è ciò che ha causato il problema per me. La pulizia elimina R.java ... e per qualsiasi motivo il plugin non sta rigenerando il file.
Cerin,

7
Ho avuto questo pop-up quando mi sono collegato a una libreria che richiedeva una versione dell'API di supporto Android diversa da quella che avevo installato. Le dipendenze non hanno funzionato e la mia R non è stata generata dopo. Come altri hanno già detto, viene visualizzato nel registro degli errori, quindi controlla lì.
mikebabcock,

1
Nel mio caso, la pulizia del progetto rimuove solo R.java, invece di rigenerarlo. stackoverflow.com/questions/13065425/...
RobinJ

96
R.java non si rigenera se si verificano degli errori nella directory res. Errori rimossi -> problema risolto nel mio caso :)
JavaRunner

300

Ho scoperto che questo mi sta succedendo con un layout rotto e tutto esplode. Rilassati, è come quel vecchio errore quando hai appreso per la prima volta a programmare C in cui dimentichi un punto e virgola e genera cento errori. Molti panico, premere tutti i pulsanti e peggiora le cose.

Soluzione

  • Assicurarsi che tutto ciò a cui i R.collegamenti non sono interrotti. Correggi tutti gli errori nei tuoi file XML . Se qualcosa negli ADK è rotto, Rnon si rigenera.
  • Se in qualche modo hai colpito qualcosa e creato import android.Rnella tua attività, rimuovilo .
  • Esegui progetto -> Pulisci . Ciò eliminerà e rigenererà R e BuildConfig.
  • Assicurati che Project -> Build Automatically sia spuntato. In caso contrario, crealo manualmente tramite Menu -> Project -> Build Project.
  • Attendere qualche secondo affinché gli errori scompaiano.
  • Se non funziona, elimina tutto all'interno della cartella / gen /
  • Se il problema persiste, prova a fare clic con il pulsante destro del mouse sul progetto -> Strumenti Android -> Correggi proprietà progetto .
  • Controlla i tuoi file * .properties (nella cartella principale della cartella dell'app) e assicurati che i collegamenti non siano interrotti.
  • Fare clic con il tasto destro del mouse sul progetto> proprietà> Android . Guarda le sezioni Target di progetto e Libreria sul lato destro della pagina. Il target di costruzione deve corrispondere al target in AndroidManifest.xml. Quindi, se è impostato come target 17 in AndroidManifest, assicurati che il Nome target sia Android 4.2. Se la tua Libreria ha una X sotto il riferimento, rimuovi e aggiungi nuovamente la libreria fino a quando non c'è un segno di spunta verde. Questo potrebbe accadere se hai spostato alcuni file e cartelle.

Cosa fare se R non si rigenera

Questo di solito succede quando hai un file XML rotto.

  • Controlla gli errori all'interno dei tuoi file XML, principalmente all'interno della /res/cartella
  • I luoghi comuni sono /layout/e /values/, soprattutto se ne hai cambiato uno di recente
  • Controllare AndroidManifest.xml. Trovo che spesso cambio una stringa e dimentico di cambiare il nome della stringa AndroidManifest.xml.
  • Verifica che Android SDK Build-toolssia installato. Finestra -> Gestione SDK Android -> Strumenti -> Strumenti di generazione SDK Android
  • Assicurarsi che quando si aggiorna il Android SDK Tools, si aggiorni anche il Android SDK Platform-toolse Android ADK Build-tools. La build fallisce silenziosamente se non corrispondono.
  • Se non riesci a trovare il problema, fai clic con il pulsante destro del mouse / gen / -> Ripristina dalla cronologia locale ... -> seleziona R.java -> fai clic su Ripristina . Anche se non risolve il problema, eliminerà gli errori aggiuntivi per facilitare la ricerca del problema.

21
questa dovrebbe essere la risposta migliore!
john.k.doe,

6
In effetti, mi ha fatto capire che il mio ambiente aveva ancora bisogno di un aggiornamento degli strumenti.
woodleg.as

11
Finestra-> Gestione SDK Android-> Strumenti-> Strumenti di build SDK Android questa è la soluzione per me, potenziata

1
Ho letto dozzine di risposte e solo questa menzionava il controllo degli strumenti di build dell'SDK. Ho lasciato ciecamente eclipse scaricare e installare tutti i miei strumenti Android quando è stato offerto di farlo. Ha completamente perso quella parte.
Justin Aquadro, l'

1
Controlla la console, potrebbe darti un errore dettagliato che deve essere corretto e quindi puoi creare. Questo mi ha aiutato nel mio caso
david72,

40

Ho avuto lo stesso problema. Quando l'ho verificato ho scoperto che il nome della risorsa XML nel layout non aveva la convenzione di denominazione corretta. Aveva alcune lettere maiuscole. Così l'ho rinominato per rendere tutte le lettere minuscole e la magia ha funzionato.


2
tnx ... mi stupido pensando di poter usare le maiuscole nei nomi dei miei layout
Kevin,

ha funzionato anche per me: la console ha segnalato questo: [2010-09-22 16:19:40 - myproject] res \ drawable-ldpi \ downloadNow.png: Nome file non valido: deve contenere solo [a-z0-9_.]
sami,

1
Grazie, questo era il mio problema. Avevo un file .xml nella cartella di layout con un capitale in esso, e il mio intero R.java archiviato mancava / non generava a causa di esso. L'unico modo per sapere che era rendersi conto che la convenzione di denominazione non consentiva un capitale; non sono stati generati errori.
Lemmings19

1
Quando si nominano file o attributi di risorse, provare a denominarli come se si nominasse una variabile in Java. la classe R. mette le risorse cioè id, drawable, nomi di file xml con una costante finale statica pubblica, quindi mettere "-", "carattere speciale" porterebbe a smettere di generare R, poiché quei simboli potrebbero avere altri mezzi aritmetici.
IronBlossom,

1
Sì, questo è stato il problema per me. Un file nel mio res / xml si riferiva a un file di layout che non esisteva, e apparentemente questo fa sì che R.java non venga generato, quindi se eseguo Clean, ciò ha causato un R.java mancante, causando centinaia di errori di importazione ...
Cerin,

28

Uno dei motivi per cui R.class può scomparire improvvisamente è quando ci sono errori nei tuoi file XML. Ad esempio, quando si aggiunge un file XML con lettere maiuscole nel nome come myCoolLayout.xml che non è consentito. O quando hai riferimenti che non puntano a file esistenti, ecc.


17

In Eclipse, usa semplicemente Project -> clean per pulire il progetto. R.java verrà automaticamente (ri) creato.

Se per qualche motivo che non funziona: assicurati che i tuoi file layout.xml non contengano errori. Eclipse sembra essere un po 'difettoso qui: a volte non segnala gli errori all'interno dell'XML né l'esploratore dei pacchetti. In tal caso: dai uno sguardo alla vista "console" o "problemi" dopo aver usato "clean". Tutti gli errori dovrebbero essere visualizzati lì. Risolvili e ripeti una pulizia.

NOTA: NON è necessario correggere gli errori che si verificano a causa di un file R mancante! Basta correggere i file XML e altri errori di progetto e utilizzare clean!


Assicurarsi che le convenzioni di denominazione dei file di risorse siano corrette. @Masi grazie per il suggerimento di cercare "console" per errori dopo la pulizia. questo mi ha aiutato.
Bharath Booshan,

10

Soluzione rapida:

Il nome del pacchetto nel manifest deve essere uguale a quello nella /srccartella, il /genpacchetto della cartella verrà automaticamente riprodotto.

Osservazione dettagliata:

Osservare il nome del pacchetto nella /gencartella. Nel mio caso era diverso da quello nella /srccartella.

Il pacchetto indicato nel manifest era quello della /gencartella.

Ho provato ad aggiungere un pacchetto con il nome della /srccartella anche alla cartella per /genvedere cosa sarebbe successo, ma questo non ha risolto il problema. Ho quindi proceduto a rimuovere il nome del pacchetto che non era lo stesso del nome del pacchetto della /srccartella. Questo pacchetto con il nome che non corrispondeva alla /srccartella è stato ricreato non appena l'ho rimosso.

Poiché il riferimento al pacchetto nel manifest corrispondeva a quello che veniva ricreato senza senso e che non corrispondeva al pacchetto nella /srccartella, ciò ha richiesto di rinominare package = "oldPackage"con package = "srcFolderPackage".


9

Ho avuto lo stesso problema e finalmente ho riscontrato il problema: in strings.xml, non ho mantenuto la linea <string name="app_name">program-name</string>presente per impostazione predefinita durante la creazione di un nuovo progetto Android. Ho pensato che fosse usato solo per il programma HelloWord, che è il programma originale.

Tuttavia, AndroidManifest.xml fa riferimento a questo valore, quindi:

=> Un errore di compilazione;
=> R.java non è aggiornato;
=> ID non riconosciuti ...


la riga in string.xml è "<string name =" app_name "> nome del programma </string>". Spiacente, ho avuto un problema con il mio post.
Glaux,

9

Android ha aggiunto lo strumento di creazione SDK ADT 22 per il meccanismo di costruzione. Hai solo bisogno di fare i seguenti passi.

  1. Aggiorna Android SDK Tool
  2. Aggiorna lo strumento piattaforma SDK per Android
  3. Aggiorna Android Build SDK Tool
  4. Aggiungi il percorso del tuo strumento di creazione alla variabile percorso. (percorso fino a ---- YOUR DIRECTORY-PATH \ android-sdk \ build-tools)

Questo risolverà il problema.


La mia risposta è l'unica che riguarda la domanda. ancora ottenuto solo 3 voti. strano!
Mr.India,

8

Se il tuo R.java non viene generato, una delle soluzioni è eliminare il file di layout denominato "blabla.out.xml".

Dopo aver eliminato questo file, prova a pulire il progetto dal menu Progetto -> Pulisci .


7

Come generalizzazione della risposta di Glaux, se si verificano errori nella resdirectory, R.java potrebbe non generarsi, anche se si pulisce e si ricostruisce. Risolvi prima quegli errori.

Ad esempio: quando aggiungi un file immagine di dire "myimage-2.jpg", il sistema lo considererà un errore, poiché i nomi dei file sono limitati ai valori alfanumerici. Fai un aggiornamento sulla tua directory 'res' dopo aver aggiunto i file e guarda l'output nella finestra della tua console per eventuali avvisi sui nomi dei file.


Esattamente! Questo mi succede ogni tanto quando rinomino le stringhe in strings.xml. Questo può creare riferimenti penzolanti nei miei file di layout. E CHE inibisce la produzione di R.java. Peccato che non sia possibile refactificare gli ID XML.
Scott Biggs,

6

Se il tuo sistema operativo è Ubuntu, posso fornire alcuni suggerimenti:

  1. Installa o aggiorna ia32-lib:

    sudo apt-get upgrade ia32-libs
  2. Verifica di disporre dell'autorizzazione corretta per la cartella aapt:

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

    sudo eclipse
  4. Esegui progetto -> Pulisci in Eclipse


eccellente. e inoltre fa funzionare adb. Ricordami che dovrei installarlo quando reinstallo Ubuntu.
Yeung,

la stessa soluzione è vera per Debian amd64
Markus Peröbner il

Questa risposta stackoverflow.com/questions/19523502/… fornisce istruzioni più fresche, non esistevano ia32-libs su Elementary
Singagirl

6

Hai un errore al 100% in un file XML , ma la verifica XML non ti mostra l'errore. Questo è il motivo per cui devi prima controllare i tuoi file XML!


5

È SEMPRE utile dare un'occhiata alla scheda Problemi in Eclipse. Nel mio caso, stavo ricevendo un messaggio di errore " Android incapace di risolvere l'obiettivo" android-8 "che impediva la generazione di R.java. Quindi, ho corretto il target importato a quello che stavo usando nel file default.properties , quindi ho eseguito un clean tramite Progetti-> Clean e voilà! R.java viene generato automaticamente! Spero che sia d'aiuto!


Grazie per aver indicato la scheda problemi. Sono nuovo su Android ed eclissi, quindi non l'ho mai usato prima e mi stavo facendo impazzire. È il primo posto da guardare quando si verifica questo errore.
Maadinsh,

4

La pulizia del progetto, la chiusura di Eclipse, la riapertura e il lancio del mio progetto alla fine hanno fatto riapparire il mio R.java ... Spero che aiuti


Ho anche dovuto riavviare, Eclipse si lamentava della scomparsa di aapt ma era presente ....
Filippo Mazza,


4

R.java non verrà mai generato se ci sono errori nella rescartella. Ad esempio, nella sottocartella estraibile ci sono due file che hanno lo stesso nome, uno è icon.png e l'altro è icon.html.

È possibile visualizzare alcuni errori nella finestra del registro della console Eclipse che dice "L'icona della voce di risorsa è già definita". Dopo aver eliminato icon.html, puoi pulire o semplicemente eliminare la gencartella. Scoprirai che R.java è stato creato.


4

Ho scoperto che qualsiasi file con lettere maiuscole nella rescartella creerà questo errore. Questo mi è successo con un file PNG che ho aggiunto e dimenticato.


3

Dopo aver letto molti post e video di YouTube, ho scoperto che ognuno di noi è R.javascomparso per diversi motivi.

Ecco come ho risolto questo problema in Eclipse:

  • Crea R.java nella gencartella manualmente e salva.
  • Dopodiché vai su Progetto e fai clic su "Pulisci"

Verrà visualizzato il seguente messaggio e il file verrà automaticamente riscritto:

R.java è stato modificato manualmente! Ripristino alla versione generata!


1
Anup .. L'ho fatto /// Ma solo per essere rimosso quando l'ho pulito ... Il problema è ancora irrisolto per me!
ejjyrex,

3

Per me, avevo collegato v7 appcompat due volte. Ad ogni modo, in Eclipse, fai clic con il pulsante destro del mouse sul nome del progetto in Esplora pacchetti o Navigatore, vai su Proprietà, Android e deseleziona tutti i duplicati nella sezione Libreria. Potrebbe essere necessario creare -> Pulisci in seguito.


2

Ovviamente non c'è una risposta definitiva a questo, ma eccone un altro che non vedo già qui:

Ho avuto R.javascompaiono dopo (tentativo) una sincronizzazione della squadra, e c'erano file di risoluzione dei conflitti nel progetto (cioè thingy.xml.mine, thingy.xml.r35e così via). Eliminandoli / risolvendo i conflitti rigenerati R.


2

Ho avuto questo problema Per sbaglio ho cancellato questo

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

che ha iniziato a causare errori di compilazione in tutto il progetto nei miei file XML e nei miei file Java. Non appena ho riscritto ciò che ho eliminato, ha funzionato di nuovo :)


2

OK, quindi è chiaro che ci possono essere molte cause per questo problema. Se utilizzi una macchina Linux a 64 bit e stai configurando ADT per la prima volta, potresti riscontrare questo problema in cui R non si sta generando automaticamente. Controlla la scheda della console e potresti vedere un errore simile a:

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

In questo caso devi installare ia32-libs, usando qualcosa come:

 sudo apt-get install ia32-libs

Vedi qui per i dettagli: adb Android non trovato


2

Ho riscontrato questo problema alcune volte. Ho scoperto che se non ho importato il pacchetto R tramite il nome della mia applicazione, ad esempio, se la mia applicazione aveva il nome del pacchetto example.test, ho scoperto che dovevo importare example.test.R per accedere a uno dei risorse.

Se questo non è stato importato, le risorse che dovevano essere restituite erano le risorse predefinite senza nessuna delle mie incluse.

Detto questo, se trovi che stai ricevendo solo un elenco di risorse predefinite, verifica che stai importando application_package_name.R e non android.R.


2

Il mio problema era che appcompatnon si trovava nella stessa directory del mio progetto.

L'ho scoperto durante la compilazione della mia app con Ant .


1

Assicurarsi inoltre di disporre dell'ultima versione del plug-in ADT e aprire il gestore SDK Android per aggiornare tutti gli strumenti SDK all'ultima versione. Controlla anche gli aggiornamenti in Eclipse stesso. Le versioni non corrispondenti mi hanno causato il problema.


1

Il mio problema era all'interno di un file di menu. Il compilatore non sembra avvisarti se le stringhe che non esistono all'interno strings.xmlsono referenziate nei file di menu. Controlla se itemi tuoi file XML nel tuo menu fanno riferimento a stringhe che non esistono nel tuo file strings.xml. Di solito in android:title.


1

Per me, questo errore è stato causato quando ho provato a duplicare un esistente res/menuinvece di crearne uno con wizard.


1

Tutte queste risposte non potrebbero funzionare se usi Maven. La soluzione per me era aggiungere

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

nella sezione di configurazione di android-maven-plugin.


1

Ho trovato una soluzione per cui R.class non è stato creato da Eclipse dopo averlo rifatto: 2 clean, build, ecc.

Il problema è qui in strings.xml:

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

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

Questi sono creati per impostazione predefinita da Eclipse durante la creazione di progetti.

Sicuramente stai cambiando strings.xml per le tue esigenze. A volte cancelli string.xmls queste due righe dal tuo codice:

Si sta verificando un problema nel file AndroidManifest.xml:

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

Quindi non può comunicare con strings.xml.


1

Ho cambiato il nome del mio file XML di layout e ho scoperto in seguito che il file XML (provider di widget in questo caso) si riferisce ancora al vecchio XML di layout che non esiste e che ha impedito la generazione / correzione automatica della classe R.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.