1. ホーム
  2. android

[解決済み] デバイス上のsqliteデータベースのデバッグ

2023-01-02 09:02:25

質問

現在、Android用のWiFiアプリケーションを制作しています。デバイス上のデータベースにアクセスしようとすると、問題が発生します。エミュレータでのデバッグは、エミュレータに WiFi サポートがないため、私のために動作しません。私は、以下を使用してデバイスからデータベース ファイルを取り出そうとしました。

adb pull data/data/package-name/databases/database-name

しかし、私はエラー"Permission denied."が表示されます。 この回答では Androidです。データベースファイルはどこに保存されていますか? コモンズウェアでは、デバッグモードで実行することにより、データベースファイルを引き出すことを提案しています。しかし、それもうまくいきません。デバイスを root 化することなくデータベースをデバッグする方法について、何らかの助力があれば幸いです。

どのように解決するのですか?

からの繰り返しになりますが 別の答え :

<ブロッククオート

API レベル 8 (Android 2.2) 以降、アプリケーションをデバッグ可能としてビルドした場合、シェル run-as コマンドを使用して、特定のユーザー/アプリケーションとしてコマンドや実行ファイルを実行するか、または単にスイッチで UID に切り替えて、アプリケーションのデータディレクトリにアクセスできるようにします。

したがって、デバイスからアプリケーションのデータベースを取得したい場合は、アプリケーションのデバッグビルドを実行し、アプリケーションのデータディレクトリにアクセスするために adb shell に接続し、次のコマンドを実行します。

run-as com.yourpackage sh -c "cat ~/databases/db-file" > /sdcard/db-file.sqlite

これは、あなたの db-file をSDカード/外部ストレージのルートにコピーします。これで、そこからファイルマネージャを使って簡単に取得できるようになります。 adb pull などで簡単に取得できます。なお、この方法では、アプリに WRITE_EXTERNAL_STORAGE パーミッションを持つ必要がないことに注意してください。

Linux/Mac システムでは、adb シェルに入らずに使用できる次のコマンドで、データベースをコンピューターに直接コピーできる可能性があります。

adb shell 'run-as com.yourpackage sh -c "cat ~/databases/db-file"' > db-file.sqlite

ただし、WindowsではCR/LF記号の変換の関係で、この方法は正しく動作しません。そこで、前者の方法を用いてください。