2010-05-13 10 views
5

He desarrollado algún componente de Android reutilizable que es básicamente una clase. Esta clase tiene algunas dependencias de recursos, p. algunos png drawables, algunos diseños xml, etc. Así que esta clase hace referencia al archivo R autogenerado. Me gustaría distribuir este código en un único paquete como el archivo jar a otros desarrolladores para usar en sus aplicaciones.¿Cómo distribuir el código reutilizable de Android en un paquete?

He leído que la única solución posible es distribuir código junto con todos mis recursos, que otros tienen que copiar a su carpeta "res" (source).

Así que creé un archivo jar con el archivo de clase (digamos MyClass que está en el paquete com.xyz.android.app) y los recursos y traté de usar esto en mi nueva aplicación.

Así que agregué el archivo jar a la ruta de compilación de mis nuevas aplicaciones usando la opción add external jars en eclipse y copié todos los recursos a la carpeta res de mi nueva aplicación. (La clase de actividad dice MainActivity de mi nueva aplicación está en el paquete com.abc.myapplication, solo para el caso si puede ser útil)

Pero cuando ejecuto esta nueva aplicación hay java.lang.ClassCastException en la clase MyClass. Traté de depurar la aplicación y luego encontré que en la clase MyClass, hay un problema de "R no se puede resolver".

Luego cambié el paquete de MainActivity a com.xyz.android.app (que no es la manera, otros desarrolladores estarán felices de hacerlo), pero nuevamente el mismo problema.

Pero cuando solo copio el archivo Java fuente de modo que tanto MainActivity.java como MyClass.java están en el paquete com.xyz.android.app, la aplicación funciona bien.

Entonces, si tengo que distribuir de manera tal que otros usuarios no necesiten molestar este paquete nombrando cosas, ¿cómo puedo lograr esto? Por favor ayuda !!

Editar

En android.jar, también hay algunos recursos. ¿Cómo se hace referencia en un proyecto? ¿Cómo se usan en las clases de Android? También hay un archivo android.R?

¿No es posible hacer lo mismo, es decir, hacer un archivo jar como android.jar para mi código reutilizable?

Respuesta

3

Como señaló Nic Strong, no hay mucho en el proyecto para gestionar esto, y las indicaciones actuales son que los próximos cambios en las herramientas del SDK pueden ayudar solo un poco.

Estoy organizando some other tools para ayudar a resolver este problema. Espero tener la documentación del desarrollador publicada en unos días.

+0

Suena prometedor. ¡Lo revisaré! –

+0

En android.jar, también hay algunos recursos. ¿Cómo se hace referencia en un proyecto? ¿Cómo se usan en las clases de Android? También hay un archivo android.R? – Vasu

+0

El "archivo android.R" está integrado en el sistema operativo. No necesita distribuirlo, y los valores numéricos no cambiarán. Entonces, eso es seguro de usar sin ningún trabajo adicional. – CommonsWare

3

Esto no es tan fácil de hacer en este momento. El problema es que el proyecto que utiliza su jar no sabe buscar drawables, etc. La buena noticia es que pronto debería ser posible (con suerte con el SDK 2.2 que se rumorea que se lanzará en IO la próxima semana). Ver esta publicación en el blog http://mobilebytes.wordpress.com/2010/04/27/android-tools-version6-coming/

+1

Citando a Google sobre este tema: "Sí, los proyectos de bibliotecas son principalmente para usted como desarrollador para compartir su propio código en sus aplicaciones. No se trata de redistribuir los componentes reutilizables, a menos que esté bien con el envío (o publicar en algún lugar) un archivo zip de su biblioteca con fuente completa. " – CommonsWare

+0

Ya asumí que el nuevo proyecto no sabe buscar recursos en el contenedor. Así que ya he copiado los recursos en el nuevo proyecto (como en http://stackoverflow.com/questions/1995004/packaging-android-resource-files-within-a-distributable-jar-file/2825174#2825174). ahora quiero que mi nuevo proyecto funcione. Entonces, ¿quiero saber si es posible? y si es así ¿cómo? – Vasu

1

He estado jugando con la clase ParcelHelper de Mark Murphy al http://github.com/commonsguy/cwac-parcel. En pocas palabras, es una colección de métodos que le permiten acceder a los componentes de 'R' por su nombre sin necesidad de importar 'R' en su código.

Si entiendo correctamente su pregunta, esto es exactamente lo que quiere.Es posible que aún necesite copiar algunos recursos, como styleables, en su proyecto.

+0

Gracias por su respuesta. al menos, hasta que Google no proporcione ninguna solución a esto, lo que necesito es una forma de distribuir el código. – Vasu

Cuestiones relacionadas