Proyecto de biblioteca android: R.id no se puede resolver o no es un campo

El proyecto de biblioteca se ve bien, pero tan pronto como lo importo a mi proyecto principal, me muestra errores en cada línea que hace referencia a un recurso:

Id no se puede resolver o no es un campo

El proyecto principal no muestra errores.

Por qué me pregunto dónde android sabe dónde importar los recursos de eg en líneas como esa:

RelativeLayout menuLayout = (RelativeLayout) this.findViewById(R.id.menu_layout); 

Pero esto tampoco funciona:

 RelativeLayout menuLayout = (RelativeLayout) this.findViewById(net.bla.library.R.id.menu_layout); 

¿Algunas ideas?

EDIT: lo que descubrí es:

Tan pronto como incluyo el proyecto de biblioteca, Eclipse duplica el gen / net.mylibrary.R de la biblioteca en la aplicación principal (por lo que hay dos paquetes en la carpeta gen ahora: el de la aplicación y el copiado de la aplicación biblioteca). Cosa extraña es: R.id no se encuentra en la copia. Hay algunas otras diferencias también, como la copia utiliza un "final" adicional para sus definiciones.

Realmente no tengo ni idea de por qué esto podría suceder. ¿Alguien?

Eclipse a veces le gusta importar android.R, y esto provoca errores similares a los que está experimentando.

Busque la importación en la parte superior del archivo y retírela.

Como se indica en " Uso de Eclipse | Android Open Source ":

Nota: A veces, a Eclipse le gusta agregar una sentencia android.R de importación en la parte superior de los archivos que utilizan recursos, especialmente cuando solicita que eclipse ordene o administre importaciones. Esto hará que tu marca se rompa. Busque estas declaraciones de importación erróneas y elimínelas.

Tuve un problema similar y me las arreglé para resolverlo. Esto es lo que hice: Cuando llamo a la actividad principal de mi proyecto de biblioteca, el método onCreate de la actividad llama a método setContentView y usa R.layout.main como parámetro.

 getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.main); Button btn = (Button) findViewById(R.id.main_button1); btn.setOnClickListener(this); 

FindViewById devuelto null. Parece que main.xml del proyecto de la biblioteca está siendo anulado por main.xml del proyecto principal. Así que simplemente creé una nueva distribución xml main_libname.xml con el mismo contenido que main.xml de la biblioteca y usé esta distribución como un parámetro para setContentView. ¡Funcionó!

Compruebe si los recursos están dentro de la carpeta res. Todos los recursos deben estar dentro.

  • 0 Proyecto
    • 0,1 src
    • 0,2 res
      • 0.2.1 diseño
        • 0.2.1.1 main.xml
        • 0.2.1.2 menu_layout.xml
      • 0.2.2 tirantes …..

Tal vez usted está poniendo los datos en la carpeta del proyecto.

También estaba teniendo el "no puede encontrar variable de símbolo …" error en un artículo R.id definido en un proyecto de biblioteca. Notablemente, solamente los símbolos de R.id no eran solubles en el proyecto principal aunque los otros campos de R (por ejemplo, R.layout) fueran claramente visibles.

Afortunadamente, pude tropezar con una solución. Resultó que en mi caso, tenía un recurso (un archivo de diseño) definido en mi proyecto principal que tenía exactamente el mismo nombre que en el proyecto de la biblioteca.

Esto era lo que parecía sistema de archivos:

 top_level_project main_android_proj src main res layout activity_main.xml android_library_subproject src main res layout activity_main.xml 

El activity_main.xml de mi subproyecto tenía un id así:

 <RelativeLayout....> <TextView android:id="@+id/special_text" ... /> </RelativeLayout> 

Y así intento hacer referencia al id en el código java de mi proyecto principal:

 MainActivity.java: public void onCreate() { setContentView(R.layout.activity_main); TextView tv = (TextView) findViewById(R.id.special_text); tv.setText("Hello Android"); } 

Para corregir este problema, cambié el nombre del archivo ofensivo de mi proyecto principal por otro.

Parece que no puedes tener duplicados nombres de diseño en tus recursos. De hecho, los documentos sdk señalan que debe tener cuidado con los conflictos de nombre de recursos al utilizar proyectos de biblioteca:

  • Conflictos de recursos

Dado que las herramientas combinan los recursos de un proyecto de biblioteca con los de un proyecto de aplicación dependiente, se podría definir un ID de recurso en ambos proyectos. En este caso, las herramientas seleccionan el recurso de la aplicación o la biblioteca con mayor prioridad y descartan el otro recurso. A medida que desarrolla sus aplicaciones, tenga en cuenta que es probable que los identificadores de recursos comunes se definan en más de un proyecto y se fusionarán, con el recurso de la aplicación o de la biblioteca de mayor prioridad que tenga prioridad.

  • Configuración de dependencias de Android
  • ¿Cuáles son las dependencias de Google Maps v2?
  • Error de dependencia de CheckBoxPreference no encontrado
  • No se pudo ejecutar dex y Conversión al formato Dalvik.
  • Servicio externo de Android desde una biblioteca (AAR, no Shared Service)
  • ¿Cómo hacer una aplicación de Android que depende de otra aplicación?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.