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
- ¿Cómo hacer lo contrario de atributo de preferencia android: dependencia?
- ¿Cómo hacer lo contrario de atributo de preferencia android: dependencia?
- Error al agregar dependencia en android
- Cualquier restricción Para añadir dependencia en gradle
- Error: no se puede encontrar el método de símbolo getMap () después de la actualización de dependencias
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?
- Eliminar el permiso WAKE_LOCK no deseado fusionado de la biblioteca
- Controles de dependencia estrictos de Android en SDK 17
- Cómo añadir dependencia a Android Studio
- Biblioteca .jar de Android dentro de la biblioteca .jar - Dependencias anidadas
- Android "ya se ha añadido a la salida" error para jar en una dependencia de proyecto
- Especificación de dependencias de proyectos de Android (en Eclipse)
- Dependencia de ListPreference
- No se puede resolver el símbolo: 'HttpClient', incluso después de agregar la dependencia
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 …..
- 0.2.1 diseño
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.
- ¿Cómo agregar una biblioteca compartida a mi APK?
- Calendar.WEEK_OF_MONTH da resultados diferentes en dos dispositivos diferentes