Разница между каталогами /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.
Ниже приведены некоторые ключевые моменты :
- Raw-файлы должны иметь имена, которые являются допустимыми идентификаторами Java, тогда как файлы в активах не имеют ограничений по местоположению и имени. В других слова они могут быть сгруппированы в любые каталоги, которые мы хотим
- Raw-файлы легко ссылаться на Java, а также из xml (i.e вы можете ссылаться на файл в raw из манифеста или другого xml-файла).
- сохранение файлов активов здесь, а не только в каталоге assets / отличается способ доступа к ним, как описано здесь http://developer.android.com/tools/projects/index.html.
- ресурсы, определенные в проекте библиотеки, автоматически импортируются в проекты приложений, зависящие от библиотеки. Для активов, что не происходит; файлы активов должны присутствовать в каталоге assets проекта (ов) приложения
- каталог активов больше похож на файловую систему, обеспечивающую большую свободу чтобы положить туда любой файл, который вы хотите. Вы потом можете открыть каждый из файлы в этой системе, как и при доступе к любому файлу в любом файловой системе через Java . как файлы игровых данных, шрифты, текстуры так далее.
- В отличие от ресурсов, активы могут быть организованы в папки в каталог активов однако единственное, что вы можете сделать с активом, это получить входной поток. Таким образом, не имеет большого смысла хранить ваш строки или растровые изображения в активах, но можно хранить данные пользовательского формата как словари коррекции входного сигнала или игровая карта.
- Raw может дать вам проверку времени компиляции путем генерации вашего R.java напильник однако, если вы хотите скопировать базу в отдельный каталог можно использовать активы, которые сделаны для потоковой передачи.
вывод
- Android API включает в себя очень удобную структуру ресурсов, которая также оптимизирован для большинства типичных случаев использования для различных мобильных приложений. Вы должны освоить ресурсы и попытаться использовать их везде, где вероятный.
- однако, если вам нужна больше гибкости для вашего особого случая, то имущества есть ли у вас API более низкого уровня, который позволяет организовывать и обработка ваших ресурсов с большей степенью свободы.
Если вам нужно сослаться на них где-то в коде Java, вы бы поместили свои файлы в каталог "res".
и все файлы в папке res будут индексироваться в файле R, что делает его намного быстрее (и намного проще!) загружать их.
используйте активы, такие как файловая система, для сброса любых файлов. И используйте res для хранения того, для чего он сделан, макетов, изображений, значений.
Тед Хопп ответил на это довольно вежливо. Я использую res / raw для своих файлов текстуры и шейдеров opengl. Я думал о перемещении их в каталог активов, чтобы обеспечить иерархическую организацию.
активы обеспечивают способ включения произвольных файлов, таких как текст, xml, шрифты, музыка и видео в приложении. Если вы попытаетесь включить эти файлы в качестве" ресурсов", Android обработает их в свою систему ресурсов, и вы не сможете получить необработанные данные. Если вы хотите получить доступ к нетронутым данным, активы-один из способов сделать это.