42 votos

cómo hacer referencia a un activo en un proyecto de biblioteca

En una clase perteneciente a una Biblioteca de proyecto que yo llamo:

webview.loadUrl("file:///android_asset/info.html", null);

Por desgracia, esto sólo funciona si me duplicar el archivo info.html en la Aplicación del proyecto de los activos de la carpeta también.

Hay una manera de decirle a un Androide el código de biblioteca: "busque este archivo en la biblioteca de activos de la carpeta, no en la aplicación de la carpeta de activos" ?

70voto

kabuko Puntos 23166

Desde el Android de google Docs:

Proyectos de la biblioteca no puede incluir las primas de los activos

Las herramientas no admiten el uso de materias primas de archivos de activos (que se guarda en los activos/ directorio) en un proyecto de biblioteca. Cualquier activo de los recursos utilizados por una aplicación debe ser almacenado en los activos/ directorio de la aplicación del proyecto en sí. Sin embargo, los recursos de los archivos guardados en la res/ directorio son compatibles.

Si desea incluir los archivos de un proyecto de Biblioteca, deberá ponerlo en los recursos, en lugar de los activos. Si usted está tratando de cargar los archivos HTML de su proyecto de biblioteca en una WebView, esto significa que usted tendrá que ir más rotonda método de la costumbre de los activos de la URL. En su lugar tendrá que leer los datos de recursos y usar algo como loadData.

10voto

Daniel Grant Puntos 81

Bien. He estado estresando y perder horas de sueño acerca de esto por un tiempo. Soy el tipo de persona que ama a la API de creación, y ODIA complicado de integración.

Allí no muchas soluciones alrededor en el internet, así que estoy muy orgulloso de lo que He descubierto con un poco de Eclipse Trucos.

Resulta que cuando se pone un archivo en el Android Lib /carpeta de recursos. El objetivo de apk de captura de este y colocarlo en la raíz de la APK archivo. Por lo tanto, haciendo que el acceso general a fallar. Esto puede ser resuelto mediante la creación de un Raw de la Biblioteca de Java, y la colocación de todos los activos de allí, es decir, (JAVALIB)/assets/fileX.txt.

Usted puede, a su vez, a continuación, incluir esto como un Java Build Path de la Carpeta de Origen en Proyecto > Propiedades > Java Build Path > Fuente > Enlace De La Fuente.

  1. Link De La Fuente
  2. Haga clic en Variables. y Añadir una Nueva Variable, es decir, VAR_NAME_X. ubicación : ../../(relative_path_to_assets_project)
  3. Haga Clic En Aceptar

Ahora, al crear y ejecutar tu aplicación, la carpeta de recursos de la APK se contienen la (Biblioteca MUNDIAL) archivos como usted pretende.

No hay necesidad de volver a configurar android interna o nada. Su capacidad dentro de un par de clics de Eclipse.

9voto

Yuichi Kikuchi Puntos 91

Usted puede lograr esto mediante la creación de un enlace simbólico en el proyecto de la carpeta de recursos que apunta al directorio en el proyecto de biblioteca.

Entonces usted puede acceder de la siguiente manera:

webview.loadUrl("file:///android_asset/folder_in_a_libary_project/info.html", null);

6voto

Graham Borland Puntos 27556

Esto es ahora posible con el uso de la Gradle sistema de construcción.

Pruebas con Android Studio 0.5.0 y v0.9 de Android plugin de Gradle, he encontrado que los archivos tales como

MyLibProject/src/main/assets/test.html

estén correctamente empaquetados en la final de la aplicación y se puede acceder en tiempo de ejecución a través de la espera URL:

file:///android_asset/test.html

4voto

mbarton888 Puntos 41

Puedo confirmar que Daniel Grant enfoque funciona para, al menos, la siguiente situación: proyecto de destino NO tiene una carpeta de recursos (o la carpeta está vacía, así que usted puede eliminar de forma segura). Yo no la instalación de cualquier variable. Simplemente la instalación de un LinkSource de la siguiente manera (solo un ejemplo) Vinculado ubicación de la carpeta: /home/mateo/workspace_moonblink/assetsForAdvocacy/activos Nombre de carpeta : activos

El "assetsForAdvocacy" es un proyecto de Java, (creado con el Nuevo - Proyecto - Proyecto de Java) con vacío carpeta src, y una nueva carpeta denominada "activos", que ahora proporciona toda la carpeta de recursos para el proyecto de destino.

Esta es una forma bastante sencilla dentro de Eclipse para proporcionar los bienes re-uso a través de diferentes proyectos SI es que ya no tienen activos, lo suficientemente bueno para salir con. Quizás me gustaría que mejorar para convertirse en un proveedor de contenido en el largo plazo, pero que es mucho más desarrollo.

Mi proyecto de los accesos de los activos con el siguiente código: Cadena de advocacyFolderInAssets = "no_smoking/"; //una carpeta debajo de activos/ Cadena fn =advocacyFolderInAssets+imageFilename; Mapa de bits pristineBitmapForAdvocacy = getBitmapFromAsset(contexto, fn);

Yo uso Motodev Studio 3.1.0 en Ubuntu. No me deja "fusionar" una nueva carpeta de recursos en los nuevos activos del proyecto sólo en una de los activos existentes de la carpeta en el proyecto de destino.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X