私はすでにAndroid携帯をroot化せずにdbにアクセスする方法を見つけるために無駄に広範囲に検索しました。AVDは非常に遅いので使いたくありません。しかし、私が何をしているのかを確認するには、何らかの方法でPCまたは電話からapp.dbファイルにアクセスする必要があります。
/data/data//databases/.dbは、実際のデバイスでは機能しません。
それで、私が私のデータベースを見ることができるいくつかの方法を私に提案してください。
内部 (保護された) メモリから SD カードなどの外部 (保護されていない) メモリに DB をコピーする関数をアプリで作成します。次に、PC (または、必要に応じてデバイス自体から Android DB リーダー) でアクセスできます。
特定のイベントでアプリケーションにコードを追加するだけで、DB が SD カードにコピーされます。実際の DB ではなく、DB/データのコピーになります。SD カードからいつでも DB にアクセスできます。これは回避策ですが、私にとってはうまくいきます。
ここにコードがあります
try {
File sd = Environment.getExternalStorageDirectory();
File data = Environment.getDataDirectory();
if (sd.canWrite()) {
String currentDBPath = "data/"+sPackageName+"/databases/"+sDBName;
String backupDBPath = "/.appname-external-data-cache/"+sDBName; //"{database name}";
File dir = new File(sd,backupDBPath.replace(sDBName,""));
if(dir.mkdir()) {
}
File currentDB = new File(data, currentDBPath);
File backupDB = new File(sd, backupDBPath);
if (currentDB.exists()) {
FileChannel src = new FileInputStream(currentDB).getChannel();
FileChannel dst = new FileOutputStream(backupDB).getChannel();
dst.transferFrom(src, 0, src.size());
src.close();
dst.close();
}
}
} catch (Exception e) {
}
これがあなたが求めていると思うコードです:
try {
// Backup of database to SDCard
db.open();
File newFile = new File(Environment.getExternalStorageDirectory(), "BackupFileNameHere");
InputStream input = new FileInputStream("/data/data/com.YourProjectName/databases/DatabaseNameHere");
OutputStream output = new FileOutputStream(newFile);
// transfer bytes from the Input File to the Output File
byte[] buffer = new byte[1024];
int length;
while ((length = input.read(buffer))>0) {
output.write(buffer, 0, length);
}
output.flush();
output.close();
input.close();
db.close();
} catch (Exception e) {
}
これがお役に立てば幸いです。