Quand dois-je utiliser les ressources par opposition aux ressources brutes dans Android?

152

Je suis au milieu de mes études Android, et je viens de couvrir les ressources Assets et Raw. J'essaie de comprendre la raison de l'utilisation des ressources brutes par rapport aux actifs.

  1. Ils fournissent tous deux un flux d'entrée de ressources non compilé.

  2. Il semble que les actifs offrent beaucoup plus de flexibilité et de fonctionnalités que les ressources brutes.

    une. Vous pouvez créer des structures de dossiers sous assetsmais pas sousraw

    b. Vous pouvez lister toutes les ressources de manière dynamique dans le assetsdossier mais pas dans le rawdossier.

Alors, pourquoi utiliserais-je des ressources brutes dans Android?

Mortalus
la source
Copie

Réponses:

183

Les principales différences entre le rawdossier et le assetsdossier.

  • Étant donné que raw est un sous-dossier de Resources (res), Android générera automatiquement un IDpour tout fichier situé à l'intérieur. Ceci IDest ensuite stocké dans le R classqui agira comme une référence à un fichier, ce qui signifie qu'il peut être facilement accessible à partir d'autres classes et méthodes Android et même dans des fichiers XML Android. L'utilisation de l'ID généré automatiquement est le moyen le plus rapide d'accéder à un fichier sous Android.

  • Le assetsdossier est un répertoire «annexe» . La classe R ne génère pas d'ID pour les fichiers qui y sont placés, ce qui est moins compatible avec certaines classes et méthodes Android. L'accès aux fichiers dans le assetsdossier est plus lent car vous devrez obtenir un descripteur basé sur une chaîne . Cependant, certaines opérations sont plus faciles à effectuer en plaçant des fichiers dans ce dossier, comme la copie d'un fichier de base de données dans la mémoire du système. Il n'y a pas de moyen (facile) de créer une référence XML Android aux fichiers dans le dossier Assets.

user370305
la source
4
@ user370305 Salut, la limitation de 1 Mo est-elle toujours là pour le nouveau système d'exploitation Android? Je ne trouve aucune documentation qui en parle. Avez-vous une idée où puis-je le trouver?
GMsoF
6
@GMsoF - Il n'y a pas de document spécifique à ce sujet. Mais j'ai quelques liens utiles pour vous. 1. blog.rossgreenhalf.com/2010/12/13/android-file-size-limits 2. stackoverflow.com/questions/11276112/… 3. stackoverflow.com/questions/6809651/... 4. elinux.org/Android_aapt et 5. android-developers.blogspot.in/2012/03/… Passez simplement comme par sr no.
user370305
2
@GMsoF - Il existe de nombreuses astuces pour placer une taille de fichier supérieure à 1 Mo dans le /assetrépertoire.
user370305
10
je n'ai jamais eu de restriction de taille de fichier pour le dossier des actifs. êtes-vous sûr qu'il existe une telle chose?
développeur android
2
Oui, avant Android 2.2 ou 2.3, tout fichier d'actif compressé d'une taille non compressée supérieure à 1 Mo ne peut pas être lu à partir de l'APK. Qui est mentionné ici groups.google.com/forum/#!topic/android-developers/lguGFJD-JRs
user370305
34

Depuis la documentation Android , le raw/répertoire est utilisé pour:

Fichiers arbitraires à enregistrer sous leur forme brute. Pour ouvrir ces ressources avec un InputStream brut , appelez Resources.openRawResource () avec l'ID de ressource, qui est R.raw.filename .

Cependant, si vous avez besoin d'accéder aux noms de fichiers d'origine et à la hiérarchie des fichiers, vous pouvez envisager d'enregistrer certaines ressources dans le assets/répertoire (au lieu de res / raw /) . Les fichiers des assets / ne reçoivent pas d'ID de ressource, vous ne pouvez donc les lire qu'en utilisant AssetManager .


Sur une ligne, les fichiers du raw/répertoire ne sont pas compilés par la plateforme , se voient attribuer un ID de ressource et ne peuvent pas être regroupés en sous-dossiers alors que si vous le souhaitez, utilisez le assets/répertoire.

Prince
la source
1
Les fichiers bruts sont-ils la meilleure option si vous souhaitez copier un fichier volumineux dans un dossier de stockage?
live-love
@ 40-Love Il n'y a aucune restriction sur la taille des fichiers pour Android 2.3 et supérieur, sauf si vous prenez en charge les versions antérieures. Vous pouvez choisir n'importe quel dossier de stockage en fonction de vos besoins. Une distinction majeure est la façon dont ces fichiers sont accessibles.
Prince
1

Ajout aux réponses données ci-dessus ...

Les fichiers / res / strings, / res / layout, / res / xml etc. sont tous compilés au format binaire. Mais si vous placez des fichiers, y compris des fichiers XML, dans le répertoire / res / raw / à la place, ils ne sont pas compilés au format binaire.

Le préfixe file:///android_asset/ Uri est l'un des grands avantages de l'utilisation d'actifs par rapport aux ressources brutes, ce qui est utile pour charger un actif dans une WebView. Par exemple, pour accéder à un élément situé dans assets / foo / index.html dans votre projet, vous pouvez appeler le loadUrl("file:///android_asset/foo/index.html")chargement de ce code HTML dans WebView.

Shubhamhackz
la source
Vous pouvez utiliser le file:///android_res/préfixe pour pointer vers une ressource brute.
androidguy