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ı için oluşturulmuş 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: Medya, dokümanlar ve diğer dosyalar da dahil olmak üzere uygulamanızın diğer uygulamalarla paylaşmayı amaçladığı dosyaları depolayın.
- Tercihler: Özel, temel verileri anahtar/değer çiftlerinde depolayın.
- Veritabanları: Oda kalıcılığı kitaplığını kullanarak yapılandırılmış verileri ö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'sı |
READ_EXTERNAL_STORAGE Android 11 (API düzeyi 30) veya sonraki sürümlerde 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 veya WRITE_EXTERNAL_STORAGE Android 9 (API düzeyi 28) veya önceki sürümlerde tüm dosyalar için izin gereklidir |
Evet, ancak diğer uygulamanın READ_EXTERNAL_STORAGE iznine ihtiyacı var |
Hayır |
Belgeler ve diğer dosyalar | İndirilen dosyalar dahil olmak üzere paylaşılabilir diğer içerik türleri | Depolama Erişim Çerçevesi | Yok | Evet, sistem dosya seçicisini kullanarak | 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 bulunur. Önemli miktarda veriden tasarruf etmeniz gerekiyorsa diğer depolama türlerini kullanın.
- Veri erişiminin ne kadar güvenilir olması gerekiyor?
- Uygulamanızın temel işlevi için belirli veriler (ör. başlatılırken) gerekiyorsa verileri dahili depolama dizinine veya bir 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 söz konusu olduğunda, diğer uygulamaların içeriğe erişebilmesi için paylaşılan depolama alanını kullanın. Yapılandırılmış verilerde tercihler (anahtar/değer verileri için) veya bir veritabanı (2'den fazla sütun içeren veriler için) kullanın.
- Veriler uygulamanıza özel mi olmalı?
- Hassas verileri (başka hiçbir uygulamadan erişilmemesi gereken verileri) depolarken dahili depolama alanı, tercihler veya veritabanını kullanın. Dahili depolama, verilerin kullanıcılardan gizlenmesi gibi ek bir avantaj da sunar.
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. Bununla birlikte, dahili depolama her zaman tüm cihazlarda kullanılabilir. Bu nedenle, uygulamanızın bağlı olduğu verileri koymak için daha güvenilir bir yer sunar.
Çı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 depolamada depolanır. Bununla birlikte, APK'nızın boyutu çok büyükse, uygulamanızın manifest dosyasında, bunun yerine uygulamanızı harici bir depolama alanına yükleme tercihini belirtebilirsiniz:
<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 depolamadaki 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 beyan etmesi de gerekiyordu.
Android'in son sürümleri, bir uygulamanın belirli bir dosyaya erişme ve dosyaya yazma özelliğini belirleme konusunda, dosyanın konumundan daha çok dosyanın amacına dayanır. Özellikle, uygulamanız Android 11 (API düzeyi 30) veya sonraki sürümleri 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 bulunan gerçekten 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 sunuldu. Bu izin ve çoğu uygulamanın, kullanım alanlarını karşılamak için neden bu izni 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.
Kapsamlı depolama alanı
Kullanıcılara dosyaları üzerinde daha fazla kontrol imkanı vermek ve dosya dağınıklığını sınırlamak için Android 10 (API düzeyi 29) ve üst sürümlerini hedefleyen uygulamalara varsayılan olarak harici depolamaya veya kapsamlı depolamaya kapsamlı erişim verilir. Bu tür uygulamaların, yalnızca harici depolama alanındaki uygulamaya özel dizine ve uygulamanın oluşturduğu belirli medya türlerine erişimi vardır.
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ı depolamayı kullanın. Uygulamaya özel dosyaları harici depolamada depoluyorsanız bu dosyaları harici depolama alanında uygulamaya özel bir dizine yerleştirerek kapsamlı depolamayı benimsemeyi kolaylaştırabilirsiniz. Bu şekilde, 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 görüntüleyin. Uygulamanızın, kapsamlı depolama kapsamında olmayan başka bir kullanım alanı varsa özellik isteğinde bulunun. Kapsamlı depolama alanı kullanımını geçici olarak devre dışı bırakabilirsiniz.
Bir 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.