Dengan sumber daya, ada dukungan bawaan untuk menyediakan alternatif untuk berbagai bahasa, versi OS, orientasi layar, dll., Seperti dijelaskan di sini . Tidak ada yang tersedia dengan aset. Juga, banyak bagian API mendukung penggunaan pengidentifikasi sumber daya. Akhirnya, nama sumber daya diubah menjadi nama bidang konstan yang diperiksa pada waktu kompilasi, jadi ada sedikit kesempatan untuk ketidaksesuaian antara kode dan sumber daya itu sendiri. Tidak ada yang berlaku untuk aset.
Jadi mengapa memiliki folder aset sama sekali? Jika Anda ingin menghitung aset yang ingin Anda gunakan pada saat run time, itu cukup mudah. Dengan sumber daya, Anda harus mendeklarasikan daftar semua ID sumber daya yang dapat digunakan dan menghitung indeks ke dalam daftar. (Ini agak canggung dan memperkenalkan peluang untuk kesalahan jika rangkaian sumber daya berubah dalam siklus pengembangan.) (EDIT: Anda dapat mengambil ID sumber daya dengan menggunakan nama getIdentifier
, tetapi ini kehilangan manfaat dari pengecekan waktu kompilasi.) Aset dapat juga dapat diatur ke dalam hierarki folder, yang tidak didukung oleh sumber daya. Ini cara berbeda dalam mengelola data. Meskipun sumber daya mencakup sebagian besar kasus, aset memiliki penggunaan sesekali.
Satu perbedaan lain: sumber daya yang ditentukan dalam proyek perpustakaan secara otomatis diimpor ke proyek aplikasi yang bergantung pada perpustakaan. Untuk aset, itu tidak terjadi; file aset harus ada di direktori aset proyek aplikasi. [EDIT: Dengan sistem build baru Android berbasis Gradle (digunakan dengan Android Studio), ini tidak lagi benar. Direktori aset untuk proyek perpustakaan dikemas ke dalam file .aar, sehingga aset yang didefinisikan dalam proyek perpustakaan digabungkan ke dalam proyek aplikasi (jadi mereka tidak harus ada di /assets
direktori aplikasi jika mereka berada di perpustakaan yang direferensikan).]
EDIT: Namun perbedaan lain muncul jika Anda ingin mengemas font khusus dengan aplikasi Anda. Ada panggilan API untuk membuat Typeface
dari file font yang disimpan di sistem file atau di assets/
direktori aplikasi Anda . Tetapi tidak ada API untuk membuat Typeface
dari file font yang disimpan dalam res/
direktori (atau dari InputStream
, yang akan memungkinkan penggunaan res/
direktori). [ CATATAN: Dengan Android O (sekarang tersedia dalam pratinjau alfa) Anda akan dapat menyertakan font khusus sebagai sumber. Lihat deskripsi di sini tentang fitur yang telah lama tertunda ini. Namun, selama level API minimum Anda adalah 25 atau kurang, Anda harus tetap menggunakan font kustom sebagai aset alih-alih sebagai sumber daya.]
res
singkatan sumber daya, lalu apa artinyaassets
singkatan ??raw/
direktori?/res
direktori dan / aset 'adalah read-only, karena mereka dikemas dalam file .apk.Keduanya sangat mirip. Perbedaan utama sebenarnya antara keduanya adalah bahwa dalam
res
direktori setiap file diberikan pra-kompilasiID
yang dapat diakses dengan mudahR.id.[res id]
. Ini berguna untuk mengakses gambar, suara, ikon dengan cepat dan mudah ...The
assets
direktori lebih seperti filesystem dan menyediakan lebih banyak kebebasan untuk menempatkan file yang Anda ingin di sana. Anda kemudian dapat mengakses setiap file dalam sistem itu seperti yang Anda lakukan ketika mengakses file apa pun di sistem file apa pun melalui Java. Direktori ini baik untuk hal-hal seperti detail game, kamus, ... dll. Semoga itu bisa membantu.sumber
Assets
folder, sistem Android sekarang berisifonts
direktori dan kita dapat meletakkan file font kustom kita di sana atau kita dapat memiliki Android studio mengunduhnya untuk kita.Saya tahu ini sudah tua, tetapi hanya untuk memperjelas, ada penjelasan masing-masing di dokumentasi android resmi:
dari http://developer.android.com/tools/projects/index.html
assets/
Ini kosong Anda dapat menggunakannya untuk menyimpan file aset mentah. File yang Anda simpan di sini dikompilasi menjadi file .apk apa adanya, dan nama file asli dipertahankan. Anda dapat menavigasi direktori ini dengan cara yang sama seperti sistem file khas menggunakan URI dan membaca file sebagai aliran byte menggunakan AssetManager. Sebagai contoh, ini adalah lokasi yang bagus untuk tekstur dan data game.
res/raw/
Untuk file aset mentah yang berubah-ubah. Menyimpan file aset di sini dan bukan di direktori aset / hanya berbeda dalam cara Anda mengaksesnya. File-file ini diproses oleh aapt dan harus dirujuk dari aplikasi menggunakan pengenal sumber daya di kelas R. Misalnya, ini adalah tempat yang baik untuk media, seperti file MP3 atau Ogg.
sumber
Berikut ini adalah beberapa poin utama:
Kesimpulan
sumber
Jika Anda perlu merujuk mereka di suatu tempat di Kode Java, Anda sebaiknya meletakkan file Anda ke direktori "res".
Dan semua file dalam folder res akan diindeks dalam file R, yang membuatnya lebih cepat (dan lebih mudah!) Untuk memuatnya.
sumber
Gunakan aset seperti sistem file untuk membuang semua jenis file. Dan gunakan res untuk menyimpan apa yang dibuat, tata letak, gambar, nilai.
sumber
Ted Hopp menjawab ini dengan cukup baik. Saya telah menggunakan res / raw untuk tekstur terbuka dan file shader saya. Saya sedang berpikir tentang memindahkan mereka ke direktori aset untuk menyediakan organisasi hierarkis.
Utas ini meyakinkan saya untuk tidak melakukannya. Pertama, karena saya suka menggunakan id sumber daya yang unik. Kedua karena sangat mudah menggunakan InputStream / openRawResource atau BitmapFactory untuk membaca dalam file. Ketiga karena sangat berguna untuk dapat digunakan di perpustakaan portabel.
sumber
Aset menyediakan cara untuk memasukkan file sewenang-wenang seperti teks, xml, font, musik, dan video dalam aplikasi Anda. Jika Anda mencoba memasukkan file-file ini sebagai "sumber daya", Android akan memprosesnya menjadi sistem sumber dayanya dan Anda tidak akan bisa mendapatkan data mentah. Jika Anda ingin mengakses data yang tidak tersentuh, Aset adalah salah satu cara untuk melakukannya.
sumber
res/raw
, Anda bisa mendapatkan data mentah menggunakanopenRawResource(resourceName)
.