Android, diğer platformlardaki disk tabanlı dosya sistemlerine benzer bir dosya sistemi kullanır. Sistem, uygulama verilerinizi kaydetmeniz için çeşitli seçenekler sunar:
- Uygulamaya özel depolama: Yalnızca uygulamanızın kullanımına yönelik dosyaları, dahili depolama birimindeki özel dizinlerde veya harici depolama alanındaki farklı özel dizinlerde depolayın. Diğer uygulamaların erişmemesi gereken hassas bilgileri kaydetmek için dahili depolama alanındaki dizinleri kullanın.
- Paylaşılan depolama alanı: Uygulamanızın diğer uygulamalarla paylaşmak istediği dosyaları (ör. medya, dokümanlar ve diğer dosyalar) depolayın.
- Tercihler: Gizli, temel verileri anahtar/değer çiftlerinde depolayın.
- Veritabanları: Yapılandırılmış verileri Oda kalıcılığı kitaplığını kullanarak özel bir veritabanında depolayın.
Bu seçeneklerin özellikleri aşağıdaki tabloda özetlenmiştir:
İçerik türü | Erişim yöntemi | İzin gerekli | Diğer uygulamalar erişebilir mi? | Uygulama kaldırıldığında dosyalar kaldırılsın mı? | |
---|---|---|---|---|---|
Uygulamaya özel dosyalar | Yalnızca uygulamanızın kullanımına yönelik dosyalar | Dahili depolamadan, getFilesDir() veya
getCacheDir() Harici depolamadan, getExternalFilesDir() veya
getExternalCacheDir() |
Dahili depolama için hiçbir zaman gerekmez Uygulamanız Android 4.4 (API düzeyi 19) veya sonraki sürümleri çalıştıran cihazlarda kullanıldığında harici depolama için gerekli değildir |
Hayır | Evet |
Medya | Paylaşılabilir medya dosyaları (resimler, ses dosyaları, videolar) | MediaStore API'si |
READ_EXTERNAL_STORAGE Android 11 (API düzeyi 30) veya sonraki bir sürümde diğer uygulamaların dosyalarına erişirkenAndroid 10 (API düzeyi 29) üzerinde diğer uygulamaların dosyalarına erişirken READ_EXTERNAL_STORAGE ya da WRITE_EXTERNAL_STORAGE Android 9 (API düzeyi 28) veya önceki sürümlerde tüm dosyalar için izinler gerekir |
Evet, ancak diğer uygulamanın READ_EXTERNAL_STORAGE iznine ihtiyacı var |
Hayır |
Belgeler ve diğer dosyalar | İndirilen dosyalar dahil olmak üzere diğer paylaşılabilir içerik türleri | Depolama Erişim Çerçevesi | Yok | Evet, sistem dosya seçiciden | Hayır |
Uygulama tercihleri | Anahtar/değer çiftleri | Jetpack Tercihleri kitaplığı | Yok | Hayır | Evet |
Veritabanı | Yapılandırılmış veri | Oda kalıcılık kitaplığı | Yok | Hayır | Evet |
Seçtiğiniz çözüm belirli ihtiyaçlarınıza bağlıdır:
- Verileriniz ne kadar alan gerektiriyor?
- Dahili depolama alanında uygulamaya özel veriler için sınırlı alan vardır. Önemli miktarda veri tasarrufu yapmanız gerekiyorsa diğer depolama alanı türlerini kullanın.
- Veri erişiminin ne kadar güvenilir olması gerekir?
- Uygulamanızın temel işlevi için belirli veriler (ör. uygulamanızın başlatılması) gerekiyorsa verileri dahili depolama dizinine veya veritabanına yerleştirin. Bazı cihazlar kullanıcıların harici depolamaya karşılık gelen fiziksel bir cihazı kaldırmasına izin verdiğinden, harici depolamada depolanan uygulamaya özel dosyalara her zaman erişilemez.
- Ne tür verileri depolamanız gerekiyor?
- Yalnızca uygulamanız için anlamlı olan verileriniz varsa uygulamaya özel depolama alanını kullanın. Paylaşılabilir medya içerikleri için, diğer uygulamaların içeriğe erişebilmesi için paylaşılan depolama alanını kullanın. Yapılandırılmış veriler için tercihler (anahtar/değer verileri için) veya veritabanı (2'den fazla sütun içeren veriler için) kullanın.
- Veriler, uygulamanızda gizli mi olmalı?
- Hassas verileri (başka hiçbir uygulamadan erişilmemesi gereken verileri) depolarken dahili depolama, tercihler veya veritabanı kullanın. Dahili depolamanın avantajı, verilerin kullanıcılardan gizlenmesidir.
Depolama konumu kategorileri
Android iki tür fiziksel depolama konumu sağlar: dahili depolama ve harici depolama. Çoğu cihazda dahili depolama, harici depolama alanından daha küçüktür. Ancak, dahili depolama her zaman tüm cihazlarda kullanılabilir. Bu nedenle, uygulamanızın bağlı olduğu verileri yerleştirmek için daha güvenilir bir yer haline gelir.
Çıkarılabilir birimler (ör. SD kart) dosya sisteminde harici depolamanın bir parçası olarak görünür. Android bu cihazları /sdcard
gibi bir yol kullanarak temsil eder.
Uygulamalar varsayılan olarak dahili depolama alanında depolanır. Ancak APK boyutunuz çok büyükse bunun yerine uygulamanızın manifest dosyasında uygulamanızı harici depolamaya yüklemeyi tercih edebilirsiniz:
<manifest ... android:installLocation="preferExternal"> ... </manifest>
İzinler ve harici depolama alanına erişim
Android, depolama alanıyla ilgili şu izinleri tanımlar: READ_EXTERNAL_STORAGE
, WRITE_EXTERNAL_STORAGE
ve MANAGE_EXTERNAL_STORAGE
.
Android'in önceki sürümlerinde, uygulamaların harici depolama alanındaki uygulamaya özel dizinler dışındaki herhangi bir dosyaya erişmek için READ_EXTERNAL_STORAGE
iznini beyan etmesi gerekiyordu.
Ayrıca uygulamaların, uygulamaya özel dizin dışındaki herhangi bir dosyaya yazması için WRITE_EXTERNAL_STORAGE
iznini bildirmesi gerekir.
Android'in son sürümleri, bir uygulamanın belirli bir dosyaya erişme ve dosyaya yazma yeteneğini belirlemek için konumundan çok dosyanın amacına dayanır. Özellikle, uygulamanız Android 11 (API düzeyi 30) veya sonraki bir sürümü hedefliyorsa WRITE_EXTERNAL_STORAGE
izninin uygulamanızın depolama alanına erişimi üzerinde herhangi bir etkisi olmaz. Bu amaca dayalı depolama modeli, uygulamalara yalnızca cihazın dosya sisteminde gerçekte kullandıkları alanlara erişim izni verildiğinden kullanıcı gizliliğini artırır.
Android 11'de, uygulamaya özel dizin ve MediaStore
dışındaki dosyalara yazma erişimi sağlayan MANAGE_EXTERNAL_STORAGE
izni kullanıma sunulmuştur. Bu izin ve çoğu uygulamanın, kullanım alanlarını karşılamak için bu izni neden beyan etmesi gerekmediği hakkında daha fazla bilgi edinmek için bir depolama cihazındaki tüm dosyaları yönetme ile ilgili kılavuzu inceleyin.
Kısıtlı depolama
Kullanıcılara dosyaları üzerinde daha fazla kontrol sağlamak ve dosya yığınını sınırlandırmak için Android 10 (API düzeyi 29) ve sonraki sürümleri hedefleyen uygulamalara varsayılan olarak harici depolama alanına veya kapsamlı depolama alanına kapsamlı erişim verilir. Bu tür uygulamalar, yalnızca harici depolama alanındaki uygulamaya özel dizine ve uygulamanın oluşturduğu belirli medya türlerine erişebilir.
Uygulamanızın, uygulamaya özel bir dizinin ve MediaStore
API'lerinin erişebildiği bir dizinin dışında depolanan bir dosyaya erişmesi gerekmiyorsa kapsamlı depolama alanını kullanın. Uygulamaya özel dosyaları harici depolamada depoluyorsanız bu dosyaları harici depolama alanındaki uygulamaya özel bir dizine yerleştirerek kapsamlı depolamayı benimsemeyi kolaylaştırabilirsiniz. Böylece, kapsamlı depolama etkinleştirildiğinde uygulamanız bu dosyalara erişmeye devam eder.
Uygulamanızı kapsamlı depolama alanına hazırlamak için depolama alanı kullanım alanları ve en iyi uygulamalar kılavuzunu inceleyin. Uygulamanızın kapsamlı depolama kapsamında olmayan başka bir kullanım alanı varsa özellik isteğinde bulunun. Kapsamlı depolama alanını geçici olarak devre dışı bırakabilirsiniz.
Cihazdaki dosyaları görüntüleme
Bir cihazda depolanan dosyaları görüntülemek için Android Studio'nun Cihaz Dosya Gezgini'ni kullanın.
Ek kaynaklar
Veri depolama hakkında daha fazla bilgi için aşağıdaki kaynaklara bakın.