Android'de uygulama dosya yapısı — her şey nerede saklanır

Kerem Aydın·9 Temmuz 2026·⏱3 dk

Kısa bilgi: Kullanıcı APK'ları /data/app/ içinde, sistem APK'ları /system/app veya /system/priv-app içinde, uygulamanın özel verileri /data/user/0/ (veya /data/data/) içinde, harici uygulamaya özgü dosyalar ise /storage/emulated/0/Android/data// ve /Android/obb// içinde bulunur. Aşağıda pratik komutlar ve erişim kuralları yer almaktadır.

APK'lar ve sistem uygulamaları nerede bulunur

  • Kullanıcı tarafından yüklenen APK'lar: /data/app/-*/base.apk (AAB durumunda ek olarak split-APK'lar). /data/app dizinine genellikle root yetkisi olmadan erişim kapalıdır, ancak yol öğrenilip APK ADB üzerinden çıkarılabilir.
  • Sistem APK'ları: /system/app/ ve /system/priv-app/ — sistem bölümünde bulunur (root olmadan salt okunur), ayrıcalıklı uygulamalar priv-app içindedir. Sistem uygulamalarının güncellemeleri genellikle /data/app içine overlay olarak kurulur. ADB örnekleri:
  • APK yolunu öğrenme: adb shell pm path com.example.app
  • Kopyalama: adb shell cp /data/app/.../base.apk /sdcard/; adb pull /sdcard/base.apk

Uygulama Android App Bundle (AAB) üzerinden kurulduysa, cihazda tek bir .apk yerine birden fazla APK (base + split) bulunacaktır.

Önbellek ve optimize edilmiş kod (ART, odex, vdex)

  • Çalışma zamanı optimize edilmiş ikili dosyalar (oat/odex/vdex) /data/app/.../oat// içinde APK'nın yanında veya genel önbellek /data/dalvik-cache/ içinde bulunabilir. Bu dosyalar ART tarafından başlatma hızını artırmak için oluşturulur.
  • Uygulamanın dahili önbelleği vardır: /data/user/0//cache (veya /data/data//cache). Kod için API'de getCodeCacheDir() mevcuttur.

oat/odex/vdex dosyalarını elle düzenlemek uygulamayı çalışmaz hale getirebilir. Bu dosyaları tam bir anlayışa sahip olmadan silmeyin veya düzenlemeyin.

Uygulama verileri: internal (özel) ve external (Android/data, OBB)

  • Özel veriler (sandbox): /data/user/0// — alt dizinler files/, databases/, shared_prefs/, cache/, no_backup/. Erişime yalnızca uygulama süreci, root veya debuggable uygulamalar için run-as sahiptir.
  • Harici uygulamaya özgü: /storage/emulated/0/Android/data// ve /storage/emulated/0/Android/obb//. Bu dizinlere uygulama erişebilir ve genellikle uygulama silindiğinde bunlar da silinir, ancak Android 10+ itibarıyla diğer uygulamaların bu dizinlere erişimi kısıtlanmıştır (Kapsamlı Depolama). Temel yollar ve erişim tablosu
YolİçerikRoot olmadan erişim
/system/app, /system/priv-appÖnceden yüklenmiş APK'larHayır (root olmadan salt okunur)
/data/app/.../base.apk (+ split)Yüklenmiş APK'larEvet — pm path + adb pull ile
/data/user/0/<pkg>/files, databases, shared_prefs, cacheYalnızca uygulama / run-as (debuggable ise)
/storage/emulated/0/Android/data/<pkg>/Uygulamaya özgü harici dosyalarKapsamlı Depolama ile sınırlı erişim

Dosyalara erişim: root olmadan neler yapılabilir, root ile neler, alternatifler

  • Root olmadan:
    • adb shell pm path — APK yolunu öğrenip ardından /sdcard üzerinden kopyalama.
    • adb shell run-as — uygulama kimliğiyle çalışma (yalnızca debuggable derlemeler için): /data/data/ içindeki dosyaları ls/cp ile listeleme/kopyalama.
    • Verileri yasal şekilde dışa aktarmak için Backup API, FileProvider, MediaStore veya Storage Access Framework kullanma.
  • Root ile: Tüm bölümlere (/data, /system vb.) tam erişim, özel dosyalar kopyalanabilir ancak bu güvenli değildir ve garantiyi bozabilir.

Uygulama dosyalarını analiz etmek için AVD emülatörünü güvenle kullanın — çoğu zaman root ve /data erişimi sunar, ana cihazınıza zarar verme riski yoktur.

Sık yapılan hatalar

  • Root olmadan /data dizininde ls çalıştırmaya çalışmak — Permission denied hatası alırsınız. pm path veya run-as (debuggable için) kullanın.
  • Ana cihazda /system veya /data içindeki dosyaları elle değiştirmek — önyükleme veya veri kaybına neden olabilir.
  • AAB durumunda tek bir base.apk beklemek — aslında birkaç split-apk bulunur.

SSS

  • Root olmadan APK nasıl çıkarılır? — adb shell pm path ; ardından /sdcard/base.apk içine kopyalanan dosyayı adb pull ile çekin.
  • SharedPreferences nerede? — /data/user/0//shared_prefs/*.xml (erişim yalnızca uygulama/root/run-as ile).
  • OBB nerede? — /storage/emulated/0/Android/obb//main.<sürüm>..obb; uygulama içinde Context.getObbDir() ile elde edilebilir.

Gerekirse, paketiniz ve Android sürümünüz için belirli bir ADB komut seti (APK çıkarma, veritabanı yedekleme, shared_prefs görüntüleme) hazırlayabilirim — paket adını ve root/root olmayan durumunu belirtin.