Androidのファイルシステムは複雑な階層構造を持っています。この記事では、主要なシステムフォルダから隠されたディレクトリまで、詳細に解説します。各ファイルの役割と実際の使用例を、豊富な具体例と共に紹介します。

※重要: システムファイルを操作する前に必ずバックアップを取り、自己責任で作業してください。

1. ルートディレクトリの完全解剖

/
├── acct/          # プロセスアカウンティング (cgroups)
├── bin/           # 必須コマンドバイナリ
├── boot/          # ブートローダーファイル
├── bugreports/    # バグレポート
├── cache/         # キャッシュ領域
├── config/        # ランタイム設定
├── d/             # デバッグトレース
├── data/          # ユーザーデータ (後述)
├── default.prop   # デフォルトシステムプロパティ
├── dev/           # デバイスファイル
├── etc/           # 設定ファイルのシンボリックリンク
├── init/          # initプロセス関連
├── init.rc        # 初期化スクリプト
├── mnt/           # マウントポイント (後述)
├── odm/           # ODMベンダー固有ファイル
├── oem/           # OEMカスタマイズ
├── proc/          # カーネル/プロセス情報 (後述)
├── product/       # 製品固有ファイル
├── res/           # リソース
├── sbin/          # システム管理者用バイナリ
├── sdcard/        # 内部ストレージへのシンボリックリンク
├── storage/       # ストレージ (後述)
├── sys/           # カーネルシステム情報 (後述)
├── system/        # システム (後述)
├── vendor/        # ベンダー固有 (後述)
└── verity_key     # ディスク検証キー

1.1 /binディレクトリの重要バイナリ

主要なシステムバイナリ

  • toolbox - Android版busyboxのようなマルチコールバイナリ
  • sh - システムシェル
  • pm - パッケージマネージャ
  • am - アクティビティマネージャ
  • logcat - ログ表示ツール
# インストール済みパッケージ一覧を表示
$ adb shell pm list packages

# 特定アプリの起動
$ adb shell am start -n com.example.app/.MainActivity

1.2 /bootディレクトリの構成

/boot
├── boot.img         # ブートイメージ (カーネル+ramdisk)
├── recovery.img    # リカバリイメージ
└── vbmeta.img      # 検証ブートメタデータ

技術メモ: boot.imgはAndroidの起動プロセスで重要な役割を果たします。このファイルを誤って変更するとデバイスが起動しなくなる可能性があります。

2. /systemディレクトリの深層

/system
├── app/             # プリインストールシステムアプリ
│   ├── Calculator/  # 計算機アプリ
│   ├── Calendar/    # カレンダーアプリ
│   └── ...          # その他多数
├── bin/             # システムバイナリ
│   ├── vold         # ボリュームデーモン
│   ├── servicemanager # サービス管理
│   └── ...          
├── build.prop       # システムプロパティ
├── etc/             # システム設定
│   ├── apns-conf.xml # APN設定
│   ├── hosts        # ホストファイル
│   └── ...          
├── fonts/           # システムフォント
│   ├── Roboto-*.ttf # Robotoフォントファミリー
│   └── ...          
├── framework/       # Androidフレームワーク
│   ├── framework.jar # コアフレームワーク
│   ├── services.jar # システムサービス
│   └── ...          
├── lib/             # システムライブラリ
│   ├── libandroid.so
│   ├── libbinder.so
│   └── ...          
├── media/           # システムメディア
│   ├── audio/       # システムサウンド
│   │   ├── alarms/  # アラーム音
│   │   ├── notifications/ # 通知音
│   │   └── ...      
│   └── ...          
├── priv-app/        # 特権システムアプリ
│   ├── Settings/    # 設定アプリ
│   ├── SystemUI/    # システムUI
│   └── ...          
└── ...              

2.1 /system/etcの詳細構成

ネットワーク関連設定

/system/etc
├── dhcpcd/          # DHCPクライアント設定
├── hosts            # ホスト名解決
├── resolv.conf      # DNS設定
└── wifi/            # WiFi設定
    ├── wpa_supplicant.conf
    └── ...

セキュリティ関連

/system/etc
├── security/        # セキュリティ設定
│   ├── cacerts/     # 信頼済みCA証明書
│   └── ...          
├── selinux/         # SELinuxポリシー
└── permissions/     # アプリ権限設定

3. /dataディレクトリの完全マップ

/data
├── adb/             # ADB関連ファイル
├── anr/             # ANR(応答なし)ログ
├── app/             # ユーザーアプリAPK
│   ├── com.example.app-1/
│   └── ...          
├── app-asec/        # 暗号化アプリ
├── app-lib/         # アプリネイティブライブラリ(古いバージョン)
├── app-private/     # プライベートアプリ
├── backup/          # バックアップデータ
├── dalvik-cache/    # Dalvikキャッシュ
├── data/            # アプリデータ(後述)
├── dontpanic/       # クラッシュログ
├── local/           # 一時ファイル
├── misc/            # その他のシステムデータ
│   ├── bluetooth/   # Bluetooth設定
│   ├── wifi/        # WiFi設定
│   └── ...          
├── property/        # 永続的システムプロパティ
├── resource-cache/  # リソースキャッシュ
├── system/          # システム設定
│   ├── dropbox/     # システムログ
│   ├── users/       # マルチユーザー設定
│   └── ...          
└── ...              

3.1 アプリデータ構造の詳細

/data/data/com.example.app/
├── cache/           # キャッシュデータ
├── code_cache/      # 最適化済みコード
├── databases/       # SQLiteデータベース
│   ├── main.db      # メインデータベース
│   ├── main.db-journal # ジャーナルファイル
│   └── ...          
├── files/           # アプリ固有ファイル
├── lib/             # ネイティブライブラリ
├── shared_prefs/    # SharedPreferences
│   ├── prefs.xml    # 設定ファイル
│   └── ...          
└── ...              

開発者向けヒント: アプリデータを調査するには、run-asコマンドを使用してアプリの権限でアクセスできます。

$ adb shell
$ run-as com.example.app
$ ls /data/data/com.example.app/databases

4. 特殊なディレクトリの役割

4.1 /procファイルシステムの詳細

/proc
├── [pid]/          # プロセスごとのディレクトリ
│   ├── cmdline     # 起動コマンド
│   ├── fd/         # 開いているファイルディスクリプタ
│   ├── status      # プロセス状態
│   └── ...          
├── cpuinfo         # CPU情報
├── devices         # デバイス一覧
├── meminfo         # メモリ使用状況
├── mounts          # マウントポイント
├── net/            # ネットワーク情報
├── version         # カーネルバージョン
└── ...              
# メモリ使用量を確認
$ adb shell cat /proc/meminfo

# CPU情報を表示
$ adb shell cat /proc/cpuinfo

# マウントされているファイルシステムを一覧表示
$ adb shell cat /proc/mounts

4.2 /sysファイルシステムの詳細

/sys
├── block/          # ブロックデバイス
├── bus/            # バス情報
├── class/          # デバイスクラス
│   ├── backlight/  # バックライト制御
│   ├── power_supply/ # 電源情報
│   └── ...          
├── devices/        # システムデバイス
├── firmware/       # ファームウェア情報
├── kernel/         # カーネル設定
├── module/         # ロード済みモジュール
└── ...              

バッテリー情報の取得例

# バッテリー残量(%)を表示
$ adb shell cat /sys/class/power_supply/battery/capacity

# バッテリーステータスを表示
$ adb shell cat /sys/class/power_supply/battery/status

# バッテリーヘルスを表示
$ adb shell cat /sys/class/power_supply/battery/health

5. ベンダー固有のディレクトリ

5.1 /vendorディレクトリ

/vendor
├── bin/            # ベンダー提供バイナリ
├── etc/            # ベンダー設定
│   ├── init/       # 初期化スクリプト
│   └── ...          
├── firmware/       # デバイスファームウェア
├── lib/            # ベンダーライブラリ
│   ├── egl/        # GPUライブラリ
│   └── ...          
├── overlay/        # システムオーバーレイ
└── ...              

5.2 /odmディレクトリ

/odm
├── etc/            # ODM固有設定
├── firmware/       # ODMファームウェア
└── ...              

用語解説: ODM(Original Design Manufacturer)とは、デバイスメーカー向けに設計や製造を行う会社を指します。ODM固有のカスタマイズがこのディレクトリに含まれます。

最終まとめ

Androidのファイルシステムは非常に複雑で多層的な構造を持っていますが、各ディレクトリには明確な目的と役割があります。このガイドで紹介した内容は、Androidシステムの内部構造を理解する上で重要な基礎知識となります。

システムファイルを操作する際の注意点:

  • 必ずバックアップを取る
  • 変更前にファイルの役割を十分に理解する
  • root権限での操作は特に慎重に行う
  • 変更前後でシステムの動作を確認する

Androidのファイルシステムについてさらに深く学びたい場合は、Android Open Source Project(AOSP)のドキュメントやLinuxのファイルシステムについての資料を参照すると良いでしょう。