2011-09-12 11 views
5

Ho creato una semplice applicazione Libreria Android con solo 1 attività contenente un TextView. Funziona bene, ma quando lo contrassegno come libreria e riferimento in un'altra applicazione, genera errori quando sto cercando di ottenere la vista del testo usando findViewById (R.id.welcome_textview).R.java non viene generato correttamente per l'applicazione Libreria Android

Ha generato R.java, ma nella seconda app in cui faccio riferimento alla libreria, non contiene il campo id. Qui ci sono le file sia R.java che sono sempre generati: -

Biblioteca Applicazione

/* AUTO-GENERATED FILE. DO NOT MODIFY. 
* 
* This class was automatically generated by the 
* aapt tool from the resource data it found. It 
* should not be modified by hand. 
*/ 

package com.example.mylibrary; 

public final class R { 
    public static final class attr { 
    } 
    public static final class drawable { 
     public static final int icon=0x7f020000; 
    } 
    public static final class id { 
     public static final int welcome_textview=0x7f050000; 
    } 
    public static final class layout { 
     public static final int main=0x7f030000; 
    } 
    public static final class string { 
     public static final int app_name=0x7f040001; 
     public static final int hello=0x7f040000; 
    } 
} 

Stesso file nell'altra applicazione

/* AUTO-GENERATED FILE. DO NOT MODIFY. 
* 
* This class was automatically generated by the 
* aapt tool from the resource data it found. It 
* should not be modified by hand. 
*/ 

package com.example.mylibrary; 

public final class R { 
    public static final class attr { 
    } 
    public static final class drawable { 
     public static final int icon=0x7f020000; 
    } 
    public static final class layout { 
     public static final int main=0x7f030000; 
    } 
    public static final class string { 
     public static final int app_name=0x7f040001; 
     public static final int hello=0x7f040000; 
    } 
} 

Dove sto andando male?

+0

nel secondo progetto non hai dichiarato 'welcome_textview' nel file xml –

+0

questo è il punto che non avrei dovuto dichiararlo di nuovo ... Sto provando a fare qualcosa di simile a questo https://github.com/donnfelker/FullAndLiteVersionSharedLibrary – mvrck

risposta

8

Dopo ore di tentativi, ho finalmente trovato il problema. Nel progetto di riferimento, c'era la cartella Layout creata automaticamente che era vuota. L'eliminazione di quella cartella ha risolto il problema. Spero che questo aiuti qualcuno.

+1

Questo mi ha dato un suggerimento per errore analogo nel mio ............ – viv

+0

Anch'io .......... – Kaifei

+2

La mia situazione era leggermente diversa, ma questo mi ha indicato giusta direzione. Per me, il progetto di riferimento aveva un file nella sua directory di layout con lo stesso nome di uno nella libreria di riferimento. Stranamente, questo ha avuto l'effetto di causare alcuni, ma non tutti, gli ID nella libreria di riferimento per non essere disponibili. La rimozione del file e la ricostruzione hanno risolto il problema. –

1

Prima assicurati che il pacchetto dell'applicazione sia diverso dal pacchetto della libreria Android, perché dal tuo esempio sono identici: com.example.mylibrary.

Un'altra cosa da tenere presente è che entrambi i file R.java della libreria Android e della libreria Android sono identici quando la libreria viene compilata nel contesto dell'applicazione. In altre parole, quando si compila l'applicazione, tutte le librerie di riferimento vengono compilate come se fossero incluse fisicamente nell'applicazione. L'unica differenza è che il codice della libreria ha un nome di pacchetto diverso per la sua classe R.java.

+0

Tks per la risposta. I pacchetti dell'applicazione sono in realtà diversi: com.example.mylibrary e com.example.myapplication. Dopo aver aggiunto la libreria dell'applicazione, ha creato un file pkg-com.example.mylibrary all'interno di gen e ha generato il file R.java lì. – mvrck

+0

Sì, questo è un comportamento previsto. Dovrebbe aver generato due file identici come unione di risorse applicative e risorse della biblioteca. – inazaruk

+0

Esattamente .... il problema era qualcos'altro ... tks per la risposta però :) – mvrck

0

Ho anche avuto il problema, che il file R non è stato generato correttamente. Nel mio caso il problema erano stati i file "icon.png" che si trovano nelle cartelle disegnabili del progetto della libreria. Dopo aver rimosso tutte le cartelle disegnabili tutto compilato.

+0

sai perché avere i file icon.png ha causato un problema? – bcorso

7

E un'altra causa possibile basata sulla mia esperienza dolorosa: avere file di layout XML con lo stesso nome nel res/layout della libreria e nelle cartelle res/layout dell'app.

+0

Wow, stavo provando ogni opzione e finalmente dopo aver cercato per 1 giorno ho trovato la soluzione e il suo funzionamento adesso. Molte grazie e dio vi benedica .. – BakaitBaba

0

Così ho aggiunto anche il riferimento Eclipse al mio progetto di libreria, e dopo questo, R.java nel progetto principale ha smesso di generare, quindi sono arrivati ​​gli errori (li ho visti nella scheda Console).

erano come questo:

[2013/01/13 00:39:18 - NomeApp] [Percorso] \ res \ valori-v11 \ styles.xml: 7: errore: Errore durante il recupero genitore per articolo: nessuna risorsa trovata che corrisponda al nome indicato 'android: Theme.Holo.Light'.

Nel mio caso è stato sufficiente per eliminare in cartelle Biblioteca progetto come

  • "res/valori-V11"
  • "res/valori-V14"

appositamente, che il mio Progetto Biblioteche non li usava e tutto tornava alla normalità: immediatamente nel progetto principale R.Java si rigenerava automaticamente sia per com.example.app che com.example.lib, quindi c'erano 2 R diversi.java e non si sono disturbati a vicenda.

1

Troubleshoot#1

Erroneamente ho scritto

compile project(':myLibProject') 

nella mia applicazione build.gradle file.

considerando che il codice corretto è,

compile project(':library:myLibProject') 

perché il progetto di libreria myLibProject è dentro libreria directory.

Tuttavia, a causa del codice errato, una directory vuota è stata creata nella cartella principale della mia applicazione denominata myLibProject (cartella vuota)

Si prega di verificare la presenza di tale cartella vuota nella directory dell'applicazione manualmente (utilizzando la navigazione cartella software del tuo sistema operativo, non da Android Studio).

Troubleshoot#2

se si utilizza involucro Gradle nel file build.gradle livello di progetto, come questo

task wrapper(type: Wrapper) { 
    gradleVersion = '2.4' 
} 

cercano di come commento.

Troubleshoot#3

commentare la riga errata per cui la compilazione ha esito negativo.

Ora creare una build di successo.

non commentare la linea.

provare a costruire di nuovo.

Finally

dopo aver risolto il problema, attenersi alla seguente procedura.

  1. progetto Clean (Build -> Clean Project)
  2. Ricostruire progetto (Build -> Rebuild Project)
  3. Invalidate cache e Restart (File -> Invalidate Cache e riavvio)
2

Sembra che avere lo stesso stile definito due volte possa causare questo errore.

Nel styles.xml, ho avuto

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
     <!-- Customize your theme here. --> 
    </style> 

Ho appena cambiato il name-AppThemMyLibrary e il file R ma ho generato. Non sono sicuro se fosse davvero la causa del problema.

+1

Impressionante, Salvato il mio giorno – Qasim

3

Il motivo principale esiste dietro non formazione di file di R è dovuto al fatto di rendere Xml, il numero di dipendenze si è utilizzato in libreria fanno che gran numero di R file in costruzione, così

Open your each xml file and view in preview tab whether it is rendering properly or not

se non risolverlo genererebbe automaticamente tutti i file R.

0

Se la libreria Android non è in grado di risolvere la classe R, ciò significa che forse da qualche parte all'interno dei file XML della libreria si verificano alcune duplicazioni con il modulo dell'app principale. Possono essere nomi di colori, nomi di stringhe, nomi di stili, nomi di layout e così via. Basta controllare tutti i file e le cartelle di risorse della libreria xml e assicurarsi che nulla abbia lo stesso nome del modulo dell'app principale. Dopo di che forse il progetto avrà bisogno di uno pulito e tutto dovrebbe andare bene con importazione R.

Nota: controllare anche il file Manifest della libreria.

Problemi correlati