263 votes

Différence entre les répertoires / res et / assets

Je sais que les fichiers du répertoire res sont accessibles depuis R.class alors que les assets se comportent comme un système de fichiers, mais je voudrais savoir, en général, quand il est préférable d'en utiliser un. autre.
Quelqu'un peut-il m'aider à connaître les véritables différences entre les ressources et les actifs?

Merci d'avance.

282voto

Ted Hopp Points 122617

Avec des ressources, il y a un support intégré pour offrir des solutions de rechange pour les différentes langues, les versions de système d'exploitation, les orientations d'écran, etc., comme décrit ici. Aucune de ce qui est disponible sur les actifs. Aussi, de nombreuses parties de l'API en charge l'utilisation d'identificateurs de ressources. Enfin, les noms des ressources sont transformés en champ constant noms qui sont vérifiées au moment de la compilation, il y a donc moins de possibilité de l'inadéquation entre le code et les ressources elles-mêmes. Rien de tout ce qui s'applique aux actifs.

Alors, pourquoi avez un dossier des actifs? Si vous voulez calculer l'actif que vous souhaitez utiliser lors de l'exécution, il est assez facile. Avec des ressources, vous devez déclarer une liste de tous les Id de ressource qui pourrait être utilisé, et de calculer un index dans la liste. (C'est un peu maladroit et présente des possibilités d'erreur si l'ensemble des ressources des changements dans le cycle de développement.) (EDIT: vous pouvez récupérer un ID de ressource par le nom à l'aide d' getIdentifier, mais cela perd les avantages de la compilation le temps de vérifier.) Les actifs peuvent également être organisés dans une hiérarchie de dossiers, ce qui n'est pas pris en charge par les ressources. C'est une façon différente de gérer les données. Bien que les ressources couvrent la plupart des cas, les actifs ont leur usage occasionnel.

Une autre différence: les ressources définies dans un projet de bibliothèque sont automatiquement importés à des projets d'applications qui dépendent de la bibliothèque. Pour les actifs, qui n'a pas lieu; les fichiers de ressources doivent être présents dans le répertoire actif de la demande de projet(s).

Edit 2: Encore une autre différence se pose si vous voulez compresser une police personnalisée avec votre application. Il y a des appels d'API pour créer un Typeface à partir d'un fichier de police de caractères stockée dans le système de fichiers ou dans votre application assets/ répertoire. Mais il n'y a pas d'API pour créer un Typeface à partir d'un fichier de police de caractères stockés dans l' res/ répertoire (ou à partir d'un InputStream, ce qui permettrait l'utilisation de l' res/ répertoire).

61voto

DiscGolfer Points 4655

Les deux sont assez semblables. La vraie différence principale entre les deux est que dans l' res répertoire de chaque fichier est donné un pré-compilé ID qui peut être facilement accessible par le biais R.id.[res id]. Cela est utile pour accéder rapidement et facilement des images, des sons, des icônes...

L' assets annuaire est de plus en plus comme un système de fichiers et offre une plus grande liberté de mettre n'importe quel fichier que vous voulez là-bas. Ensuite, vous pouvez accéder à des fichiers dans le système comme vous le feriez lors de l'accès à tout fichier dans n'importe quel système de fichier via Java. Ce répertoire est bon pour des choses telles que les détails de jeu, dictionnaires,...etc. Espérons que cela aide.

36voto

AntonyMCs Points 112

Je sais que c'est vieux, mais juste pour préciser, il y a une explication de chacun dans le android officielle de la documentation:

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

actifs/ C'est vide. Vous pouvez l'utiliser pour stocker des raw fichiers d'actifs. Les fichiers que vous enregistrez ici sont compilées dans une .apk fichier en tant que-est, et le nom de fichier d'origine est conservé. Vous pouvez naviguer dans ce répertoire, de la même manière qu'un système de fichiers à l'aide d'Uri et de lire des fichiers en un flux d'octets à l'aide de la d'assetmanager. Par exemple, c'est un bon emplacement pour les textures et les données de jeu.

res/raw/ Pour arbitraire raw fichiers d'actifs. Sauver les fichiers de ressources ici plutôt que dans les actifs/ du répertoire ne diffèrent dans la façon dont vous y avez accès. Ces fichiers sont traités par aapt et doit être référencé à partir de l'application à l'aide d'un identificateur de ressource dans le R de classe. Par exemple, c'est un bon endroit pour les médias, tels que MP3 ou Ogg fichiers.

9voto

Shubhang Malviya Points 106

Voici quelques points clés :

  1. Raw fichiers Doivent avoir des noms qui sont valides Java identifiants , alors que fichiers dans des Actifs Ont pas d'emplacement et nom de restrictions. Dans d'autres termes, ils peuvent être regroupés dans ce que nous souhaitons répertoires
  2. Les fichiers Raw Sont faciles à consulter à partir de Java et xml (j'.e vous pouvez consulter un fichier brut de manifeste ou tout autre fichier xml).
  3. Sauver les fichiers de ressources ici plutôt que dans les actifs/ du répertoire seulement diffère dans la manière dont vous y avez accès, comme indiqué ici http://developer.android.com/tools/projects/index.html.
  4. Des ressources définies dans un projet de bibliothèque sont importés automatiquement application des projets qui dépendent de la bibliothèque. Pour les actifs, qui n'est pas le cas; les fichiers d'actifs doit être présent dans le répertoire actif de la demande de projet(s)
  5. Le répertoire actif est plus comme un système de fichiers fournit plus de liberté pour mettre tous les fichiers que vous souhaitez. Ensuite, vous pouvez accéder à chacune des les fichiers de ce système comme vous le feriez lors de l'accès à tout fichier de tout système de fichiers par le biais de Java . comme le Jeu de données de fichiers , Polices , textures etc.
  6. À la différence des Ressources, les Actifs peuvent être organisés en sous-dossiers dans le répertoire actif Cependant, la seule chose que vous pouvez faire avec un actif est obtenir un flux d'entrée. Ainsi, il n'a pas beaucoup de sens pour stocker vos chaînes de caractères ou des images dans les actifs, mais vous pouvez stocker personnalisé-format de données comme l'entrée de correction de dictionnaires ou de jeu de cartes.
  7. Premières peut vous donner un moment de la compilation de vérifier par la génération de votre R.java fichier toutefois, Si vous souhaitez copier votre base de données de répertoire privé vous pouvez utiliser les Biens qui sont faites pour le streaming.

Conclusion

  1. L'API Android comprend un très confortable cadre de Ressources qui est également optimisé pour la plupart des cas d'utilisation typique pour différentes applications mobiles. Vous devez maîtriser les Ressources et essayez de les utiliser dans la mesure du possible.
  2. Toutefois, si vous avez besoin de plus de flexibilité pour votre cas particulier, les Actifs sont là pour vous donner un niveau inférieur de l'API qui permet l'organisation et le traitement de vos ressources, avec un degré de liberté.

4voto

L.Butz Points 734

Si vous avez besoin de les référencer quelque part dans le code Java, vous devriez placer vos fichiers dans le répertoire "res".

Et tous les fichiers dans le dossier res seront indexés dans le fichier R, ce qui le rend beaucoup plus rapide (et beaucoup plus facile!) Pour les charger.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X