Con recursos, hay soporte incorporado para proporcionar alternativas para diferentes idiomas, versiones de sistema operativo, orientaciones de pantalla, etc., como se describe aquí . 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 mismos. Nada de eso se aplica a los activos.
Entonces, ¿por qué tener una carpeta de activos? Si desea calcular el activo que desea usar en tiempo de ejecución, es bastante fácil. Con los recursos, debería declarar una lista de todos los ID de recursos que podrían usarse y calcular un índice en la lista. (Esto es un poco 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 organizará en una jerarquía de carpetas, que no es compatible con los recursos. Es una forma diferente de administrar 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 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 compilación basado en Gradle de Android (usado 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 fusionan en proyectos de aplicación (por lo que no tienen que estar presentes en el /assets
directorio de la aplicación si están en una biblioteca referenciada).
EDITAR: Sin embargo, surge otra diferencia si desea empaquetar una fuente personalizada con su aplicación. Hay llamadas API para crear un Typeface
archivo de fuente almacenado en el sistema de archivos o en el assets/
directorio de su aplicación . Pero no hay una API para crear un Typeface
archivo de fuente almacenado en el res/
directorio (o de un archivo InputStream
que permita el uso del res/
directorio). [ NOTA: con Android O (ahora disponible en versión preliminar alfa) podrá incluir fuentes personalizadas como recursos. Vea la descripción aquí de esta característica que se ha retrasado mucho. Sin embargo, siempre que su nivel mínimo de API sea de 25 o menos, tendrá que seguir empaquetando las fuentes personalizadas como activos en lugar de como recursos.]
res
significa recursos, entonces ¿quéassets
significa?raw/
directorio?/res
directorios y '/ assets' es de solo lectura, ya que están empaquetados en el archivo .apk.Ambos son bastante similares. La principal diferencia real entre los dos es que en el
res
directorio cada archivo tiene un precompilado alID
que se puede acceder fácilmenteR.id.[res id]
. Esto es útil para acceder rápida y fácilmente a imágenes, sonidos, íconos ...El
assets
directorio se parece más a un sistema de archivos y proporciona más libertad para colocar allí cualquier archivo que desee. 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 del juego, diccionarios, ... etc. Espero que ayude.fuente
Assets
carpeta, el sistema Android ahora contiene unfonts
directorio y podemos poner nuestro archivo de fuentes personalizado allí o podemos hacer que Android Studio nos lo descargue.Sé que esto es antiguo, pero solo para aclararlo, 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 usarlo para almacenar archivos de activos sin procesar. Los archivos que guarde aquí se compilan en un archivo .apk tal cual y se conserva el nombre de archivo original. Puede navegar por este directorio de la misma manera que un sistema de archivos típico usando URI y leer archivos como una secuencia de bytes usando el AssetManager. Por ejemplo, esta es una buena ubicación para texturas y datos del juego.
res/raw/
Para archivos arbitrarios de activos sin formato. Guardar archivos de activos aquí en lugar de en el directorio assets / 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 recurso en la clase R. Por ejemplo, este es un buen lugar para medios, como archivos MP3 u Ogg.
fuente
Los siguientes son algunos puntos clave:
Conclusión
fuente
Si necesita referirlos a algún lugar del Código Java, deberá colocar 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.
fuente
Use 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.
fuente
Ted Hopp respondió esto muy bien. He estado usando res / raw para mis archivos de textura y sombreador 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 una identificación de recurso única. 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.
fuente
Los activos proporcionan una manera 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 sin procesar. Si desea acceder a datos intactos, los activos son una forma de hacerlo.
fuente
res/raw
, puede obtener datos sin procesar utilizandoopenRawResource(resourceName)
.