Pregunta

En una clase perteneciente a un Biblioteca proyecto que llamo:

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

Desafortunadamente, esto solo funciona si duplicar el archivo info.html en el Aplicaciones Carpeta de activos del proyecto también.

¿Hay alguna forma 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 "?

¿Fue útil?

Solución

Desde el Docios de Android:

Los proyectos de la biblioteca no pueden incluir activos en bruto

Las herramientas no admiten el uso de archivos de activos sin procesar (guardados en los activos/ directorio) en un proyecto de biblioteca. Cualquier recurso de activos utilizados por una aplicación debe almacenarse en los activos/ directorio del proyecto de solicitud en sí. Sin embargo, se admiten archivos de recursos guardados en el directorio RES/ Directorio.

Si desea incluir archivos de un proyecto de biblioteca, deberá ponerlo en los recursos en lugar de los activos. Si está intentando cargar archivos HTML desde el proyecto de su biblioteca en una vista web, esto significa que tendrá que obtener un método más indirecto que la URL de activos habitual. En su lugar, tendrá que leer los datos de recursos y usar algo como Cargar datos.

Esta respuesta es fuera de plazo, la Sistema de construcción de graduados y los archivos AAR admiten activos.

Otros consejos

Esto ahora es posible utilizando el sistema de construcción de Gradle.

Prueba con Android Studio 0.5.0 y V0.9 del complemento de Gradle Android, descubrí que archivos como

MyLibProject/src/main/assets/test.html

se empaquetan correctamente 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 por esto por un tiempo. Soy el tipo de persona que ama la creación de API y odia la integración complicada.

No hay muchas soluciones en Internet, por lo que estoy muy orgulloso de lo que he descubierto con un poco de hackería de eclipse.

Resulta que cuando coloca un archivo en la carpeta de Android Lib /Assets. El objetivo APK capturará esto y lo colocará en la raíz del archivo APK. Por lo tanto, hacer que el acceso general falle. Esto se puede resolver simplemente creando una biblioteca de Java sin procesar y colocando todos los activos allí, es decir (javalib) /assets/filex.txt.

A su vez, puede incluir esto como una fuente de carpeta de ruta de compilación Java en Proyecto> Propiedades> Java Build Rath> Fuente> Fuente de enlace.

  1. Fuente de enlace
  2. Haga clic en Variables. y agregue una nueva variable, es decir, var_name_x. Ubicación: ../../(relative_path_to_assets_project)
  3. Haga clic en Aceptar

Ahora, cuando construye y ejecuta su aplicación, la carpeta de activos en el APK contendrá sus archivos (global de la biblioteca) según lo previsto.

No hay necesidad de reconfigurar los internales de Android o nada. Todo es capaz en unos pocos clics de Eclipse.

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

Entonces puede acceder a continuación:

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 Target no tiene una carpeta de activos (o la carpeta está vacía, por lo que puede eliminarla de manera segura). No configuré ninguna variable. Simplemente configure un LinkSource de la siguiente manera (solo un ejemplo) Linked Carper Ubicación:/Home/Matthew/Workspace_moonblink/AssetsForAdVocacy/Assets Nombre de carpeta: Activos

El "AssetsForAdVocacy" es un proyecto Java (creado con New -Project - Java Project) con carpeta SRC vacía y una nueva carpeta llamada "Activos", que ahora proporciona toda la carpeta de activos para el proyecto de destino.

Esta es una forma bastante sencilla dentro de Eclipse para proporcionar a los activos reutilizar en muchos proyectos diferentes si aún no tienen activos, lo suficientemente bueno para comenzar. Probablemente me gustaría 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 los activos/string fn = AdvocacyFolderInAssets+ImageFileName; Bitmap pristineBitMapForAdVocacy = getBitMapFromAsset (contexto, fn);

Utilizo Motodev Studio 3.1.0 en Ubuntu. No me permitiría 'fusionar' una nueva carpeta de activos en el nuevo proyecto de solo activos en una carpeta de activos existentes en el proyecto de destino.

Si desea utilizar una configuración en la que se creen múltiples productos de derivado a partir de una biblioteca, puede considerar usar SVN: externals o solución similar en su sistema SCM. Esto también hará el truco de que los activos estáticos como la ayuda en línea pueden ser versionados por separado del código fuente de Android.

encontré Esta pregunta más antigua, también podría ayudarte.

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top