アプリで作成したデータベースの内容を、展開したデバイスで確認したいと考えています。シェルで sqlite コマンドを使用してエミュレーターで表示できますが、実際のデバイスでは表示できません。
実際のデバイスでそれを行う方法を知っている人はいますか?
アプリケーションにデバッグ可能フラグが設定されている場合、root は必要ありません。run-as
adb コマンドを使用できます。
たとえば、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
実際、実デバイスはルート化されていないため、ディレクトリにアクセスする権限がありません。 /data/data/<Application>/database/
そのファイルを外部ストレージにコピーするソリューションは1つだけです..そして、SQLiteManagerまたは他のSQLiteツールでそれを参照してください。
sqliteにアクセスするにはroot化されたデバイスが必要だと思います。
この議論を見てください。
これを試して、
データベースを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");
}
}
それが役に立てば幸い。
この関数を次のように試してください
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);
}
}