2012-05-03 10 views
13

Tengo un proyecto de Android que intento convertir en una biblioteca. Me aparece un excepción lanzada en este código:Biblioteca de Android que no extrae sus recursos a través de otros proyectos

_buttonStart = (Button) findViewById(R.id.buttonStart); 

La excepción que recibo es:

java.lang.NoSuchFieldError: com.xxx.libraryname.R$id.buttonStart 

Los documentos Android parecen decir explícitamente que la biblioteca debe ser capaz de acceder a esos recursos:

"Por ejemplo, el código fuente en el proyecto de la biblioteca puede acceder a sus propios recursos a través de su clase R".

Cuando miro en la biblioteca /gen/com.xxx.libraryname/R.java/R/id/, buttonStart está allí. Pero cuando miro en el proyecto principal /gen/com.xxx.libraryname/R.java/R/id, no lo es.

He hecho una limpieza.

+9

Lo descubrí. Ambos proyectos tenían un archivo "main.xml". Se renombró el archivo main.xml de la biblioteca y las cosas funcionaron. –

+5

Sí, si tiene recursos con el mismo nombre, el proyecto de host gana. Lo mejor es dar a las bibliotecas nombres de recursos únicos, tal vez mediante una notación de prefijo, para que no haya colisiones accidentales. Todavía puede haber colisiones * intencionales *, donde el host está tratando específicamente de reemplazar el recurso, en cuyo caso el host debe hacerlo de forma que la biblioteca acepte (por ejemplo, mantener los mismos widgets con los mismos ID para los diseños) – CommonsWare

+1

@DanJameson ¿También puede agregar la solución en la sección de respuestas? – Anirudh

Respuesta

4

Su proyecto de biblioteca también tiene el mismo diseño de nombre main.xml que su proyecto principal.

Android dará prioridad a la sede del proyecto, si ambos tienen el mismo nombre de la presentación, en este caso "main.xml" mejor enfoque consiste en utilizar una notación de prefijo para que no haya colisiones accidentales.

+0

Greate Answer !!! –

Cuestiones relacionadas