Android OSは基本的にLinuxですが、ファイル構造はどうなっているのでしょうか
端末にによって実装が違うために特にアプリ開発ではExternal Storageの場所が違うことが多々有ります。
Device Explorer と adbコマンドで入って中を(上っ面だけですが)覗いてみたいと思います。
Android ファイル構造
Androidの場合はRoot権限を持つ事が基本できないのですが、アプリ開発に関連する部分についてはある程度見えるようになっています。
Device Explorer
以前はAndroid Device Monitor その前は DDMS と呼ばれていたものに近いものです。
View On-Device Files with Device Explorer … – Android Developersに紹介ページがあります。ウィンドウ右下のボタンか、検索から探すと出てきます。
あるいは、「View」「Tool Window」「Device Explorer」から呼び出せます
下はSharedPreferencesで書き込んだ文字列を確認した例です。
エミュレータのファイル構成
Device File Explorerもウィンドウズ世代にはいいのですが、コマンドで探るともっと色々見えてくることもあります。ファイルシステムの構造は端末によって異なるところもありますが、Linuxベースなので共通部分も多くある程度分かっていると便利な時があります。
例として、最初にAndroid Studioのemulatorです。
Pixel 8 API 35 Android 15
Android Studioのターミナルなどで
adbでシェルに入りリスト一覧を出してみます
1 2 |
$ adb shell emu64xa:/ $ ls -l |
詳細を表示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
$ adb shell emu64xa:/ $ ls -l total 76 drwxr-xr-x 2 root root 27 2009-01-01 09:00 acct drwxr-xr-x 80 root root 1640 2024-07-22 17:41 apex lrw-r--r-- 1 root root 11 2009-01-01 09:00 bin -> /system/bin drwxr-xr-x 9 root root 220 2024-07-22 17:41 bootstrap-apex lrw-r--r-- 1 root root 50 2009-01-01 09:00 bugreports -> /data/user_de/0/com.android.shell/files/bugreports drwxrwx--- 2 system cache 27 2009-01-01 09:00 cache drwxr-xr-x 3 root root 0 2024-07-22 17:41 config lrw-r--r-- 1 root root 17 2009-01-01 09:00 d -> /sys/kernel/debug drwxrwx--x 51 system system 4096 2024-07-22 17:42 data d????????? ? ? ? ? ? data_mirror drwxr-xr-x 2 root root 27 2009-01-01 09:00 debug_ramdisk drwxr-xr-x 21 root root 2740 2024-07-22 17:41 dev lrw-r--r-- 1 root root 11 2009-01-01 09:00 etc -> /system/etc l????????? ? ? ? ? ? init -> ? -????????? ? ? ? ? ? init.environ.rc d????????? ? ? ? ? ? linkerconfig d????????? ? ? ? ? ? metadata drwxr-xr-x 16 root system 340 2024-07-22 17:41 mnt drwxr-xr-x 2 root root 199 2009-01-01 09:00 odm drwxr-xr-x 2 root root 42 2009-01-01 09:00 odm_dlkm drwxr-xr-x 2 root root 27 2009-01-01 09:00 oem d????????? ? ? ? ? ? postinstall dr-xr-xr-x 365 root root 0 2024-07-22 17:41 proc drwxr-xr-x 9 root root 151 2009-01-01 09:00 product lrw-r--r-- 1 root root 21 2009-01-01 09:00 sdcard -> /storage/self/primary drwxr-xr-x 2 root root 27 2009-01-01 09:00 second_stage_resources drwx--x--- 5 shell everybody 100 2024-07-22 17:42 storage dr-xr-xr-x 13 root root 0 2024-07-22 17:41 sys drwxr-xr-x 12 root root 274 2009-01-01 09:00 system d????????? ? ? ? ? ? system_dlkm drwxr-xr-x 8 root root 130 2009-01-01 09:00 system_ext drwxrwx--x 2 shell shell 40 2024-07-22 17:41 tmp drwxr-xr-x 12 root shell 219 2009-01-01 09:00 vendor drwxr-xr-x 2 root root 42 2009-01-01 09:00 vendor_dlkm emu64xa:/ $ ここcいcPS C:\> adb shell |
こちらは、Pixel 5、 API31 Android 12
の時のものです
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
emulator64_x86_64_arm64:/ $ ls -la total 80 drwxr-xr-x 27 root root 4096 2022-02-05 02:36 . drwxr-xr-x 27 root root 4096 2022-02-05 02:36 .. drwxr-xr-x 2 root root 4096 2022-02-05 01:57 acct -????????? ? ? ? ? ? adb_keys drwxr-xr-x 52 root root 1100 2022-07-03 00:53 apex lrw-r--r-- 1 root root 11 2022-02-05 02:36 bin -> /system/bin lrw-r--r-- 1 root root 50 2022-02-05 02:36 bugreports -> /data/user_de/0/com.android.shell/files/bugreports drwxrwx--- 2 system cache 4096 2022-02-05 01:57 cache drwxr-xr-x 3 root root 0 2022-07-03 00:53 config lrw-r--r-- 1 root root 17 2022-02-05 02:36 d -> /sys/kernel/debug drwxrwx--x 49 system system 4096 2022-07-03 00:55 data d????????? ? ? ? ? ? data_mirror drwxr-xr-x 2 root root 4096 2022-02-05 01:57 debug_ramdisk drwxr-xr-x 21 root root 2800 2022-07-03 00:53 dev lrw-r--r-- 1 root root 11 2022-02-05 02:36 etc -> /system/etc l????????? ? ? ? ? ? init -> ? -????????? ? ? ? ? ? init.environ.rc d????????? ? ? ? ? ? linkerconfig drwx------ 2 root root 16384 2022-02-05 02:36 lost+found d????????? ? ? ? ? ? metadata drwxr-xr-x 15 root system 320 2022-07-03 00:53 mnt drwxr-xr-x 2 root root 4096 2022-02-05 01:57 odm drwxr-xr-x 2 root root 4096 2022-02-05 01:57 odm_dlkm drwxr-xr-x 2 root root 4096 2022-02-05 01:57 oem d????????? ? ? ? ? ? postinstall dr-xr-xr-x 343 root root 0 2022-07-03 00:53 proc drwxr-xr-x 10 root root 4096 2022-02-05 02:35 product lrw-r--r-- 1 root root 21 2022-02-05 02:36 sdcard -> /storage/self/primary drwxr-xr-x 2 root root 4096 2022-02-05 01:57 second_stage_resources drwx--x--- 5 shell everybody 100 2022-07-03 00:55 storage dr-xr-xr-x 13 root root 0 2022-07-03 00:53 sys drwxr-xr-x 12 root root 4096 2022-02-05 02:23 system drwxr-xr-x 9 root root 4096 2022-02-05 02:35 system_ext drwxr-xr-x 11 root root 4096 2022-02-05 02:20 vendor drwxr-xr-x 2 root root 4096 2022-02-05 01:57 vendor_dlkm emulator64_x86_64_arm64:/ $ exit PS C:\> |
あまり変わっていないようです
drwxr-xr-x
- d: ディレクトリー
- r: 読み取り
- w:書き込み
- x:実行
を表しており、所有者・グループ・他ユーザーの権限が、設定されています
例)
drwxr-xr-x
[d] [rwx] [r-x] [r-x] と分解でき
先頭文字:
d:directoryのことでwindowsでいうところのフォルダー
-:ファイル
l:シンボリックリンクファイルでどこかからリンクされているという事が分かります
例)lrw-r–r– 1 root root 21 2022-02-05 02:36 sdcard -> /storage/self/primary
これはsdcardは実際はstorage/self/primary/ 以下に実体があるということです
パーミッション:
先頭文字の次から各グループのパーミッションを表しています
「所有ユーザー権限」「グループ権限」「その他のユーザー権限」ですが
Androidの場合、所有ユーザーはroot権限になり、ユーザー本人には権限がない状態になっています(なのでマニアはこのルート取ったぞと粋がるのです)
drwxr-xr-x では、
rwx:これはroot権限では「読み」「書き」「実行可能」を意味します
r-x:グループ権限でのアクセス権で「読出し」と「実行が可能」だが「書き込み不可」
r-x:他ユーザーでは「読出し」と「実行」のみ
ということです
root権限がない状態なので、読んだり、書いたりできるディレクトリーは限られています。
Top下のファイルはほとんどPermission deniedとなっています
因みに過去のemulator、Neus 6P では
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
C:\>adb shell 1|generic_x86_64:/ $ ls -l ls: ./ueventd.rc: Permission denied ls: ./ueventd.ranchu.rc: Permission denied ls: ./ueventd.goldfish.rc: Permission denied ls: ./service_contexts: Permission denied ls: ./sepolicy: Permission denied ls: ./selinux_version: Permission denied ls: ./seapp_contexts: Permission denied ls: ./init.zygote64_32.rc: Permission denied ls: ./init.zygote32.rc: Permission denied ls: ./init.usb.rc: Permission denied ls: ./init.usb.configfs.rc: Permission denied ls: ./init.rc: Permission denied ls: ./init.ranchu.rc: Permission denied ls: ./init.goldfish.rc: Permission denied ls: ./init.environ.rc: Permission denied ls: ./init: Permission denied ls: ./fstab.ranchu: Permission denied ls: ./fstab.goldfish: Permission denied ls: ./file_contexts.bin: Permission denied ls: ./default.prop: Permission denied total 56 drwxr-xr-x 15 root root 0 2016-12-25 13:49 . drwxr-xr-x 15 root root 0 2016-12-25 13:49 .. drwxr-xr-x 29 root root 0 2016-12-25 13:49 acct drwxrwx--- 6 system cache 4096 2016-12-21 12:21 cache lrwxrwxrwx 1 root root 13 1970-01-01 00:00 charger -> /sbin/healthd drwxr-xr-x 3 root root 0 2016-12-25 13:49 config lrwxrwxrwx 1 root root 17 1970-01-01 00:00 d -> /sys/kernel/debug drwxrwx--x 38 system system 4096 2016-12-25 13:49 data drwxr-xr-x 14 root root 2520 2016-12-25 13:49 dev lrwxrwxrwx 1 root root 11 1970-01-01 00:00 etc -> /system/etc drwxr-xr-x 10 root system 220 2016-12-25 13:49 mnt drwxr-xr-x 2 root root 0 1970-01-01 00:00 oem dr-xr-xr-x 133 root root 0 2016-12-25 13:49 proc -rw-r--r-- 1 root root 4763 1970-01-01 00:00 property_contexts drwx------ 2 root root 0 2016-10-04 14:46 root drwxr-x--- 2 root root 0 1970-01-01 00:00 sbin lrwxrwxrwx 1 root root 21 1970-01-01 00:00 sdcard -> /storage/self/primary drwxr-xr-x 5 root root 100 2016-12-25 13:49 storage dr-xr-xr-x 12 root root 0 2016-12-25 13:49 sys drwxr-xr-x 18 root root 4096 1970-01-01 00:00 system lrwxrwxrwx 1 root root 14 1970-01-01 00:00 vendor -> /system/vendor 1|generic_x86_64:/ $ |
構成が変わっています
dataディレクトリ
dataディレクトリのpermissionは「drwxrwx–x」なのでroot権限がないとアクセスできませんが、覗き見たり、場合によっては書き込みも可能です。
/data/app/
以下は各アプリのapkが存在します。以下のように呼び出すとパッケージリストが表示されます
1 2 3 4 5 6 |
$ adb shell pm list packages package:com.android.smoketest package:com.android.cts.priv.ctsshim package:com.example.android.livecubes ... $ |
/data/data/[package name]/以下にそのアプリの内部メモリ領域がありrun-asコマンドを使ってアクセスすることができます
ただしできないものもあります、signed apkなど。
こちらは、以前にDevice File Explorerで試したSharedPreferencesのテストアプリをNexus 5Xにインストールしてrun-asで中をのぞいてみた動画です。
関連:run-as
Reference:
View On-Device Files with Device File Explorer … – Android Developers