4

アプリで作成したデータベースの内容を、展開したデバイスで確認したいと考えています。シェルで sqlite コマンドを使用してエミュレーターで表示できますが、実際のデバイスでは表示できません。

実際のデバイスでそれを行う方法を知っている人はいますか?

4

5 に答える 5

7

アプリケーションにデバッグ可能フラグが設定されている場合、root は必要ありません。run-asadb コマンドを使用できます。

たとえば、sqlite を使用するには:

adb shell "run-as com.your.package sqlite3 databases/database_name"

またはデータベースをコピーしてプルします。

adb shell "run-as com.your.package cat databases/database_name > /sdcard/some_name"
adb pull /sdcard/some_name

残念ながら、ICS 以前にrun-asはかなりの数のバグがあるようです。たとえば、問題20792または13965

于 2013-01-04T13:01:29.643 に答える
2

実際、実デバイスはルート化されていないため、ディレクトリにアクセスする権限がありません。 /data/data/<Application>/database/

そのファイルを外部ストレージにコピーするソリューションは1つだけです..そして、SQLiteManagerまたは他のSQLiteツールでそれを参照してください。

于 2013-01-04T10:40:08.403 に答える
1

sqliteにアクセスするにはroot化されたデバイスが必要だと思います。

この議論を見てください。

于 2013-01-04T10:41:34.167 に答える
0

これを試して、

データベースをSDカードにコピーして、データベースを表示できます

   public void backup() {
        try {
            File sdcard = Environment.getExternalStorageDirectory();
            File outputFile = new File(sdcard,
                    "YourDatabase.db");

            if (!outputFile.exists()) 
                 outputFile.createNewFile(); 

            File data = Environment.getDataDirectory();
            File inputFile = new File(data,
                    "data/"+getPackageName()+"/databases/"+"YourDatabase.db");
            InputStream input = new FileInputStream(inputFile);
            OutputStream output = new FileOutputStream(outputFile);
            byte[] buffer = new byte[1024];
            int length;
            while ((length = input.read(buffer)) > 0) {
                output.write(buffer, 0, length);
            }
            output.flush();
            output.close();
            input.close();
        } catch (IOException e) {
            e.printStackTrace();
            throw new Error("Copying Failed");
        }
    }

それが役に立てば幸い。

于 2013-01-04T10:45:55.547 に答える
0

この関数を次のように試してください

copyFile(new File("data/data/<app>/database"),new File("mnt/sdcard/....")).

public void copyFile(File filesrc, File filedst)
 {
  try
 {
  FileInputStream localFileInputStream = new FileInputStream(filesrc);
  FileOutputStream localFileOutputStream = new FileOutputStream(filedst);
  byte[] arrayOfByte = new byte[1024];
  while (true)
  {
    int i = localFileInputStream.read(arrayOfByte);
    if (i == -1)
    {
      localFileOutputStream.close();
      localFileInputStream.close();
      break;
    }
    localFileOutputStream.write(arrayOfByte, 0, i);
  }
}
catch (Exception localException)
{
  Log.d("XXX", "ExceptioncopyFile:" + localException.getMessage(), localException);
}

}

于 2013-01-04T10:46:44.187 に答える