2011-09-12 15 views
5

He creado una aplicación de biblioteca de Android simple con solo 1 actividad que contiene un TextView. Funciona bien, pero cuando lo marco como biblioteca y hago referencia en otra aplicación, está dando errores cuando intento obtener la vista de texto usando findViewById (R.id.welcome_textview).R.java no se genera correctamente para Android Library Application

Se generó R.java, pero en la segunda aplicación donde hago referencia a la biblioteca, no contiene el campo de identificación. Aquí están los archivos tanto R.java que están siendo generados: -

Aplicación Biblioteca

/* 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; 
    } 
} 

mismo archivo en la otra aplicación

/* 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; 
    } 
} 

dónde voy mal?

+0

en el segundo proyecto no ha declarado 'welcome_textview' en el archivo xml –

+0

ese es el punto que no debería tener que declararlo de nuevo ... Estoy tratando de hacer algo como esto https://github.com/donnfelker/FullAndLiteVersionSharedLibrary – mvrck

Respuesta

8

Después de horas de probar muchas cosas, finalmente encontré el problema. En el proyecto al que se hace referencia, había una carpeta de diseño que se creó automáticamente, que estaba vacía. Eliminar esa carpeta solucionó el problema. Espero que esto ayude a alguien.

+1

Esto me dio una pista de error similar en el mío ............ – viv

+0

Yo también .......... – Kaifei

+2

Mi situación era un poco diferente, pero esto me señaló en el dirección correcta. Para mí, el proyecto de referencia tenía un archivo en su directorio de diseño con el mismo nombre que uno en la biblioteca a la que se hace referencia. Extrañamente, esto tuvo el efecto de causar que algunos, pero no todos, los ID de la biblioteca referenciada no estuvieran disponibles. La eliminación del archivo y la reconstrucción corrigieron el problema. –

1

Primero asegúrese de que su paquete de Aplicación sea diferente del paquete de la Biblioteca de Android, porque de su ejemplo son idénticos: com.example.mylibrary.

Una cosa más a tener en cuenta es que tanto el archivo R.java de la aplicación como los archivos de la biblioteca Android R.java son idénticos cuando la biblioteca se compila en el contexto de la aplicación. En otras palabras, cuando compila la aplicación, todas las bibliotecas a las que se hace referencia se compilan como si fuesen aplicaciones incluidas físicamente. La única diferencia es que el código de la biblioteca tiene un nombre de paquete diferente para su clase R.java.

+0

Tks para la respuesta. Los paquetes de aplicaciones son realmente diferentes: com.example.mylibrary y com.example.myapplication. Después de agregar la biblioteca de aplicaciones, creó un pkg - com.example.mylibrary dentro de gen y generó el archivo R.java allí. – mvrck

+0

Sí, es un comportamiento esperado. Debería haber generado dos archivos idénticos como la unión de los recursos de la aplicación y los recursos de la biblioteca. – inazaruk

+0

Exactamente .... el problema era algo más ... tks por la respuesta :) – mvrck

0

También tuve el problema de que el archivo R no se había generado correctamente. En mi caso, el problema habían sido los archivos "icon.png" ubicados en las carpetas dibujables del proyecto de la biblioteca. Después de eliminar todas las carpetas dibujables todo compilado.

+0

¿sabes por qué tener los archivos icon.png causó un problema? – bcorso

7

Y una causa más posible basada en mi propia experiencia dolorosa: tener archivos de diseño XML con el mismo nombre en la biblioteca res/layout y las carpetas de aplicaciones res/diseño.

+0

Guau, estaba probando todas las opciones y finalmente después de buscar 1 día obtuve su solución y está trabajando ahora ... Muchas gracias y que Dios lo bendiga ... – BakaitBaba

0

Así que también agregué en la referencia de Eclipse a mi propio Proyecto de Biblioteca, y después de esto, R.java en el proyecto principal dejó de generar, por lo que llegaron errores (los podía ver en la pestaña Consola).

eran como esto:

[01/13/2013 00:39:18 - AppName] [Path] \ res \ valores-v11 \ styles.xml: 7: Error: Error de recuperación padre para el elemento: no se encontró ningún recurso que coincida con el nombre de pila 'android: Theme.Holo.Light'.

En mi caso fue suficiente para eliminar en carpetas de proyecto Biblioteca como

  • "res/valores-v11"
  • "res/valores-v14"

especialmente, que my Library Project no los usó, y todo volvió a la normalidad: inmediatamente en el proyecto principal R.Java se autogeneró automáticamente para com.example.app y com.example.lib, por lo que hubo 2 R.java y no se molestaron entre sí.

1

Troubleshoot#1

Por error me escribió

compile project(':myLibProject') 

en mi solicitud build.gradle archivo.

Mientras que el código es correcto,

compile project(':library:myLibProject') 

debido a que el proyecto de la biblioteca myLibProject está dentro biblioteca directorio.

Sin embargo, a causa de un código incorrecto, un directorio vacío ha sido creado en la carpeta raíz de mi aplicación denominada myLibProject (carpeta vacía)

Por favor, compruebe si dicha carpeta vacía en el directorio de la aplicación manualmente (mediante navegación por carpetas software de su sistema operativo, no de Android Studio).

Troubleshoot#2

si utiliza envoltorio Gradle en su archivo build.gradle nivel de proyectos, como este

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

tratar de comentar a cabo.

Troubleshoot#3

comente la línea errónea para la cual la compilación está fallando.

Ahora haga una compilación exitosa.

descompóngase en la línea.

intenta compilar de nuevo.

Finally

después de cualquier solución de problemas, siga estos pasos.

  1. proyecto de limpieza (Build -> Proyecto Limpio)
  2. Reconstruir proyecto (Build -> Reconstruir Proyecto)
  3. Invalidate cachés y Reiniciar (Archivo -> Invalidar cachés y Reiniciar)
2

Parece que tener el mismo estilo definido dos veces puede causar este error.

En el styles.xml, tuve

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

acabo de cambiar el name-AppThemMyLibrary y el archivo de R obtuve generado. No estoy seguro de si realmente fue la causa del problema.existe

+1

Impresionante, me salvó el día – Qasim

3

La razón principal detrás de no formación de archivos R es debido a la representación en XML, el número de dependencias que utilizó en la biblioteca que gran número de R Archivo en su construcción, así

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

si no se hacen resolverlo generaría automáticamente Todos los archivos R.

0

Si su biblioteca de Android no puede resolver la clase R, esto significa que quizás en algún lugar dentro de los archivos XML de su biblioteca tenga algunas duplicaciones con el módulo principal de la aplicación. Podrían ser nombres de colores, nombres de cadenas, nombres de estilos, nombres de diseños, etc. Simplemente revise todos los archivos y carpetas de recursos de la biblioteca xml y asegúrese de que no haya nada con el mismo nombre que el módulo de la aplicación principal. Después de eso, tal vez el proyecto necesitará uno limpio y todo debería estar bien con la importación de R.

Nota: Verifique también el archivo de Manifiesto de la biblioteca.