Разница между каталогами /res и / assets

Я знаю, что файлы доступны R.class в то время как активы ведут себя как файловая система, но я хотел бы знать, в общем, когда лучше использовать один и другой.
Может ли кто-нибудь помочь мне узнать реальные различия между ВИЭ и активами?

8 ответов


С ресурсами, встроенная поддержка для обеспечивать алтернативы для различных языков, версий OS, ориентаций экрана, etc., как описано здесь. Ничего из этого не доступно с активами. Кроме того, многие части API поддерживают использование идентификаторов ресурсов. Наконец, имена ресурсов превращаются в постоянные имена полей, которые проверяются во время компиляции, поэтому меньше возможностей для несоответствий между кодом и самими ресурсами. Никто из это относится к активам.

так зачем вообще иметь папку с активами? Если вы хотите вычислить ресурс, который хотите использовать во время выполнения, это довольно просто. С ресурсами вам придется объявить список всех идентификаторов ресурсов, которые могут быть использованы, и вычислить индекс в списке. (Это неудобно и создает возможности для ошибок, если набор ресурсов изменяется в цикле разработки.) (EDIT: вы можете получить идентификатор ресурса по имени, используя getIdentifier, но это теряет преимущества проверки во время компиляции.) Активы также могут быть организованы в иерархию папок, которая не подкреплена ресурсами. Это другой способ управления данными. Хотя ресурсы охватывают большинство случаев, активы иногда используются.

еще одно отличие: ресурсы, определенные в проекте библиотеки, автоматически импортируются в проекты приложений, зависящие от библиотеки. Для активов этого не происходит; файлы активов должны присутствовать в активах каталог проекта(ов) приложения. [EDIT: с новым Android система сборки на основе Gradle (используется с Android Studio), это больше не верно. Каталоги активов для библиотечных проектов упаковываются в the .AAR-файлы, поэтому активы, определенные в проектах библиотек, объединяются в проекты приложений (поэтому они не должны присутствовать в /assets каталог, если они находятся в ссылочной библиотеке).]

EDIT: еще одна разница возникает, если вы хотите пакет пользовательского шрифта с приложением. Есть вызовы API создать Typeface из файла шрифта, хранящегося в файловой системе или в. Но нет API для создания Typeface из файла шрифта, хранящиеся в


оба довольно похожи. Реальное основное различие между ними заключается в том, что в res каталог каждому файлу дается предварительно скомпилированный ID к которому можно легко получить доступ через R.id.[res id]. Это полезно для быстрого и легкого доступа к изображениям, звукам, значкам...

на assets каталог больше похож на файловую систему и предоставляет больше свободы для размещения любого файла, который вы хотели бы там. Затем вы можете получить доступ к каждому из файлов в этой системе, как и при доступе к любому файлу в любая файловая система через Java. Этот каталог хорош для таких вещей, как детали игры, словари,...так далее. Надеюсь, это поможет.


Я знаю, что это старый, но просто чтобы прояснить, есть объяснение каждого в официальной документации android:

от http://developer.android.com/tools/projects/index.html

assets/

Это пустое. Вы можете использовать его для хранения необработанных файлов активов. Файлы, которые вы сохраняете здесь, компилируются в an .APK файл как есть, и исходное имя файла сохранилось. В этом каталоге можно перемещаться так же, как в обычной файловой системе использование URIs и чтение файлов в виде потока байтов с помощью AssetManager. Например, это хорошее место для текстур и игровых данных.

res/raw/

для произвольных файлов RAW активов. Сохранение файлов активов здесь, а не в каталоге assets/ отличается только способом доступа к ним. Эти файлы обрабатываются aapt и должны ссылаться из приложения, используя идентификатор ресурса в классе R. Например, это хорошее место для медиа, таких как MP3 или Файлы Ogg.


Ниже приведены некоторые ключевые моменты :

  1. Raw-файлы должны иметь имена, которые являются допустимыми идентификаторами Java, тогда как файлы в активах не имеют ограничений по местоположению и имени. В других слова они могут быть сгруппированы в любые каталоги, которые мы хотим
  2. Raw-файлы легко ссылаться на Java, а также из xml (i.e вы можете ссылаться на файл в raw из манифеста или другого xml-файла).
  3. сохранение файлов активов здесь, а не только в каталоге assets / отличается способ доступа к ним, как описано здесь http://developer.android.com/tools/projects/index.html.
  4. ресурсы, определенные в проекте библиотеки, автоматически импортируются в проекты приложений, зависящие от библиотеки. Для активов, что не происходит; файлы активов должны присутствовать в каталоге assets проекта (ов) приложения
  5. каталог активов больше похож на файловую систему, обеспечивающую большую свободу чтобы положить туда любой файл, который вы хотите. Вы потом можете открыть каждый из файлы в этой системе, как и при доступе к любому файлу в любом файловой системе через Java . как файлы игровых данных, шрифты, текстуры так далее.
  6. В отличие от ресурсов, активы могут быть организованы в папки в каталог активов однако единственное, что вы можете сделать с активом, это получить входной поток. Таким образом, не имеет большого смысла хранить ваш строки или растровые изображения в активах, но можно хранить данные пользовательского формата как словари коррекции входного сигнала или игровая карта.
  7. Raw может дать вам проверку времени компиляции путем генерации вашего R.java напильник однако, если вы хотите скопировать базу в отдельный каталог можно использовать активы, которые сделаны для потоковой передачи.

вывод

  1. Android API включает в себя очень удобную структуру ресурсов, которая также оптимизирован для большинства типичных случаев использования для различных мобильных приложений. Вы должны освоить ресурсы и попытаться использовать их везде, где вероятный.
  2. однако, если вам нужна больше гибкости для вашего особого случая, то имущества есть ли у вас API более низкого уровня, который позволяет организовывать и обработка ваших ресурсов с большей степенью свободы.

Если вам нужно сослаться на них где-то в коде Java, вы бы поместили свои файлы в каталог "res".

и все файлы в папке res будут индексироваться в файле R, что делает его намного быстрее (и намного проще!) загружать их.


используйте активы, такие как файловая система, для сброса любых файлов. И используйте res для хранения того, для чего он сделан, макетов, изображений, значений.


Тед Хопп ответил на это довольно вежливо. Я использую res / raw для своих файлов текстуры и шейдеров opengl. Я думал о перемещении их в каталог активов, чтобы обеспечить иерархическую организацию.


активы обеспечивают способ включения произвольных файлов, таких как текст, xml, шрифты, музыка и видео в приложении. Если вы попытаетесь включить эти файлы в качестве" ресурсов", Android обработает их в свою систему ресурсов, и вы не сможете получить необработанные данные. Если вы хотите получить доступ к нетронутым данным, активы-один из способов сделать это.