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

En una clase perteneciente a un proyecto de biblioteca , llamo:

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

Lamentablemente, esto solo funciona si duplico el archivo info.html en la carpeta de activos del proyecto de la Aplicación también.

¿Hay alguna manera de decir un código de biblioteca de Android: “busque este archivo en la carpeta de activos de la biblioteca, no en la carpeta de activos de la aplicación”?

De los documentos de Android :

Los proyectos de biblioteca no pueden incluir activos sin procesar

Las herramientas no admiten el uso de archivos de activos brutos (guardados en el directorio assets /) en un proyecto de biblioteca. Todos los recursos de activos utilizados por una aplicación deben almacenarse en el directorio assets / del proyecto de la aplicación. Sin embargo, los archivos de recursos guardados en el directorio res / son compatibles.

Si desea incluir archivos de un proyecto de biblioteca, deberá ponerlos en los recursos en lugar de los activos. Si intenta cargar archivos HTML desde su proyecto de biblioteca en un WebView, esto significa que tendrá que ir a un método más indirecto que el URL del activo habitual. En su lugar, tendrá que leer los datos del recurso y usar algo como loadData .

Esta respuesta no está actualizada , el sistema de comstackción gradle y los archivos AAR admiten activos.

Esto ahora es posible usando el sistema de comstackción Gradle.

Probando con Android Studio 0.5.0 y v0.9 del complemento Android Gradle, he encontrado que los archivos como

 MyLibProject/src/main/assets/test.html 

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

 file:///android_asset/test.html 

Bueno. He estado estresado y perdiendo el sueño sobre esto por un tiempo. Soy el tipo de persona que adora la creación de API y ODIO la integración complicada.

No hay muchas soluciones en Internet, así que estoy bastante orgulloso de lo que he descubierto con un poco de Eclipse Hackery.

Resulta que cuando pones un archivo en la carpeta Android lib / assets. La aplicación de destino capturará esto y lo colocará en la raíz del archivo APK. Por lo tanto, hacer que el acceso general falle. Esto puede resolverse simplemente creando una biblioteca Java sin formato y colocando todos los activos allí, es decir (JAVALIB) /assets/fileX.txt.

A su vez, puede incluir esto como un origen de carpeta de ruta de comstackción de Java en Proyecto> Propiedades> Ruta de comstackción de Java> Origen> Origen de enlace.

  1. Link Source
  2. Haga clic en Variables. y Agregar nueva variable, es decir, VAR_NAME_X. ubicación: ../../(relative_path_to_assets_project)
  3. Haga clic en Aceptar

Ahora, cuando construya y ejecute su aplicación, la carpeta de activos en el APK contendrá sus archivos (Biblioteca GLOBAL) como lo desea.

No es necesario volver a configurar las partes internas de Android o nada. Es todo capaz con unos pocos clics de Eclipse.

Puede lograrlo creando un enlace simbólico en la carpeta de activos del proyecto que apunta al directorio en el proyecto de la biblioteca.

Luego puede acceder de la siguiente manera:

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

Confirmo que el enfoque de Daniel Grant funciona al menos para la siguiente situación: el proyecto objective NO tiene una carpeta de activos (o la carpeta está vacía, por lo que puede eliminarla de forma segura). No configuré ninguna variable. Simplemente configure un LinkSource de la siguiente manera (solo un ejemplo) Ubicación de la carpeta vinculada: / home / matthew / workspace_moonblink / assetsForAdvocacy / assets Nombre de la carpeta: assets

El “assetsForAdvocacy” es un proyecto de Java (creado con New-Project-Java Project) con una carpeta src vacía y una nueva carpeta llamada “assets”, que ahora proporciona la carpeta de activos completa para el proyecto de destino.

Esta es una forma bastante sencilla dentro de Eclipse de proporcionar reutilización de activos en muchos proyectos diferentes SI todavía no tienen activos, lo suficientemente buenos como para seguir adelante. Probablemente quiera mejorarlo para convertirme en un proveedor de contenido a largo plazo, pero eso es mucho más desarrollo.

Mi proyecto accede a los activos con el siguiente código: String advocacyFolderInAssets = “no_smoking /”; // una carpeta debajo de assets / String fn = advocacyFolderInAssets + imageFilename; Bitmap pristineBitmapForAdvocacy = getBitmapFromAsset (context, fn);

Uso Motodev Studio 3.1.0 en Ubuntu. No me permitiría ‘fusionar’ una nueva carpeta de activos en el nuevo proyecto de activos solo en una carpeta de activos existente en el proyecto de destino.

Si desea utilizar una configuración donde se crean múltiples productos derivados a partir de una biblioteca, puede considerar el uso de svn: externals o una solución similar en su sistema SCM. Esto también hará que los activos estáticos como la ayuda en línea se puedan versionar por separado desde el código fuente de Android.

Encontré esta pregunta anterior , podría ayudarte también.

Esta es la forma oficial en que Google utiliza para archivar esto (de la publicación anterior): Enlace