В чем разница между Assets и Raw-ресурсами?

Посмотреть в Telegram: @AndroidSobes/213
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 более гибкий, т.к. позволяет получать полное имя файла и создавать вложенные директории.