Avec les ressources, il existe un support intégré pour fournir des alternatives pour différentes langues, versions de système d'exploitation, orientations d'écran, etc., comme décrit ici . Rien de tout cela n'est disponible avec les actifs. De plus, de nombreuses parties de l'API prennent en charge 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, il y a donc moins de possibilité de disparités entre le code et les ressources elles-mêmes. Rien de tout cela ne s'applique aux actifs.
Alors pourquoi avoir un dossier d'actifs? Si vous souhaitez calculer l'élément que vous souhaitez utiliser au moment de l'exécution, c'est assez simple. Avec les ressources, vous devez déclarer une liste de tous les ID de ressource pouvant être utilisés et calculer un index dans la liste. (C'est un peu gênant et présente des possibilités d'erreur si l'ensemble des ressources change au cours du cycle de développement.) (EDIT: vous pouvez récupérer un ID de ressource par son nom en utilisant getIdentifier
, mais cela perd les avantages de la vérification à la compilation.) Les actifs peuvent être également organisé en une hiérarchie de dossiers, qui n'est pas prise 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 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 produit pas; les fichiers de ressources doivent être présents dans le répertoire des actifs du ou des projets d'application. [EDIT: Avec le nouveau système de construction basé sur Gradle d'Android (utilisé avec Android Studio), ce n'est plus vrai. Les répertoires d'actifs pour les projets de bibliothèque sont regroupés dans les fichiers .aar, de sorte que les actifs définis dans les projets de bibliothèque sont fusionnés dans les projets d'application (de sorte qu'ils n'ont pas besoin d'être présents dans le /assets
répertoire de l'application s'ils se trouvent dans une bibliothèque référencée).]
EDIT: Une autre différence survient si vous souhaitez empaqueter une police personnalisée avec votre application. Il existe des appels d'API pour créer un à Typeface
partir d'un fichier de police stocké dans le système de fichiers ou dans le assets/
répertoire 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 res/
répertoire (ou à partir d'un InputStream
, ce qui permettrait d'utiliser le res/
répertoire). [ REMARQUE: avec Android O (désormais disponible en aperçu alpha), vous pourrez inclure des polices personnalisées en tant que ressources. Voir la description ici de cette fonctionnalité attendue depuis longtemps. Cependant, tant que votre niveau d'API minimum est de 25 ou moins, vous devrez vous limiter à empaqueter les polices personnalisées en tant qu'actifs plutôt qu'en tant que ressources.]
res
représente les ressources, alors qu'est-ce queassets
signifie ??raw/
répertoire?/res
répertoires et '/ assets' est en lecture seule, car ils sont regroupés dans le fichier .apk.Les deux sont assez similaires. La vraie différence principale entre les deux est que dans le
res
répertoire, chaque fichier reçoit une pré-compilationID
qui est facilement accessible viaR.id.[res id]
. Ceci est utile pour accéder rapidement et facilement aux images, sons, icônes ...Le
assets
répertoire ressemble plus à un système de fichiers et offre plus de liberté pour y mettre n'importe quel fichier que vous souhaitez. Vous pouvez ensuite accéder à chacun des fichiers de ce système comme vous le feriez lorsque vous accédez à n'importe quel fichier dans n'importe quel système de fichiers via Java. Ce répertoire est bon pour des choses telles que les détails du jeu, les dictionnaires, ... etc. J'espère que cela pourra aider.la source
Assets
dossier, le système Android contient maintenant unfonts
répertoire et nous pouvons y mettre notre fichier de polices personnalisées ou nous pouvons le faire télécharger par Android studio.Je sais que c'est vieux, mais juste pour être clair, il y a une explication de chacun dans la documentation officielle d'Android:
depuis 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és dans un fichier .apk tel quel et le nom de fichier d'origine est conservé. Vous pouvez parcourir ce répertoire de la même manière qu'un système de fichiers classique à l'aide d'URI et lire des fichiers sous forme de flux d'octets à l'aide de AssetManager. Par exemple, c'est un bon emplacement pour les textures et les données de jeu.
res/raw/
Pour les fichiers d'actifs bruts arbitraires. L'enregistrement 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 à l'aide d'un identifiant de ressource dans la classe R. Par exemple, c'est un bon endroit pour les médias, tels que les fichiers MP3 ou Ogg.
la source
Voici quelques points clés:
Conclusion
la source
Si vous avez besoin de les référencer quelque part dans le code Java, vous devez 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 rend leur chargement beaucoup plus rapide (et beaucoup plus facile!).
la source
Utilisez des ressources comme un système de fichiers pour vider tout type de fichiers. Et utilisez res pour stocker ce pour quoi il est fait, mises en page, images, valeurs.
la source
Ted Hopp a très bien répondu à cette question. J'utilise res / raw pour mes fichiers de texture et de shader opengl. Je pensais à les déplacer vers un répertoire d'actifs pour fournir une organisation hiérarchique.
Ce fil m'a convaincu de ne pas le faire. Tout d'abord, parce que j'aime l'utilisation d'un identifiant de ressource unique. Deuxièmement, car il est très simple d'utiliser InputStream / openRawResource ou BitmapFactory pour lire le fichier. Troisièmement, car il est très utile de pouvoir l'utiliser dans une bibliothèque portable.
la source
Les ressources permettent d'inclure des fichiers arbitraires tels que du texte, du xml, des polices, de la musique et des vidéos dans votre application. Si vous essayez d'inclure ces fichiers en tant que "ressources", Android les traitera dans son système de ressources et vous ne pourrez pas obtenir les données brutes. Si vous souhaitez accéder à des données intactes, les actifs sont un moyen de le faire.
la source
res/raw
, vous pouvez accéder aux données brutes en utilisantopenRawResource(resourceName)
.