Varlıkları Android'de ham kaynakların aksine ne zaman kullanmalıyım?


151

Android çalışmalarımın ortasındayım ve sadece Varlıklar ve Ham kaynakları ele aldım. Ham kaynakları ve Varlıklar'ı kullanmanın nedenini anlamaya çalışıyorum.

  1. Her ikisi de derlenmemiş bir kaynak girdi akışı sağlar.

  2. Varlıklar Ham kaynaklardan çok daha fazla esneklik ve işlevsellik sağlıyor gibi görünüyor.

    a. Altında assetsancak altında olmayan klasör yapıları oluşturabilirsinizraw

    b. Tüm kaynakları assetsklasörde dinamik olarak listeleyebilirsiniz, ancak klasörde listeleyemezsiniz raw.

Peki, Android'de Raw kaynaklarını neden kullanayım?


Yanıtlar:


182

rawKlasör ve klasör arasındaki temel farklar assets.

  • Raw, Kaynakların (res) bir alt klasörü olduğundan, Android, IDiçindeki herhangi bir dosya için otomatik olarak bir tane oluşturur . Bu IDdaha sonra R classbir dosyaya referans görevi görecek şekilde saklanır , yani diğer Android sınıflarından ve yöntemlerinden ve hatta Android XML dosyalarından kolayca erişilebilir. Otomatik olarak oluşturulan kimliği kullanmak, Android'deki bir dosyaya erişmenin en hızlı yoludur.

  • assetsKlasörü bir olup “apandis” dizin. R sınıfı kimlikleri oluşturmaz Bazı Android sınıflar ve yöntemleri ile daha az uyumlu orada yerleştirilen dosyalar için. assetsKlasöre dosya erişimi daha yavaştır, çünkü bir String'e dayalı olarak bir tanıtıcı almanız gerekir . Ancak, bir veritabanı dosyasını sistemin belleğine kopyalamak gibi dosyaları bu klasöre yerleştirerek bazı işlemleri daha kolay yapabilirsiniz. Varlıklar klasöründeki dosyalara Android XML başvurusu oluşturmanın (kolay) bir yolu yoktur.


4
@ user370305 Merhaba, şu an yeni Android işletim sistemi için 1MB sınırlaması var mı? Bununla ilgili herhangi bir belge bulamıyorum. Nerede bulabileceğim hakkında bir fikrin var mı?
GMsoF


2
@GMsoF - Dosya boyutunu /assetdizinde 1 mb'den daha büyük koymak için birçok püf noktası var .
user370305

10
hiç varlıklar klasörü için dosya boyutu kısıtlaması yoktu. böyle bir şey olduğundan emin misin?
android geliştirici

2
Evet, Android 2.2 veya 2.3'ten önce, sıkıştırılmamış boyutu 1 MB'ın üzerinde olan herhangi bir sıkıştırılmış varlık dosyası APK'dan okunamaz. Burada adı geçen
gruplar

33

Gönderen Android belgeler , raw/dizin için kullanılır:

Ham formlarında kaydetmek için keyfi dosyalar. Bir çiğ ile bu kaynakları açmak için InputStream , çağrı Resources.openRawResource () olan kaynak kimliği ile R.raw.filename .

Ancak, orijinal dosya adlarına ve dosya hiyerarşisine erişmeniz gerekiyorsa, bazı kaynakları assets/dizine kaydetmeyi düşünebilirsiniz (res / raw / yerine) . Varlıklardaki / dosyalarına bir kaynak kimliği verilmez, böylece bunları yalnızca AssetManager kullanarak okuyabilirsiniz .


Bir satırda, raw/dizindeki dosyalara platform tarafından derlenmez , bir kaynak kimliği atanır ve alt klasörlere gruplandırılamaz , aksi halde assets/dizini kullanır .


1
Büyük bir dosyayı depolama klasörüne kopyalamak istiyorsanız ham dosyalar en iyi seçenek midir?
canlı aşk

@ 40-Love Önceki sürümleri desteklemediğiniz sürece Android 2.3 ve üstü için dosya boyutu konusunda herhangi bir kısıtlama yoktur . Gereksiniminize bağlı olarak herhangi bir depolama klasörü seçebilirsiniz. Önemli bir ayrım, bu dosyalara erişilme şeklidir.
Prens

1

Yukarıda verilen cevaplara ekleniyor ...

/ res / dizeleri, / res / düzen, / res / xml dosyaları vb tüm ikili biçimde derlenir. Ancak, XML dosyaları da dahil olmak üzere dosyaları / res / raw / dizinine yerleştirirseniz, ikili biçimde derlenmezler.

Varlıkları ham kaynaklar üzerinde kullanmanın en büyük avantajlarından biri file:///android_asset/ Uri önekidir. Bu, bir varlığı WebView'e yüklemek için kullanışlıdır. Örneğin, projenizdeki varlıklar / foo / index.html dosyasında bulunan bir öğeye erişmek için loadUrl("file:///android_asset/foo/index.html")bu HTML'yi WebView'e yüklemeyi çağırabilirsiniz .


file:///android_res/Ham kaynağı işaret etmek için önek kullanabilirsiniz .
androidguy
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.