Assets и Raw-ресурсы – это механизмы, которые позволяют добавить дополнительные файлы произвольного формата в Android-приложение.
Для использования Assets создается директория
src/main/assets. Эта директория может содержать произвольные файлы и поддиректории.
Для получения контента asset-файла используется метод
Context.getAssets(), который возвращает объект класса
AssetManager. Далее вызывается метод
AssetManager.open(), который принимает имя файла и возвращает
InputStream.
Если файла с заданным именем не существует, то метод
open() бросает
IOException.
Для использования Raw-ресурсов создается resource-директория
res/raw. Эта директория подчиняется тем же правилам, что и другие ресурсы. Она может иметь квалификаторы (например
-ru), в ней нельзя создавать вложенные директории, а имена файлов должны быть в нижнем регистре.
Во время компиляции для каждого raw-файла создается id в классе
R. Для файла
sound.mp3 будет создан id
R.raw.sound.
Для доступа к raw-ресурсу используется метод
Resources.openRawResource(), который принимает id ресурса и возвращает
InputStream.
Доступ к raw-ресурсам более эффективен и безопасен за счет статической генерации id. Также с помощью квалификаторов возможно использование разных файлов для различных конфигураций системы.
С другой стороны механизм Assets более гибкий, т.к. позволяет получать полное имя файла и создавать вложенные директории.