Ответы:
С ресурсами есть встроенная поддержка для предоставления альтернатив для разных языков, версий ОС, ориентации экрана и т. Д., Как описано здесь . Ничего из этого не доступно с активами. Кроме того, многие части API поддерживают использование идентификаторов ресурсов. Наконец, имена ресурсов превращаются в постоянные имена полей, которые проверяются во время компиляции, поэтому меньше возможностей для несоответствий между кодом и самими ресурсами. Ничто из этого не относится к активам.
Так зачем вообще иметь папку с активами? Если вы хотите вычислить актив, который хотите использовать во время выполнения, это довольно просто. При использовании ресурсов вам придется объявить список всех идентификаторов ресурсов, которые могут быть использованы, и вычислить индекс в списке. (Это довольно неудобно и создает возможности для ошибок, если набор ресурсов изменяется в цикле разработки.) (РЕДАКТИРОВАТЬ: вы можете получить идентификатор ресурса по имени, используя getIdentifier
, но это теряет преимущества проверки во время компиляции.) Ресурсы могут также может быть организован в иерархию папок, которая не поддерживается ресурсами. Это другой способ управления данными. Хотя ресурсы покрывают большую часть случаев, активы время от времени используются.
Еще одно отличие: ресурсы, определенные в проекте библиотеки, автоматически импортируются в проекты приложений, которые зависят от библиотеки. Для активов этого не происходит; файлы ресурсов должны присутствовать в каталоге ресурсов проекта (ов) приложения. [РЕДАКТИРОВАТЬ: с новой системой сборки на базе Gradle Android (используется с Android Studio), это больше не так. Каталоги активов для библиотечных проектов упакованы в файлы .aar, поэтому активы, определенные в библиотечных проектах, объединяются в проекты приложений (поэтому они не обязательно должны присутствовать в /assets
каталоге приложения, если они находятся в ссылочной библиотеке).]
РЕДАКТИРОВАТЬ: еще одно различие возникает, если вы хотите, чтобы пакет собственного шрифта с вашим приложением. Есть вызовы API для создания Typeface
файла шрифта, хранящегося в файловой системе или в каталоге вашего приложения assets/
. Но нет API для создания Typeface
из файла шрифта, хранящегося в res/
каталоге (или из InputStream
, который позволил бы использовать res/
каталог). [ ПРИМЕЧАНИЕ: с Android O (теперь доступен в альфа-превью) вы сможете включать пользовательские шрифты в качестве ресурсов. Смотрите описание здесь этой давно просроченной функции. Однако, пока ваш минимальный уровень API составляет 25 или менее, вам придется придерживаться упаковки пользовательских шрифтов как ресурсов, а не ресурсов.]
raw/
каталог?
/res
каталогах и '/ assets' доступно только для чтения, поскольку они упакованы в файл .apk.
Оба очень похожи. Реальное основное различие между ними заключается в том, что в res
каталоге каждый файл имеет предварительно скомпилированный файл, к ID
которому можно легко получить доступ R.id.[res id]
. Это полезно для быстрого и удобного доступа к изображениям, звукам, значкам ...
assets
Каталог больше похожа на файловую систему и обеспечивает большую свободу , чтобы поместить любой файл , который вы хотели бы там. Затем вы можете получить доступ к каждому из файлов в этой системе, как если бы вы обращались к любому файлу в любой файловой системе через Java. Этот каталог хорош для таких вещей, как детали игры, словари и т. Д. Надеюсь, это поможет.
Assets
папку, система Android теперь содержит fonts
каталог, и мы можем поместить туда файл пользовательских шрифтов, или мы можем загрузить его для Android Studio.
Я знаю, что это старый, но просто чтобы прояснить, есть объяснение каждого в официальной документации Android:
от http://developer.android.com/tools/projects/index.html
assets/
Это пусто. Вы можете использовать его для хранения необработанных файлов активов. Файлы, которые вы сохраняете здесь, скомпилированы в файл .apk как есть, и исходное имя файла сохраняется. Вы можете перемещаться по этому каталогу так же, как и в обычной файловой системе, используя URI, и читать файлы как поток байтов, используя AssetManager. Например, это хорошее место для текстур и игровых данных.
res/raw/
Для произвольных необработанных файлов активов. Сохранение файлов активов здесь, а не в каталоге assets /, зависит только от способа доступа к ним. Эти файлы обрабатываются aapt и на них нужно ссылаться из приложения, используя идентификатор ресурса в классе R. Например, это хорошее место для носителей, таких как файлы MP3 или Ogg.
Ниже приведены некоторые ключевые моменты:
Вывод
Если вам нужно сослаться на них где-нибудь в Java-коде, вы, скорее всего, поместите ваши файлы в каталог res.
И все файлы в папке res будут проиндексированы в файле R, что значительно ускоряет (и значительно упрощает) их загрузку.
Тед Хопп ответил на это довольно хорошо. Я использовал res / raw для моих текстур opengl и файлов шейдеров. Я думал о перемещении их в каталог активов, чтобы обеспечить иерархическую организацию.
Эта тема убедила меня не делать этого. Во-первых, потому что мне нравится использование уникального идентификатора ресурса. Во-вторых, потому что очень просто использовать InputStream / openRawResource или BitmapFactory для чтения в файле. В-третьих, потому что очень полезно иметь возможность использовать в переносимой библиотеке.
Активы предоставляют возможность включать в ваше приложение произвольные файлы, такие как текст, xml, шрифты, музыку и видео. Если вы попытаетесь включить эти файлы в качестве «ресурсов», Android обработает их в своей системе ресурсов, и вы не сможете получить необработанные данные. Если вы хотите получить доступ к данным нетронутым, один из способов сделать это - актив.
res/raw
, вы можете получить необработанные данные, используя openRawResource(resourceName)
.
res
означает ресурсы, то чтоassets
означает ??