我正在用我的 Nexus One 尝试这个。我有 android SDK 并使用了命令 adb pull /data/data/com.myapp.android/databases C:\pulls 但我得到的只是 pull: building file list... 0 个文件被拉取。跳过 0 个文件。此外,无论我在安装的教程 NotePad 应用程序中添加多少数据,应用程序的数据大小(如“设置”中所示)似乎都不会超过 8KB。这怎么可能?还有其他存储数据库的地方吗?当我在 Eclipse 中使用文件资源管理器视图(这是 ADT 的一部分)时,我看到 /data 中没有任何内容。为了增加一点,我可以毫不费力地从设备中提取任何其他文件。这只是我遇到问题的数据库。我错过了什么吗?非常感谢。
问问题
5177 次
3 回答
10
除非您的手机已植根,否则无法访问内部存储。一种简单的方法是使用模拟器,然后您可以获取文件。为了从设备上获取数据库,我编写了一个小实用程序并为其添加了一些调试 UI:
private void backupDb() throws IOException {
File sd = Environment.getExternalStorageDirectory();
File data = Environment.getDataDirectory();
if (sd.canWrite()) {
String currentDBPath = "/data/com.yourcompany.yourapp/databases/yourapp.db";
String backupDBPath = "/yourapp_logs/yourapp.db";
File currentDB = new File(data, currentDBPath);
File backupDB = new File(sd, backupDBPath);
if (backupDB.exists())
backupDB.delete();
if (currentDB.exists()) {
makeLogsFolder();
copy(currentDB, backupDB);
}
dbFilePath = backupDB.getAbsolutePath();
}
}
private void makeLogsFolder() {
try {
File sdFolder = new File(Environment.getExternalStorageDirectory(), "/yourapp_logs/");
sdFolder.mkdirs();
}
catch (Exception e) {}
}
private void copy(File from, File to) throws FileNotFoundException, IOException {
FileChannel src = null;
FileChannel dst = null;
try {
src = new FileInputStream(from).getChannel();
dst = new FileOutputStream(to).getChannel();
dst.transferFrom(src, 0, src.size());
}
finally {
if (src != null)
src.close();
if (dst != null)
dst.close();
}
}
于 2010-11-17T06:42:42.657 回答
0
如果您使用的是 MAC 或 Linux,请尝试此脚本。这不需要root权限
#!/bin/bash
REQUIRED_ARGS=2
ADB_PATH=/Users/Tadas/Library/sdk/platform-tools/adb
PULL_DIR="~/"
if [ $# -ne $REQUIRED_ARGS ]
then
echo ""
echo "Usage:"
echo "android_db_move.sh [package_name] [db_name]"
echo "eg. android_db_move.sh lt.appcamp.impuls impuls.db"
echo ""
exit 1
fi;
echo""
cmd1="$ADB_PATH -d shell 'run-as $1 cat /data/data/$1/databases/$2 > /sdcard/$2' "
cmd2="$ADB_PATH pull /sdcard/$2 $PULL_DIR"
echo $cmd1
eval $cmd1
if [ $? -eq 0 ]
then
echo ".........OK"
fi;
echo $cmd2
eval $cmd2
if [ $? -eq 0 ]
then
echo ".........OK"
fi;
exit 0
于 2013-04-09T09:03:05.070 回答
0
在 Windows 桌面中创建一个“pull.bat”文件。
在文件中放置:
db pull /data/com.APPNAME/databases/DBNAME.sqlite
pause
于 2012-09-04T14:39:07.023 回答