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 saklayı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şmayı amaçladığı dosyaları (medya, dokümanlar ve diğer dosyalar dahil) depolayın.
- Tercihler: Özel, temel verileri anahtar/değer çiftleri halinde saklayın.
- Veritabanları: Yapılandırılmış verileri Room kalıcılık kitaplığını kullanarak özel bir veritabanında saklayı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 da kaldırılır 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 alanı için hiçbir zaman gerekmez Uygulamanız Android 4.4 (API düzeyi 19) veya sonraki sürümlerin yüklü olduğu cihazlarda kullanıldığında harici depolama alanı için gerekmez. |
Hayır | Evet |
Medya | Paylaşılabilir medya dosyaları (resimler, ses dosyaları, videolar) | MediaStore API |
READ_EXTERNAL_STORAGE Android 11 (API düzeyi 30) veya sonraki sürümlerdeki diğer uygulamaların dosyalarına erişirkenREAD_EXTERNAL_STORAGE veya WRITE_EXTERNAL_STORAGE
Android 10'da (API düzeyi 29) diğer uygulamaların dosyalarına erişirkenAndroid 9'da (API düzeyi 28) veya önceki sürümlerdeki tüm dosyalar için izinler gerekir. |
Evet, ancak diğer uygulamanın READ_EXTERNAL_STORAGE izni olması gerekir. |
Hayır |
Dokümanlar ve diğer dosyalar | İndirilen dosyalar da dahil olmak üzere, paylaşılabilir diğer içerik türleri | Depolama Erişimi Çerçevesi | Yok | Evet, sistem dosya seçicisi aracılığıyla | Hayır |
Uygulama tercihleri | Anahtar/değer çiftleri | Jetpack Preferences kitaplığı | Yok | Hayır | Evet |
Veritabanı | Yapılandırılmış veri | Room kalıcılık kitaplığı | Yok | Hayır | Evet |
Seçeceğiniz çözüm, özel 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 kaydetmeniz gerekiyorsa diğer depolama türlerini kullanın.
- Veri erişimi ne kadar güvenilir olmalıdır?
- Uygulamanızın temel işlevi için belirli veriler gerekiyorsa (ör. uygulamanız başlatılırken) verileri dahili depolama dizinine veya bir veritabanına yerleştirin. Harici depolama alanında saklanan uygulamaya özel dosyalara her zaman erişilemez. Bunun nedeni, bazı cihazların kullanıcıların harici depolamaya karşılık gelen fiziksel bir cihazı kaldırmasına izin vermesidir.
- 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 amacıyla Shared Storage'ı 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ız için özel mi olmalı?
- Başka bir uygulamadan erişilmemesi gereken hassas verileri depolarken dahili depolama, tercihler veya veritabanı kullanın. Dahili depolama alanı, verilerin kullanıcılardan gizlenmesi gibi ek bir avantaj sunar.
Depolama konumlarının kategorileri
Android, iki tür fiziksel depolama konumu sağlar: dahili depolama ve harici depolama. Çoğu cihazda dahili depolama alanı, harici depolama alanından daha küçüktür. Ancak dahili depolama alanı 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 yerdir.
SD kart gibi çıkarılabilir birimler, dosya sisteminde harici depolama alanının bir parçası olarak görünür. Android, bu cihazları /sdcard
gibi bir yolla temsil eder.
Uygulamalar varsayılan olarak dahili depolama alanında saklanır. Ancak APK'nızın boyutu çok büyükse uygulamanızın manifest dosyasında, uygulamanızın harici depolama alanına yüklenmesiyle ilgili bir tercih belirtebilirsiniz:
<manifest ... android:installLocation="preferExternal"> ... </manifest>
Harici depolama alanına erişim ve izinler
Android, depolamayla ilgili aşağıdaki izinleri tanımlar:
READ_EXTERNAL_STORAGE
,
WRITE_EXTERNAL_STORAGE
,
ve
MANAGE_EXTERNAL_STORAGE
.
Android'in önceki sürümlerinde uygulamaların, harici depolamadaki uygulamaya özel dizinler dışındaki dosyalara erişmek için READ_EXTERNAL_STORAGE
iznini bildirmesi gerekiyordu.
Ayrıca uygulamaların, uygulamaya özel dizinin dışındaki herhangi bir dosyaya yazmak için WRITE_EXTERNAL_STORAGE
iznini bildirmesi gerekiyordu.
Android'in daha yeni sürümlerinde, bir uygulamanın belirli bir dosyaya erişme ve dosyaya yazma özelliğini belirlemek için dosyanın konumundan ziyade amacına daha fazla güvenilir. Özellikle uygulamanız Android 11'i (API düzeyi 30) veya sonraki sürümleri hedefliyorsa WRITE_EXTERNAL_STORAGE
izni, uygulamanızın depolama alanına erişimini etkilemez. Bu amaca dayalı depolama modeli, uygulamalara yalnızca cihazın dosya sisteminin gerçekten kullandıkları alanlarına erişim izni verildiğinden kullanıcı gizliliğini artırır.
Android 11, uygulamaya özel dizinin dışındaki dosyalara yazma erişimi sağlayan MANAGE_EXTERNAL_STORAGE
iznini kullanıma sunar ve MediaStore
. Bu izin ve çoğu uygulamanın kullanım alanlarını karşılamak için neden bu izni bildirmesi gerekmediği hakkında daha fazla bilgi edinmek için depolama cihazındaki tüm dosyaları yönetme hakkındaki kılavuza bakın.
Kısıtlı depolama
Kullanıcılara dosyaları üzerinde daha fazla kontrol olanağı sunmak ve dosya karmaşasını sınırlamak için Android 10'u (API düzeyi 29) ve sonraki sürümleri hedefleyen uygulamalara varsayılan olarak harici depolama alanına kısıtlı erişim (kısıtlı depolama) verilir. Bu tür uygulamalar, harici depolama alanındaki uygulamaya özel dizinin yanı sıra uygulamanın oluşturduğu belirli medya türlerine erişebilir.
Uygulamanızın, uygulamaya özel bir dizinin dışında ve MediaStore
API'lerinin erişebileceği bir dizinin dışında depolanan bir dosyaya erişmesi gerekmiyorsa kısıtlı depolamayı kullanın. Uygulamaya özel dosyaları harici depolama alanında saklıyorsanız bu dosyaları harici depolama alanında uygulamaya özel bir dizine yerleştirerek kısıtlı depolamayı daha kolay kullanabilirsiniz. Bu sayede, kapsamlı depolama etkinleştirildiğinde uygulamanız bu dosyalara erişmeye devam eder.
Uygulamanızı kapsamlı depolamaya hazırlamak için depolama alanı kullanım alanları ve en iyi uygulamalar kılavuzunu inceleyin. Uygulamanızın, kapsamlı depolama tarafından kapsanmayan başka bir kullanım alanı varsa özellik isteğinde bulunun. Kapsamlı depolama alanını kullanmayı 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 Device File Explorer'ını kullanın.
Ek kaynaklar
Veri depolama hakkında daha fazla bilgi için aşağıdaki kaynaklara bakın.