UbuntuユーザーのためのAndroidエミュレータ徹底活用マニュアル：Root化によるアプリデータ抽出と解析ガイド

はい、承知いたしました。これまでのやり取りをじっくりと読み込み、Ubuntu上でAndroidエミュレータをセットアップし、アプリ（APK）をインストール、root権限を取得してアプリの内部データにアクセスし、最終的にそのデータをPCで解析するまでの一連の流れを、次回以降にも参考にしていただけるような詳細なマニュアルとして作成します。


---

**UbuntuユーザーのためのAndroidエミュレータ徹底活用マニュアル：Root化によるアプリデータ抽出と解析ガイド.**

**目的:**
このマニュアルは、Ubuntu Linux環境でAndroid Studioに含まれるエミュレータ（Android Virtual Device, AVD）をセットアップし、任意のアプリをインストール後、root権限を利用してアプリの内部データ（特にデータベース）にアクセスし、そのデータをPC上で解析するための手順を網羅的に解説します。

---

**パート1: 準備とAndroid Studioのセットアップ**

アプリのデータを取得するためには、まず信頼性の高いAndroidエミュレータ環境を構築する必要があります。Android開発の公式IDE（統合開発環境）であるAndroid Studioには、高機能なAVDマネージャーと、操作に必要なADB（Android Debug Bridge）コマンドラインツールが含まれています。

**1.1. Android Studioのインストール**

* **公式サイトからのダウンロード:**
    1.  ウェブブラウザで「Android Studio download」と検索し、公式のAndroid Developersサイトにアクセスします。
    2.  Linux向けのAndroid Studioの `.tar.gz` パッケージ（またはSnapパッケージなどの代替形式）をダウンロードします。
* **Snapパッケージを利用する場合 (Ubuntuで推奨されることが多い方法の一つ):**
    1.  ターミナルを開きます。
    2.  以下のコマンドを実行してAndroid Studioをインストールします。
        ```bash
        sudo snap install android-studio --classic
        ```
    3.  インストールが完了するまで待ちます。
* **`.tar.gz` パッケージを利用する場合:**
    1.  ダウンロードした `.tar.gz` ファイルを、任意のディレクトリ（例: `/opt/` や `~/Android/` など）に展開します。
        ```bash
        # 例: /opt/ に展開する場合
        # sudo tar -xzvf android-studio-*-linux.tar.gz -C /opt/
        # 例: ホームディレクトリのAndroidフォルダに展開する場合
        # mkdir ~/Android
        # tar -xzvf android-studio-*-linux.tar.gz -C ~/Android/
        ```
    2.  展開されたディレクトリ内にある `bin` フォルダの `studio.sh` を実行してAndroid Studioを起動します。
        ```bash
        # cd /opt/android-studio/bin  (展開先によってパスは異なります)
        # ./studio.sh
        cd ~/Android/android-studio/bin # (ホームディレクトリに展開した場合の例)
        ./studio.sh
        ```
* **初回起動とセットアップ:**
    * 初めてAndroid Studioを起動すると、セットアップウィザードが開始されます。指示に従い、必要なSDKコンポーネント（Android SDK Platform-Toolsなど、ADBが含まれます）をインストールしてください。「Standard」設定を選べば通常は問題ありません。
    * ライセンス契約に同意し、ダウンロードとインストールが完了するのを待ちます。

**1.2. Android SDK Command-line Tools (特にADB) の確認**

Android Studioのセットアップ時に「Android SDK Platform-Tools」がインストールされていれば、ADBコマンドが利用可能になります。

* **ADBコマンドの場所:**
    通常、ADBはAndroid SDKのインストールディレクトリ内の `platform-tools` フォルダにあります。デフォルトのSDKインストール場所は `~/Android/Sdk/platform-tools/` です。
* **PATH環境変数への追加 (推奨):**
    毎回フルパスを入力せずに `adb` コマンドを使えるように、この `platform-tools` ディレクトリをシステムのPATH環境変数に追加しておくと非常に便利です。
    1.  お使いのシェル設定ファイル（例: `~/.bashrc` や `~/.zshrc`）を開きます。
        ```bash
        gedit ~/.bashrc  # bashの場合
        # gedit ~/.zshrc # zshの場合
        ```
    2.  ファイルの末尾に以下の行を追加します（SDKのパスはご自身の環境に合わせてください）。
        ```bash
        export ANDROID_SDK_ROOT="$HOME/Android/Sdk" # (お使いのSDKのルートパス)
        export PATH="$PATH:$ANDROID_SDK_ROOT/platform-tools"
        # もしSDKのルートパスが異なる場合は、適宜修正してください。
        # 例えば、export PATH="$PATH:$HOME/Android/Sdk/platform-tools" のように直接指定も可能です。
        ```
    3.  ファイルを保存して閉じ、設定を反映させます。
        ```bash
        source ~/.bashrc  # bashの場合
        # source ~/.zshrc # zshの場合
        ```
    4.  新しいターミナルを開いて `adb --version` と入力し、バージョン情報が表示されればPATHが正しく設定されています。

もしPATHを通すのが難しい場合は、`~/Android/Sdk/platform-tools/adb` のようにフルパスでコマンドを実行することも可能です。

---

**パート2: root化可能なAndroid仮想デバイス (AVD) の作成**

root権限でアプリデータにアクセスするためには、root化が容易なシステムイメージでAVDを作成することが鍵となります。

**2.1. AVDマネージャーの起動**

1.  Android Studioを起動します。
2.  ウェルカム画面、またはプロジェクトが開いている場合は右上のツールバーや「Tools」メニューから「AVD Manager」（またはデバイスアイコン）を探してクリックします。
    （もしプロジェクトを開いていないウェルカム画面なら、「More Actions」>「Virtual Device Manager」などの選択肢がある場合があります。）

**2.2. 新しい仮想デバイスの作成**

1.  AVD Managerのウィンドウで、「+ Create Virtual Device...」（または「+ Create Device」）ボタンをクリックします。
2.  「Select Hardware」の画面が表示されます。

**2.3. ハードウェアプロファイルの選択**

1.  左側の「Category」で「**Phone**」を選択します。
2.  中央のリストから、エミュレートしたいデバイスプロファイルを選択します。特定のハードウェア要件がなければ、「**Pixel 7**」や「**Pixel 8**」（またはこれまでのやり取りで実績のある「Medium Phone」など）といった比較的新しい標準的なモデルが無難です。
    * 画面サイズ、解像度、RAM容量などが表示されます。RAMは後で調整も可能です。
    * このハードウェア選択自体は、root化の可否に直接は大きく影響しません。
3.  デバイスを選択したら、「Next」ボタンをクリックします。

**2.4. システムイメージの選択 (最重要ステップ！)**

ここで選択するシステムイメージの種類が、後の `adb root` コマンドの成功に直結します。

1.  「System Image」の画面が表示されます。ここには、様々なAndroidバージョン（APIレベル）と種類のシステムイメージがリストされます。
2.  タブ（Recommended, x86 Images, Other Images）を切り替えながら、以下の条件に合うイメージを探します。
    * **ABI (CPUアーキテクチャ):** 「**x86_64**」または「**x86**」を選択します。これらはPC上でのエミュレータのパフォーマンスが良いです。
    * **Target (種類):**
        * **最も重要なのは、「Google Play」と書かれて *いない* イメージを選ぶことです。**「Google Play」が含まれるイメージは、通常、`adb root` が許可されない製品版ビルドです。
        * 代わりに、「**Google APIs**」と書かれているイメージを選択します。これらのイメージは、Googleの各種APIは利用できますが、Playストアは含まれず、多くの場合 `adb root` が可能です。
        * 「AOSP」(Android Open Source Project) や「default」とだけ書かれているイメージも候補になりますが、「Google APIs」が比較的使いやすいでしょう。
    * **API Level (Androidバージョン):**
        * アプリのテストやデータ取得の目的に合わせて選択します。これまでのやり取りではAndroid 16 (API 36 "Baklava") の「Google APIs」イメージで成功しましたね。新しいAPIレベルでも「Google APIs」版があれば同様に動作する可能性があります。もし特定の古いバージョンでアプリを動かしたい場合は、そのAPIレベルの「Google APIs」イメージを探します。
    * **リリース名:**
        * 安定版を選びましょう。
3.  目的のシステムイメージ（例: API 36, ABI x86_64, Target Google APIs）の行にある「**Download**」リンクをクリックします（まだダウンロードしていない場合）。
    * ライセンス契約に同意し、ダウンロードが完了するのを待ちます。
4.  ダウンロードが完了したら、そのシステムイメージを選択し、「Next」ボタンをクリックします。

**2.5. AVDの設定確認と完了**

1.  「Verify Configuration」画面が表示されます。
2.  AVD名（AVD Name）は分かりやすい名前に変更できます（例: `Pixel_7_API_36_Rootable`）。
3.  「Startup orientation」（起動時の画面向き）や、必要であれば「Advanced Settings」（詳細設定）でRAM容量や内部ストレージ容量などを調整できます。
    * もし以前エミュレータの動作が重かった経験があれば、ここでRAMをPCの許容範囲で少し増やしてみるのも良いでしょう（例: 2GB -> 4GB）。
4.  設定に問題がなければ、「Finish」ボタンをクリックします。
    AVDの作成が開始され、完了するとAVD Managerのリストに追加されます。

**2.6. AVDの起動**

1.  AVD Managerのリストで、作成したAVDの行にある緑色の再生ボタン（▶ Actions列のLaunch）をクリックします。
2.  エミュレータウィンドウが開き、Android OSが起動し始めます。初回起動は時間がかかることがあります。Googleのロゴなどが表示され、最終的にホーム画面またはセットアップ画面が表示されれば起動成功です。

---

はい、承知いたしました。マニュアルの続きを作成します。
パート1とパート2では、Android Studioのセットアップと、root化可能なAVD（Android仮想デバイス）の作成までを行いました。このパート3では、作成したAVDで実際にroot権限を取得し、目的のアプリをインストールする手順について詳しく説明します。

---

**パート3: root権限の取得とアプリ (APK) のインストール**

AVDが起動できるようになったら、次はroot権限を取得し、調査したいアプリをインストールします。

**3.1. AVDの起動確認とADB接続の検証**

1.  **AVDの完全起動:**
    * パート2で作成したAVDをAVD Managerから起動し、Androidのホーム画面が完全に表示され、操作可能な状態になるまで待ちます。
2.  **ADB接続の確認:**
    * PCのターミナルを開きます。
    * 以下のコマンドを実行して、起動したAVDがPCに認識されているか確認します。
        ```bash
        adb devices
        ```
    * 以下のように、リストにエミュレータが表示され、状態が `device` となっていれば接続は正常です。
        ```
        List of devices attached
        emulator-5554   device
        ```
        （`emulator-5554` の部分は異なる場合があります。）
    * もし `offline` と表示されたり、何も表示されなかったりする場合は、AVDが完全に起動していないか、SDK Platform-Toolsのパス設定に問題がある可能性があります。パート1のPATH設定やAVDの起動状態を再確認してください。

**3.2. root権限の取得 (`adb root`)**

「Google APIs」のシステムイメージでAVDを作成した場合、`adb root` コマンドで簡単にroot権限を取得できるはずです。

1.  PCのターミナルで以下のコマンドを実行します。
    ```bash
    adb root
    ```
2.  成功すると、以下のようなメッセージが表示されるか、特にエラーが出なければadbd（Android Debug Bridge Daemon）がroot権限で再起動します。
    ```
    restarting adbd as root
    ```
    または
    ```
    adbd is already running as root
    ```
    （既にrootで動作している場合）

**3.3. root権限の確認**

`adb root` が成功したかを確認します。

1.  PCのターミナルで、エミュレータのシェルに入ります。
    ```bash
    adb shell
    ```
2.  シェルのプロンプト（通常、行の先頭に表示される記号）を確認します。
    * 通常ユーザーの場合は `$` （例: `generic_x86_64:/ $`）
    * **rootユーザーの場合は `#`** （例: `generic_x86_64:/ #` または `emu64xa:/ #`）
    プロンプトが `#` になっていれば、root権限でシェルが動作しています。
3.  さらに確実な確認として、シェル内で以下のコマンドを実行します。
    ```bash
    whoami
    ```
    結果として `root` と表示されれば成功です。
4.  または、以下のコマンドでも確認できます。
    ```bash
    id
    ```
    結果の中に `uid=0(root) gid=0(root)` といった表示があれば成功です。
5.  確認が終わったら、`exit` と入力してエンターキーを押し、エミュレータのシェルから抜けてPCのターミナルに戻ります。

**3.4. アプリ (APK) のインストール**

root権限が取得できたので、次に目的のアプリをインストールします。アプリのファイル形式に応じて方法が少し異なります。

* **A. 標準的な `.apk` ファイルのインストール**

    1.  **APKファイルの準備:**
        インストールしたいアプリの `.apk` ファイルをPCの分かりやすい場所（例: `~/Downloads/` フォルダ）に用意します。
    2.  **インストールコマンドの実行:**
        PCのターミナルで以下のコマンドを実行します。`/パス/to/your/` の部分は実際のファイルパスに置き換えてください。
        ```bash
        adb install /パス/to/your/appname.apk
        ```
        例えば、`~/Downloads/` に `AppName.apk` がある場合は、
        ```bash
        adb install ~/Downloads/AppName.apk
        ```
    3.  **結果の確認:**
        しばらく待つと、`Performing Streamed Install` のようなメッセージに続き、最後に `Success` と表示されればインストール成功です。

* **B. `.xapk` ファイルのインストール (手動)**

    `.xapk` ファイルは、ベースとなるAPKファイルに加え、分割APKやOBB（アプリの追加データ）ファイルを含むことがあるアーカイブ形式です。`adb install` では直接扱えません。

    1.  **`.xapk` を `.zip` にリネームして展開:**
        PC上で `.xapk` ファイルの拡張子を `.zip` に変更し、ZIP展開ツールで展開します。
        ```bash
        # 例: FunEasyLearn.xapk を展開する場合
        cd ~/Downloads  # .xapkファイルがあるディレクトリへ移動
        mv FunEasyLearn.xapk FunEasyLearn.zip
        unzip FunEasyLearn.zip -d FunEasyLearn_extracted_files
        ```
    2.  **展開された内容の確認:**
        `FunEasyLearn_extracted_files` フォルダ（または指定した展開先フォルダ）の中身を確認します。
        * ベースとなる `.apk` ファイル (例: `com.packagename.apk`)
        * 分割 `.apk` ファイル (例: `config.armeabi.apk`, `config.xxhdpi.apk` など)
        * `Android/obb/<package_name>/` ディレクトリ内に `.obb` ファイル (例: `main.version.packagename.obb`) (存在する場合)
        * `manifest.json` (パッケージ名などの情報を含む)
    3.  **APKファイルのインストール:**
        * **ベースAPKと分割APKがある場合:** (これまでのやり取りでこのケースがありましたね)
          展開されたファイルがあるディレクトリにターミナルで移動し（またはフルパスを指定し）、`adb install-multiple` コマンドを使用します。
          ```bash
          # 例: FunEasyLearn_extracted_files に移動した場合
          cd ~/Downloads/FunEasyLearn_extracted_files
          adb install-multiple base.apk config.xxhdpi.apk # (実際のファイル名に合わせてください)
          ```
        * **ベースAPKのみの場合:** (分割APKがない場合)
          ```bash
          adb install base.apk # (実際のファイル名に合わせてください)
          ```
    4.  **OBBファイルの配置 (もし存在する場合):**
        * まず、アプリの正確な**パッケージ名**を特定します (`manifest.json` やベースAPKのファイル名から判断)。
        * 次に、エミュレータ内にOBBファイルを置くためのディレクトリを作成します。
            ```bash
            adb shell mkdir -p /sdcard/Android/obb/<ここにアプリのパッケージ名>/
            ```
            (例: `adb shell mkdir -p /sdcard/Android/obb/com.funeasylearn.languages/`)
        * 最後に、展開したフォルダ内にある `.obb` ファイルを、作成したエミュレータのディレクトリに `adb push` コマンドで転送します。
            ```bash
            # 例:
            adb push Android/obb/<パッケージ名>/main.バージョン.<パッケージ名>.obb /sdcard/Android/obb/<パッケージ名>/
            ```
* **C. インストール後の確認**
    * インストールが成功したら、エミュレータのアプリ一覧（ドロワー画面）にインストールしたアプリのアイコンが表示されるはずです。
    * アイコンをタップしてアプリを起動し、基本的な動作を確認します（ログインなど）。

**3.5. インストール時のトラブルシューティング**

* **`Failure [INSTALL_FAILED_UPDATE_INCOMPATIBLE]` (署名の不一致)**
    * **原因:** インストールしようとしているアプリと同じパッケージ名のアプリが既にエミュレータに存在し、かつ両者の署名が異なる場合に発生します（例: 公式版とMOD版、異なるMOD版同士など）。
    * **解決策:** 既存のアプリをアンインストールしてから、新しいアプリをインストールします。
        1.  既存アプリのパッケージ名を特定します（エラーメッセージに含まれています）。
        2.  アンインストールコマンドを実行します。
            ```bash
            adb uninstall <パッケージ名>
            ```
            (例: `adb uninstall com.funeasylearn.languages`)
        3.  「Success」と表示されたら、再度新しいアプリのインストールを試みます。

* **`adb install Success` と表示されるがアプリが見つからない**
    * **原因の可能性:**
        * インストール処理が内部的に失敗し、実際にはシステムに登録されていない。
        * エミュレータのランチャー（ホームアプリ）が新しいアプリを認識・表示できていない。
        * ダウンロードしたAPKファイル自体に問題がある（破損、非対応など）。
    * **確認方法:**
        PCのターミナルで以下のコマンドを実行し、アプリが実際にインストールされているか確認します。
        ```bash
        adb shell pm list packages | grep -i <アプリ名の一部またはパッケージ名の一部>
        ```
        (例: `adb shell pm list packages | grep -i funeasylearn`)
        結果に `package:<完全なパッケージ名>` が表示されればインストールはされています。
    * **対策:**
        * **パッケージがリストされた場合 (インストールはされている):**
            * エミュレータを一度再起動してみる（AVD Managerから一度閉じて再度起動）。
            * それでもダメなら、コマンドで直接アプリを起動してみる（パッケージ名が必要です）。
              ```bash
              adb shell monkey -p <完全なパッケージ名> -c android.intent.category.LAUNCHER 1
              ```
        * **パッケージがリストされない場合 (インストールされていない):**
            * ダウンロードしたAPKファイルが破損しているか、お使いのAVDのAndroidバージョン/アーキテクチャと互換性がない可能性があります。別の信頼できるソースからAPKファイルを再ダウンロードするか、異なるバージョンのAPKを試してみてください。

---


はい、承知いたしました。マニュアルのパート4を作成します。
パート3では、AVDでroot権限を取得し、アプリをインストールしました。このパート4では、そのインストールしたアプリの内部データ（特にデータベースや設定ファイル）にアクセスし、解析のためにPCに抽出（コピー）する手順を詳しく説明します。

---

**パート4: アプリ内部データへのアクセスとPCへの抽出**

root権限があれば、通常はアクセスできないアプリのプライベートデータ領域にアクセスできます。これにより、アプリがどのように情報を保存しているかを調査したり、特定のデータを抽出したりすることが可能になります。

**4.1. アプリデータディレクトリへのアクセス**

1.  **rootシェルであることの確認:**
    * PCのターミナルから `adb shell` を実行し、プロンプトが `$` ではなく `#` になっていること（root権限であること）を確認します。もし `$` なら、`exit` で一度シェルを抜け、`adb root` を実行してから再度 `adb shell` に入ってください。
        ```bash
        # PCのターミナル
        adb root
        adb shell
        # 以下のようなプロンプトが表示されるはず
        # generic_x86_64:/ #  (または emu64xa:/ # など)
        ```

2.  **アプリのパッケージ名を把握:**
    * データにアクセスしたいアプリの正確なパッケージ名が必要です。これまでの手順でアプリをインストールした際に使用したAPKファイル名や、エラーメッセージ、`pm list packages` コマンドなどで確認できているはずです。（例: `com.funeasylearn.languages`）

3.  **データディレクトリへの移動:**
    * アプリのプライベートデータは、`/data/data/<アプリのパッケージ名>/` というパスに格納されています。`cd` コマンドでこのディレクトリに移動します。
        ```bash
        # エミュレータのrootシェル内 (# プロンプトの状態)
        cd /data/data/com.funeasylearn.languages
        ```
        （`<アプリのパッケージ名>` の部分は、実際のパッケージ名に置き換えてください。）

**4.2. データディレクトリの構造と主要なサブディレクトリ**

アプリのデータディレクトリに移動したら、`ls -lA` コマンドでどのようなファイルやフォルダがあるか確認しましょう。

```bash
# /data/data/com.funeasylearn.languages/ ディレクトリにいる状態で
ls -lA
```

一般的に見られる主要なサブディレクトリは以下の通りです。

* `databases/`: アプリが使用するSQLiteデータベースファイル（通常 `.db` 拡張子）が格納されています。ユーザー情報、進捗、設定など、構造化されたデータの多くがここにあります。**今回の主要な調査対象です。**
* `shared_prefs/`: アプリの簡単な設定値やフラグなどがXML形式のファイルで保存されています。
* `files/`: アプリが独自に作成・使用するその他のファイル（画像、音声、ドキュメント、ダウンロードされたコンテンツなど）が置かれることがあります。
* `cache/`: アプリが一時的に使用するキャッシュファイルです。
* `no_backup/`: 自動バックアップの対象外としたいファイルが置かれるディレクトリです。
* その他、ライブラリが使用するディレクトリ（例: `app_webview/`, `app_textures/` など）が存在することもあります。

**4.3. 各種データの確認方法（エミュレータ内での簡単な確認）**

* **`shared_prefs` フォルダ内の設定ファイルの閲覧:**
    ```bash
    # /data/data/com.funeasylearn.languages/ ディレクトリにいる状態で
    cd shared_prefs
    ls -lA
    ```
    リストされたXMLファイル（例: `com.funeasylearn.languages_preferences.xml` など）の中身は `cat` コマンドで表示できます。
    ```bash
    cat そのXMLファイル名.xml
    ```
    （ただし、長いファイルの場合は読みにくいので、PCにコピーして見る方が良いでしょう。）

* **`databases` フォルダ内のデータベースファイルの確認:**
    ```bash
    # /data/data/com.funeasylearn.languages/ ディレクトリにいる状態で
    cd databases
    ls -lA
    ```
    これで、`.db` という拡張子を持つデータベースファイルの一覧が表示されます。
    エミュレータ内に `sqlite3` コマンドがインストールされていれば、簡単な確認が可能です。
    ```bash
    sqlite3 データベースファイル名.db
    ```
    `sqlite>` プロンプトに変わったら、`.tables` でテーブル一覧、`SELECT * FROM テーブル名 LIMIT 5;` でデータの一部表示、`.exit` で終了、などができます。
    **しかし、詳細な解析やデータ抽出は、これらのファイルをPCにコピーしてから行うのが断然便利です。**

**4.4. アプリデータのPCへの抽出 (`adb pull`)**

目的のデータ（特にデータベースファイル）をPCにコピーして、PC上のツールでじっくり解析しましょう。
以下の `adb pull` コマンドは、**PCのターミナル**（`adb shell` を抜けた状態、つまり `(base) yamada@yamada-NK50SZ:~$` のようなプロンプト）で実行します。

1.  **PCに保存用フォルダを作成 (推奨):**
    抽出したファイルを整理するために、PCの分かりやすい場所（例: `~/Downloads/`）に専用のフォルダを作成しておくと良いでしょう。
    ```bash
    # PCのターミナルで
    mkdir ~/FunEasyLearn_Extracted_Data
    ```

2.  **A. 特定のデータベースファイルをPCにコピーする:**
    もし特定のデータベースファイルだけが必要な場合は、ファイル名を指定してコピーします。
    ```bash
    # PCのターミナルで
    adb pull /data/data/com.funeasylearn.languages/databases/目的のデータベース.db ~/FunEasyLearn_Extracted_Data/
    ```

3.  **B. `databases` フォルダ全体をPCにコピーする (推奨):**
    関連するデータベースファイルや補助ファイル（`-journal`, `-shm`, `-wal` など）も一緒に取得できるため、この方法が便利です。これまでのやり取りで、この方法で実際にファイルをPCにコピーしましたね。
    ```bash
    # PCのターミナルで
    adb pull /data/data/com.funeasylearn.languages/databases/. ~/FunEasyLearn_Extracted_Data/databases_from_app/
    ```
    これにより、PCの `~/FunEasyLearn_Extracted_Data/databases_from_app/` フォルダ内に、エミュレータの `databases` フォルダの中身が全てコピーされます。

4.  **C. アプリのデータディレクトリ全体をPCにコピーする (必要に応じて):**
    データベースだけでなく、`files` フォルダ内のメディアファイルなども含めて全て調査したい場合は、アプリのデータディレクトリ全体をコピーすることもできます。これまでのやり取りで、数百MBのデータを取得するためにこの方法も試しましたね。
    ```bash
    # PCのターミナルで
    adb pull /data/data/com.funeasylearn.languages/. ~/FunEasyLearn_Extracted_Data/full_app_data/
    ```
    この場合、PCの `~/FunEasyLearn_Extracted_Data/full_app_data/` フォルダ内に、`databases` フォルダ、`files` フォルダ、`shared_prefs` フォルダなどが丸ごとコピーされます。ただし、キャッシュなど不要なファイルも多く含まれ、全体のサイズが大きくなる点に注意してください。

5.  **コピー後の確認:**
    `adb pull` コマンドの実行後、PCの指定したフォルダにファイルやフォルダが正しくコピーされているか確認してください。

**4.5. `files` ディレクトリについて (補足)**

`files` ディレクトリには、アプリが使用する画像、音声、動画、ダウンロードしたコンテンツ、ログファイルなどが保存されていることがあります。
もし例文に音声データが付随している場合や、アプリ内で使用されている画像リソースなどを調べたい場合は、この `files` ディレクトリの中も探索することになります。多くの場合、データベース内の情報（ファイル名やIDなど）と、この `files` ディレクトリ内の実際のファイルとが関連付けられています。

**4.6. データ抽出時の注意点**

* `/data/data/` 以下のディレクトリやファイルへのアクセスには基本的にroot権限が必要です。今回は既に `adb root` を実行しているので問題ありません。
* `adb pull` で大容量のデータをコピーする際は、それなりに時間がかかることがあります。また、エミュレータの空き容量やPCのディスク空き容量にも注意してください。

---

はい、承知いたしました。マニュアルのパート5を作成します。
パート4では、AVD内のアプリデータをPCに抽出しました。このパート5では、そのPCに抽出したデータ、特にSQLiteデータベースファイル（`.db` ファイル）を、Ubuntu上で専用のツールを使って解析し、目的の情報（今回の場合はFunEasyLearnの例文テキストなど）を見つけ出し、取得する方法について詳しく解説します。

---

**パート5: PC上でのアプリデータ解析 (SQLiteデータベースの調査)**

PCにコピーしたアプリのデータ（特に `.db` ファイル）を調べるには、SQLiteデータベースを閲覧・編集できるGUIツールを使用するのが最も効率的です。ここでは「DB Browser for SQLite」を例に説明します。

**5.1. 必要なツール: DB Browser for SQLite の準備**

* **インストール (Ubuntuの場合、APTコマンドが推奨):**
    これまでのやり取りでインストール済みかもしれませんが、念のため手順を再掲します。
    1.  ターミナルを開きます。
    2.  パッケージリストを更新します。
        ```bash
        sudo apt update
        ```
    3.  DB Browser for SQLite (パッケージ名: `sqlitebrowser`) をインストールします。
        ```bash
        sudo apt install sqlitebrowser
        ```
        途中でパスワード入力や確認（[Y/n]）を求められたら、適宜入力・応答してください。
* **起動方法:**
    インストール後、Ubuntuのアプリケーションメニューで「DB Browser for SQLite」または「sqlitebrowser」と検索して起動します。ターミナルから `sqlitebrowser` と入力して起動することも可能です。

**5.2. データベースファイルの読み込み**

1.  **DB Browser for SQLiteを起動します。**
2.  メインウィンドウが表示されたら、「**データベースを開く (Open Database)**」ボタンをクリックするか、「ファイル (File)」メニューから「データベースを開く...」を選択します。
3.  ファイル選択ダイアログが表示されるので、パート4でアプリデータをコピーしたPC上のフォルダに移動します。
    * 例: `~/FunEasyLearn_Extracted_Data/databases_from_app/`
    * または `~/FunEasyLearn_Extracted_Data/full_app_data/databases/`
    （ご自身がデータを保存した実際のパスを指定してください）
4.  その中から、調査したい `.db` ファイル（例: `FEL_Phrases.db` や `Phrases_49.db`、あるいは `firestore...` という名前のファイルなど、前回リストアップした有望なファイル）を選択し、「開く」をクリックします。

**5.3. DB Browser for SQLite の基本的な使い方**

データベースファイルを開くと、DB Browser for SQLiteのウィンドウにいくつかの主要な「タブ」が表示されます。

* **A. 「データベース構造 (Database Structure)」タブ**
    * このタブには、開いたデータベースファイルに含まれる全ての**テーブル (Tables)**、**インデックス (Indices)**、**ビュー (Views)**、**トリガー (Triggers)** の一覧が表示されます。
    * 主に「テーブル」のセクションに注目します。テーブル名をクリックすると、その右側にテーブルを構成する**カラム（列）の一覧**（カラム名、データ型、NULL許容か、デフォルト値、主キーかなど）が表示されます。
    * まずここで、名前に「phrase」「sentence」「text」「word」「language」「translation」「content」「item」など、目的の「例文」データに関連しそうなキーワードを含むテーブルを探します。

* **B. 「データを閲覧 (Browse Data)」タブ**
    * このタブの上部にあるドロップダウンリストから、調べたい**テーブルを選択**します。
    * 選択したテーブルに格納されている実際のデータが、スプレッドシートのような表形式で表示されます。
    * 各カラムのヘッダー（列名）をクリックすると、その列でデータを**ソート**できます。
    * 各カラムの下にあるフィルターボックスに値を入力することで、表示されるデータを**絞り込む**ことができます。
    * ここで、実際の例文テキストや、それに関連する言語コード、IDなどがどのカラムに格納されているかを目で見て確認します。

* **C. 「SQLを実行 (Execute SQL)」タブ**
    * ここでは、SQL (Structured Query Language) クエリを直接入力して実行し、より複雑なデータの検索、抽出、集計などを行うことができます。
    * クエリを入力し、「クエリを実行」ボタン（通常は再生ボタンのようなアイコン）をクリックすると、結果が下部のエリアに表示されます。

**5.4. 目的のデータ（例文テキストなど）を探す戦略**

1.  **有望なデータベースファイルから順に開く:**
    パート4でリストアップした `databases` フォルダ内のファイルのうち、名前に `Phrases`, `Words`, `Courses`, `firestore` といった単語が含まれるものや、`FEL_` で始まるファイルから優先的に調べていきましょう。
2.  **テーブル名とカラム名を注意深く観察:**
    * 「データベース構造」タブでテーブル名の一覧を見て、例文が格納されていそうなテーブルにアタリをつけます。
    * 「データを閲覧」タブでそのテーブルを開き、カラム名と実際のデータ内容を確認します。
        * 例文テキストそのものがありそうなカラム (例: `text`, `sentence`, `original_text`, `translated_text`, `target_text`, `phrase_content`)
        * どの言語のデータかを示すカラム (例: `lang_code`, `language_id`, `locale`)
        * 他のデータと関連付けるためのID (例: `phrase_id`, `word_id`, `lesson_id`)
3.  **複数のテーブルに情報が分散している可能性:**
    一つのテーブルに全ての情報（例文、翻訳、言語コードなど）がまとまっているとは限りません。例えば、あるテーブルに例文のIDと原文テキスト、別のテーブルに同じIDと翻訳テキスト、さらに別のテーブルに言語IDと言語名、といった形で情報が正規化されて格納されていることもよくあります。その場合は、IDを頼りに複数のテーブルを関連付けて考える必要があります。

**5.5. データの取得（エクスポート）**

目的の例文テキストが含まれるテーブルやカラムを見つけたら、そのデータをPCにファイルとして保存（エクスポート）できます。

* **A. テーブル全体をCSVファイルとしてエクスポート:**
    1.  「データを閲覧」タブで目的のテーブルを表示している状態で、メニューバーの「**ファイル (File)**」→「**エクスポート (Export)**」→「**テーブルをCSVファイルとしてエクスポート... (Table(s) to CSV file...)**」を選択します。
    2.  エクスポートしたいテーブルを選択（複数選択も可能）し、CSVファイルの設定（区切り文字、ヘッダー行を含めるかなど）を確認して保存します。
* **B. SQLクエリの実行結果をCSVファイルとしてエクスポート:**
    1.  「SQLを実行」タブで、目的のデータを抽出するための `SELECT` クエリを実行します。（例: `SELECT original_sentence, japanese_translation FROM SentencesTable WHERE language_id = 49;`）
    2.  クエリ結果が下部に表示されたら、その結果エリアの近くにある「**結果をファイルに保存**」のようなボタン（通常はフロッピーディスクのアイコンなど）をクリックするか、「ファイル」メニューから「**SQLの結果をエクスポート... (Export SQL results...)**」のような選択肢を探します。
    3.  保存形式としてCSVなどを選択し、ファイルとして保存します。

エクスポートしたCSVファイルは、Excel、LibreOffice Calc、Googleスプレッドシートなどの表計算ソフトや、テキストエディタで開くことができ、例文テキストをまとめて閲覧したり、さらに加工したりするのに便利です。

**5.6. データ探索のヒント**

* **一箇所見て諦めない:** 目的のデータがすぐに見つからなくても、複数のデータベースファイル、複数のテーブルを根気よく調べてみましょう。
* **カラム名とデータ内容の両方を見る:** カラム名だけでは意味が分かりにくい場合でも、実際のデータを見てみると推測できることがあります。
* **小さなデータセットで試す:** `LIMIT` 句を使ったSQL (`SELECT * FROM table_name LIMIT 100;`) で少量のデータを表示させ、構造を把握してから全データを対象にするなど、効率的に進めましょう。

---

これでパート5は完了です。PCに抽出したデータベースファイルを解析し、目的の情報を探し出して取得するための具体的な手順を説明しました。
実際にDB Browser for SQLiteを使い、いくつかのデータベースファイルを開いてみて、例文が格納されていそうなテーブルやカラムが見つかるかどうか、試してみてください。

もし、特定のテーブルやカラムについて「これかもしれない」というものが見つかったり、SQLクエリの書き方で困ったりした場合は、その情報（データベース名、テーブル名、カラム名、どのようなデータを抽出したいかなど）を教えていただければ、さらに具体的なアドバイスが可能です。