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