una trabajo tesis publica programa preescolar plan necesidades medidas lectura escolar comite biblioteca arquitectura arquitectonico actividades android library-project

android - trabajo - programa de necesidades de una biblioteca publica



Uso de actividades de proyectos de la biblioteca (5)

Porque:

Problema 9656: los proyectos de biblioteca no admiten atributos XML personalizados para clases personalizadas

Solución:

Actualice a la última versión de SDK y ADT (la corrección se lanzó desde r17) y use http://schemas.android.com/apk/res-auto como URI del espacio de nombres de los atributos personalizados, consulte Revisiones para ADT 17.0.0 :

Se agregó soporte para vistas personalizadas con atributos personalizados en bibliotecas. Los diseños que usan atributos personalizados deben usar el URI del espacio de nombres http://schemas.android.com/apk/res-auto lugar del URI que incluye el nombre del paquete de la aplicación. Esta URI se reemplaza con la aplicación específica en el momento de la compilación.

Tema relacionado:

Ayuda con una vista personalizada de atributos dentro de un proyecto de biblioteca de Android

Tengo un proyecto de Library configurado y un proyecto que depende de este proyecto de biblioteca. Todo se compila bien y, sin embargo, el Proyecto Dependent ejecutando bien.

Sin embargo, tengo un problema intermitente al utilizar un proyecto de Activity from the Library .

El proyecto de Mi Library se puede "desmarcar" como un proyecto de biblioteca y la Actividad del "selector" se puede ejecutar de forma aislada. Ejecutar el proyecto de la Library por derecho propio funciona bien sin problemas.

Cuando uso el proyecto de la Library (y la Actividad del "selector") del proyecto dependiente, me da errores NullPointerExceptions (o DexOp históricamente) que dicen que la Actividad del "selector" no puede encontrar sus recursos.

¿Alguien puede decirme si ha experimentado esto antes?

EDITAR

Copiar manualmente el layout.xml utilizado por la actividad de proyecto de la Library en el proyecto dependiente hace que el proyecto abra la Actividad del "selector" correctamente. ¿Se requiere esto? ¿Seguramente no? Esto me hace preguntarme si hay un problema con la fusión / referencia de los ID de enteros de R.java en el proyecto de la Library .

EDITAR

No estoy seguro de si esto tiene alguna importancia, pero uno de mis proyectos de la Library es una envoltura alrededor de un conjunto de vistas personalizadas utilizadas en diferentes proyectos de front-end.

Estas vistas personalizadas tienen cada una una actividad para que se puedan probar de forma aislada.

Una de estas vistas tiene atributos personalizados, que mientras se ejecutan de forma aislada funcionan muy bien. Sin embargo, no parece que el proyecto dependiente extraiga correctamente los atributos y los mantenga en su espacio de nombres original, lo que hace que los diseños importados generen errores de compilación:

[2012-05-16 12:07:28 - Project] D:/opt/workspace/CustomGlowList/res/layout/main.xml:14: error: No resource identifier found for attribute ''listId'' in package ''com.company.library.glowlist'' [2012-05-16 12:07:28 - Project] D:/opt/workspace/CustomGlowList/res/layout/main.xml:14: error: No resource identifier found for attribute ''type'' in package ''com.company.library.glowlist

EDITAR

Los errores de DexOp se resolvieron eliminando un nombre de archivo duplicado que estaba presente en el proyecto Dependent . No estoy seguro si el nombre del archivo fue el problema o el contenido del archivo.

EDITAR

Todavía no he podido encontrar una solución a este problema (aunque la respuesta de @ yorkw ciertamente ayuda con los atributos xml! Gracias).

Sin embargo, he logrado hacer este problema intermitente:

He com.company.library.component1 cada uno de los proyectos de la biblioteca y me com.company.library.component1 que todos tuvieran su propio espacio de nombres (es decir, com.company.library.component1 , com.company.library.component2 , etc.). Después de un par de limpios (cada proyecto ordenado con la precedencia correcta), este problema se resuelve solo, pero eventualmente regresa cuando se cambia la biblioteca / no una biblioteca para probar los componentes.


El problema estaba siendo causado por los archivos R de cada uno de los proyectos de la Library que no estaban siendo construidos y referenciados correctamente. Los archivos de recursos se crean y hacen referencia directamente desde el proyecto de llamada.

Cada una de las Libraries debe tener un paquete único como se define en el AndroidManifest.xml . Esto lleva a que cada uno de sus recursos se compile en ese espacio de nombres único dentro del proyecto de llamada junto con el contenedor de la Library que contiene los archivos de class .

El problema se vuelve intermitente cuando se cambia entre una biblioteca y un proyecto ejecutable porque es necesario realizar una clean and build para regenerar estos archivos, ya que no se realiza de forma automática al desactivar la casilla de verificación Use as library , donde el jar (y las clases de java) no se requiere tanta persuasión para que sean referenciados correctamente, ya que los proyectos de la biblioteca los hacen referencia cuando actúan como una Library .

Esto puede llevar a errores intermitentes y también variables, incluidas las referencias faltantes, DexOp y NullPointerException , según la medida en que los archivos R.java se hayan mutilado o construido parcialmente y qué conflictos se están produciendo entre los paquetes.


No estoy seguro de cómo usa la biblioteca de Android, pero he hecho esto muchas veces sin ningún problema, así que lea las siguientes cosas relacionadas con el uso de las bibliotecas de Android:

  1. para que un proyecto de Android use un proyecto de biblioteca de Android, puede editar "project.properties" y agregar la ruta al proyecto de biblioteca allí o, mucho más fácil, hacer clic derecho en el proyecto (que usa el proyecto de biblioteca), Elija la categoría "android", y elija "agregar" y elija el proyecto de la biblioteca.

  2. para hacer que el proyecto de Android siempre abra el proyecto de la biblioteca de Android, también elija "ruta de compilación de java" -> "proyectos" y elija el proyecto de la biblioteca.

  3. en "project.properties", intente establecer el objetivo en el mismo objetivo para ambos proyectos, y el más reciente que tenga (el último ahora es 15), incluso si no puede probar la aplicación en esta versión de Android.

  4. Los archivos de origen y todos los archivos de recursos (en la carpeta res) se pueden usar en los proyectos de la biblioteca.

  5. Las carpetas de activos no se pueden utilizar dentro del proyecto de la biblioteca. solo en el proyecto de Android que realmente se ejecuta, se puede usar la carpeta de activos. Lo mismo pasa con el archivo de proguard.

  6. El manifiesto de los proyectos de la biblioteca casi no necesita tener casi nada. Consulte esta publicación para obtener más información: https://.com/a/10445630/878126 . Si hay actividades en el proyecto de la biblioteca a las que desea poder acceder a través del proyecto que lo utiliza, no olvide incluirlas en el manifiesto del proyecto de Android (no es necesario escribirlas en el manifiesto de la biblioteca de Android). ).

  7. recuerde ejecutar la pelusa antes de exportar la aplicación. le proporciona muchas advertencias, pero la advertencia más importante es cuando utiliza funciones demasiado nuevas que no pueden ejecutarse en el rango de API que busca. Esto es importante para las bibliotecas, ya que es fácil perderse si hay varias fuentes.

  8. Si desea ampliar las actividades en la biblioteca de Android, necesita algún tipo de método para alternar entre ellas. La única forma que conozco es extender la aplicación y dejar que sea el administrador de cómo crear una intención para cada una de las actividades. Creo que puedes hacer otros trucos, pero probablemente todos sean similares a este.

  9. si tiene el mismo recurso (cualquier recurso en la carpeta "res") tanto en la biblioteca de Android como en el proyecto de Android, el del proyecto de Android reemplazará al otro. Tiene sus ventajas y desventajas . recuerde que no puede tener diferentes extensiones de archivo para el mismo recurso.


Tengo el mismo problema, tengo un proyecto de biblioteca y tiene alguna actividad. Cuando estaba llamando a la actividad del proyecto de la biblioteca desde mi proyecto principal, los recursos de los archivos de diseño no se cargaban correctamente para la actividad del proyecto de biblioteca y daban "excepción de puntero nulo" o "no se pudo cargar la clase", etc.

Solución: Me he dado cuenta de que el mismo nombre de archivo de diseño se está utilizando en el proyecto Biblioteca y en el Proyecto principal. Acabo de renombrar esa actividad y está resuelta.

Puede ser que esto te ayude.


Tuve un problema similar al hacer referencia al proyecto de la Biblioteca dentro del proyecto de la aplicación de Android. Eliminé el archivo R.java del proyecto de la Biblioteca para que se generara de nuevo y la aplicación recogió el archivo generado. Debería ver el archivo R.java generado en su aplicación proyecto-> gen-> library_namespace_R.java.