Différence entre les répertoires / res et / assets
je sais que les fichiers du répertoire res
sont accessibles à partir de R.class
alors que les actifs se comportent comme un système de fichiers, mais je voudrais savoir, en général, quand il est préférable d'utiliser l'un et l'autre.
Est-ce que quelqu'un peut m'aider à connaître les différences réelles entre les res et les actifs?
8 réponses
avec des ressources, il y a un support intégré pour fournir des alternatives pour différentes langues, versions OS, orientations d'écran, etc. comme décrit ici . Rien de tout cela n'est disponible avec des actifs. De plus, de nombreuses parties de L'API permettent l'utilisation d'identificateurs de ressources. Enfin, les noms des ressources sont transformés en noms de champs constants qui sont vérifiés au moment de la compilation, donc il y a moins d'opportunités d'inadéquation entre le code et les ressources m'. Rien de tout cela ne s'applique aux actifs.
alors pourquoi avoir un dossier actif? Si vous voulez calculer l'actif que vous souhaitez utiliser lors de l'exécution, il est assez facile. Avec les ressources, vous devrez déclarer une liste de tous les identificateurs de ressources qui pourraient être utilisés et 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 nom en utilisant getIdentifier
, mais cela perd les avantages de la vérification de la compilation.) Les actifs peuvent aussi être organisés en une hiérarchie de dossiers, qui n'est pas supportée par les ressources. C'est une autre façon de gérer les données. Bien que les ressources couvrent la plupart des cas, les biens ont une utilisation occasionnelle.
autre différence: les ressources définies dans un projet de bibliothèque sont automatiquement importées dans des projets d'application qui dépendent de la bibliothèque. Pour les actifs, cela ne se produire; les fichiers de biens doivent être présents dans le répertoire de biens du ou des projets d'application. [EDIT: avec le nouveau D'Android "Grad-based build system (utilisé avec Android Studio), ce n'est plus vrai. Les répertoires de biens pour les projets de bibliothèque sont empaquetés dans le .les fichiers aar, de sorte que les biens définis dans les projets de bibliothèque sont fusionnés dans les projets d'application (de sorte qu'ils ne doivent pas être présents dans le répertoire /assets
de l'application s'ils sont dans une bibliothèque référencée).]
EDIT: une autre différence se produit si vous voulez empaqueter une police personnalisée avec votre application. Il y a appels API pour créer un Typeface
à partir d'un fichier de police stocké dans le système de fichiers ou dans le répertoire assets/
de votre application. Mais il n'y a pas D'API pour créer un Typeface
à partir d'un fichier de police stocké dans le répertoire res/
(ou à partir d'un InputStream
, qui permettrait l'utilisation du répertoire res/
). [ NOTE: avec Android O (maintenant disponible dans alpha preview) vous serez en mesure d'inclure des polices personnalisées en tant que ressources. Voir la description ici de cette caractéristique attendue depuis longtemps. Cependant, aussi longtemps que votre niveau minimum D'API est de 25 ou moins, vous devrez vous en tenir à l'empaquetage des polices personnalisées en tant qu'actifs plutôt qu'en tant que ressources.]
les deux sont assez similaires. La vraie différence principale entre les deux est que dans le répertoire res
chaque fichier reçoit un ID
pré-compilé qui peut être accédé facilement par R.id.[res id]
. Ceci est utile pour accéder rapidement et facilement aux images, sons, icônes...
le répertoire assets
ressemble plus à un système de fichiers et offre plus de liberté pour y mettre n'importe quel fichier que vous voulez. Vous pouvez alors accéder à chacun des fichiers dans ce système que vous le ferait lors de l'accès à n'importe quel dossier dans n'importe quel système de dossier par Java. Ce répertoire est bon pour des choses telles que les détails de jeu, dictionnaires,...etc. Espérons que cela aide.
je sais que c'est vieux, mais juste pour être clair, Il ya une explication de chacun dans la documentation officielle android:
de http://developer.android.com/tools/projects/index.html
assets/
C'est vide. Vous pouvez l'utiliser pour stocker des fichiers d'actifs bruts. 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 sur ce répertoire de la même manière qu'un système de fichiers typique en utilisant URIs et lire des fichiers comme un flux d'octets en utilisant L'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. Sauvegarder des fichiers d'actifs ici plutôt que dans le répertoire assets/ ne diffère que par la façon dont vous y accédez. Ces fichiers sont traités par aapt et doivent être référencés à partir de l'application en utilisant un identificateur de ressource dans la R de classe. Par exemple, c'est un bon endroit pour les médias, tels que MP3 ou Ogg fichiers.
voici quelques points clés:
- les fichiers Raw doivent avoir des noms qui sont des identificateurs Java valides, alors que les fichiers des biens n'ont aucune restriction quant à l'emplacement et au nom. Dans d'autres mots qu'ils peuvent être regroupés dans n'importe quel répertoire que nous souhaitons Les fichiers Raw
- sont faciles à consulter depuis Java aussi bien que depuis xml (I. e vous pouvez consulter un fichier brut de manifeste ou tout autre fichier xml).
- sauvegarder des fichiers d'actifs ici au lieu de dans le actifs/ répertoire diffère dans la façon dont vous y accédez comme indiqué ici http://developer.android.com/tools/projects/index.html .
- les ressources définies dans un projet de bibliothèque sont automatiquement importées projets d'application qui dépendent de la bibliothèque. Pour les actifs, qui ne se produit pas; les fichiers actifs doivent être présents dans le répertoire assets de la demande de projet(s)
- le répertoire assets ressemble plus à un système de fichiers offre une plus grande liberté pour mettre tous les fichiers que vous souhaitez. Vous pouvez alors accéder à chacun des les fichiers dans ce système comme vous le feriez en accédant à n'importe quel fichier système de fichiers en Java . comme les fichiers de données de Jeu, Les polices , les textures etc.
- Contrairement aux ressources, les actifs peuvent être organisés en sous - 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 les chaînes ou bitmaps dans les actifs, mais vous pouvez stocker des données au format personnalisé comme les dictionnaires de correction d'entrée ou les cartes de jeu.
- Raw peut vous donner un contrôle de temps de compilation en générant votre R.java fichier toutefois, Si vous souhaitez copier votre base de données de répertoire privé vous peut utiliser des ressources qui sont faites pour la diffusion en continu.
Conclusion
- API Android comprend un cadre de ressources très confortable qui est également optimisé pour cas d'utilisation les plus typiques pour diverses applications mobiles. Vous devriez maîtriser les ressources et essayer de les utiliser dans la mesure du possible.
- cependant, si vous avez besoin de plus de flexibilité pour votre cas spécial, les actifs sont là pour vous donner une API de niveau inférieur qui permet d'organiser et traiter vos ressources avec un degré plus élevé de liberté.
si vous avez besoin de les renvoyer quelque part dans le Code Java, vous avez rahter mettre vos fichiers dans le répertoire" res".
et tous les fichiers du dossier res seront indexés dans le fichier R, ce qui le rend beaucoup plus rapide (et beaucoup plus facile!) pour les charger.
utilise des actifs comme un système de fichiers pour vider n'importe quel type de fichiers. Et utilisez res pour stocker ce qu'il est fait pour, layouts, images, valeurs.
Ted Hopp a très bien répondu. J'ai utilisé res / raw pour mes textures opengl et mes fichiers shader. Je pensais les transférer dans un répertoire d'actifs pour fournir une organisation hiérarchique.
Ce fil m'a convaincu de ne pas. D'abord, parce que j'aime l'utilisation d'un id unique de la ressource. Deuxièmement parce qu'il est très simple d'utiliser InputStream/openRawResource ou BitmapFactory pour lire dans le fichier. Troisième parce qu'il est très utile d'être en mesure d'utiliser dans un portable de la bibliothèque.
actifs fournissent un moyen d'inclure des fichiers arbitraires comme le texte, xml, polices, musique, et vidéo dans votre application. Si vous essayez d'inclure ces fichiers comme "ressources", Android les traitera dans son système de ressources et vous ne serez pas en mesure d'obtenir les données brutes. Si vous souhaitez accéder à des données intactes, les Actifs sont une façon de le faire.