studio notification logo icon generate create asset app android android-assets

notification - launcher icon generator android asset studio



Diferencia entre los directorios/res y/asset. (8)

Sé que los archivos en el directorio res son accesibles desde R.class mientras que los activos se comportan como un sistema de archivos, pero me gustaría saber, en general, cuándo es mejor usar uno y el otro.
¿Puede alguien ayudarme a conocer las diferencias reales entre recursos y activos?


Ambos son bastante similares. La verdadera diferencia principal entre los dos es que en el directorio res se le da a cada archivo un ID precompilado al que se puede acceder fácilmente a través de R.id.[res id] . Esto es útil para acceder rápida y fácilmente a imágenes, sonidos, íconos ...

El directorio de assets es más como un sistema de archivos y proporciona más libertad para colocar cualquier archivo que desee allí. Luego puede acceder a cada uno de los archivos en ese sistema como lo haría al acceder a cualquier archivo en cualquier sistema de archivos a través de Java. Este directorio es bueno para cosas como detalles de juegos, diccionarios, etc. etc. Espero que ayude.


Con recursos, hay soporte incorporado para proporcionar alternativas para diferentes idiomas, versiones de SO, orientaciones de pantalla, etc., como se describe here . Nada de eso está disponible con activos. Además, muchas partes de la API admiten el uso de identificadores de recursos. Finalmente, los nombres de los recursos se convierten en nombres de campo constantes que se verifican en el momento de la compilación, por lo que hay menos oportunidades de desajustes entre el código y los recursos en sí. Nada de eso se aplica a los activos.

Entonces, ¿por qué tener una carpeta de activos en absoluto? Si desea calcular el activo que desea utilizar en el tiempo de ejecución, es bastante fácil. Con los recursos, tendría que declarar una lista de todos los ID de recursos que podrían usarse y calcular un índice en la lista. (Esto es un tanto incómodo e introduce oportunidades de error si el conjunto de recursos cambia en el ciclo de desarrollo). (EDITAR): puede recuperar un ID de recurso por nombre usando getIdentifier , pero esto pierde los beneficios de la verificación en tiempo de compilación. también se puede organizar en una jerarquía de carpetas, que no es compatible con los recursos. Es una forma diferente de gestionar los datos. Aunque los recursos cubren la mayoría de los casos, los activos tienen su uso ocasional.

Otra diferencia: los recursos definidos en un proyecto de biblioteca se importan automáticamente a los proyectos de aplicación que dependen de la biblioteca. Para los activos, eso no sucede; Los archivos de activos deben estar presentes en el directorio de activos de los proyectos de la aplicación. [EDITAR: Con el nuevo sistema de construcción basado en Gradle de Android (utilizado con Android Studio), esto ya no es cierto. Los directorios de activos para proyectos de biblioteca se empaquetan en los archivos .aar, por lo que los activos definidos en proyectos de biblioteca se combinan en proyectos de aplicación (por lo que no tienen que estar presentes en el directorio de la aplicación /assets si están en una biblioteca de referencia).

EDITAR: Otra diferencia surge si desea empaquetar una fuente personalizada con su aplicación. Hay llamadas a la API para crear un Typeface de Typeface partir de un archivo de fuente almacenado en el sistema de archivos o en el directorio de assets/ aplicaciones de su aplicación. Pero no hay una API para crear un Typeface de Typeface partir de un archivo de fuente almacenado en el directorio res/ (o de un InputStream , lo que permitiría el uso del directorio res/ ). [ NOTA: con Android O (ahora disponible en la vista previa alfa) podrá incluir fuentes personalizadas como recursos. Vea la descripción here de esta característica de larga data. Sin embargo, siempre que su nivel mínimo de API sea de 25 o menos, deberá seguir empaquetando las fuentes personalizadas como activos en lugar de recursos.]


Los activos proporcionan una forma de incluir archivos arbitrarios como texto, XML, fuentes, música y video en su aplicación. Si intenta incluir estos archivos como "recursos", Android los procesará en su sistema de recursos y no podrá obtener los datos en bruto. Si desea acceder a los datos intactos, los activos son una forma de hacerlo.


Los siguientes son algunos puntos clave:

  1. Archivos sin formato Deben tener nombres que sean identificadores de Java válidos, mientras que los archivos en Activos no tienen restricciones de ubicación y nombre. En otras palabras, se pueden agrupar en los directorios que deseemos.
  2. Archivos sin formato Son fáciles de consultar tanto desde Java como desde xml (es decir, puede hacer referencia a un archivo en bruto desde el archivo de manifiesto u otro archivo xml).
  3. Guardar archivos de activos aquí en lugar de en el directorio de activos solo difiere en la forma en que accede a ellos como se documenta aquí http://developer.android.com/tools/projects/index.html .
  4. Los recursos definidos en un proyecto de biblioteca se importan automáticamente a los proyectos de aplicación que dependen de la biblioteca. Para los activos, eso no sucede; Los archivos de activos deben estar presentes en el directorio de activos de los proyectos de la aplicación.
  5. El directorio de activos es más parecido a un sistema de archivos que ofrece más libertad para colocar cualquier archivo que desee allí. Luego puede acceder a cada uno de los archivos en ese sistema como lo haría al acceder a cualquier archivo en cualquier sistema de archivos a través de Java. como archivos de datos del juego, fuentes, texturas, etc.
  6. A diferencia de los Recursos, los Activos pueden organizarse en subcarpetas en el directorio de activos. Sin embargo, lo único que puede hacer con un activo es obtener un flujo de entrada. Por lo tanto, no tiene mucho sentido almacenar sus cadenas o mapas de bits en activos, pero puede almacenar datos en formato personalizado como diccionarios de corrección de entrada o mapas de juegos.
  7. Raw puede proporcionarle una verificación de tiempo de compilación al generar su archivo R.java. Sin embargo, si desea copiar su base de datos a un directorio privado, puede usar los Activos creados para la transmisión.

Conclusión

  1. La API de Android incluye un marco de recursos muy cómodo que también está optimizado para los casos de uso más comunes para varias aplicaciones móviles. Debes dominar los recursos e intentar usarlos siempre que sea posible.
  2. Sin embargo, si necesita más flexibilidad para su caso especial, los Activos están ahí para brindarle una API de nivel inferior que le permite organizar y procesar sus recursos con un mayor grado de libertad.

Sé que esto es antiguo, pero solo para dejarlo claro, hay una explicación de cada uno en la documentación oficial de Android:

de http://developer.android.com/tools/projects/index.html

assets/

Esto esta vacio Puede utilizarlo para almacenar archivos de activos en bruto. Los archivos que guarda aquí se compilan en un archivo .apk tal como está, y el nombre de archivo original se conserva. Puede navegar por este directorio de la misma manera que un sistema de archivos típico que usa URI y leer archivos como una corriente de bytes con AssetManager. Por ejemplo, esta es una buena ubicación para texturas y datos de juegos.

res/raw/

Para archivos de activos en bruto arbitrarios. Guardar archivos de activos aquí en lugar de en el directorio de activos solo difiere en la forma en que accede a ellos. Estos archivos son procesados ​​por aapt y deben ser referenciados desde la aplicación usando un identificador de recursos en la clase R. Por ejemplo, este es un buen lugar para archivos multimedia, como archivos MP3 u Ogg.


Si necesita remitirlos a algún lugar en el Código Java, debe poner sus archivos en el directorio "res".

Y todos los archivos en la carpeta res se indexarán en el archivo R, lo que hace que sea mucho más rápido (y mucho más fácil) cargarlos.


Ted Hopp respondió esto muy bien. He estado usando res / raw para mis archivos de textura y sombreado de opengl. Estaba pensando en moverlos a un directorio de activos para proporcionar una organización jerárquica.

Este hilo me convenció de no hacerlo. Primero, porque me gusta el uso de un ID de recurso único. Segundo, porque es muy simple usar InputStream / openRawResource o BitmapFactory para leer en el archivo. Tercero, porque es muy útil poder usarlo en una biblioteca portátil.


Utilice activos como un sistema de archivos para volcar cualquier tipo de archivos. Y use res para almacenar para qué está hecho, diseños, imágenes, valores.