如何检查数据库有没有扎根android设备?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (11)

我正在开发一个应用程序,我正在使用sqllite3数据库来存储值。我有Nexus S和Nexus 7都是无根据的设备。如何获取用于调试目的的应用程序的数据库:

adb shell
run-as app.package.name \
cp /data/data/package.name/databases/application.sqlite /sdcard/
exit
adb pull /sdcard/application.sqlite ~/

我参考了这里的文档:http://developer.android.com/tools/help/adb.html#sqlite

adb -s emulator-5554 shell
# sqlite3 /data/data/com.example.google.rss.rssexample/databases/rssitems.db
SQLite version 3.3.12
Enter ".help" for instructions
.... enter commands, then quit...
sqlite> .exit 
提问于
用户回答回答于

你可以使用以下命令将数据库写入外部存储器:

private void writeToSD() throws IOException {
    File sd = Environment.getExternalStorageDirectory();

    if (sd.canWrite()) {
        String currentDBPath = DB_NAME;
        String backupDBPath = "backupname.db";
        File currentDB = new File(DB_PATH, 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();
        }
    }
}

DB_NAME我的数据库的名称在哪里,DB_PATH定义如下:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
        DB_PATH = context.getFilesDir().getAbsolutePath().replace("files", "databases") + File.separator;
    }
    else {
        DB_PATH = context.getFilesDir().getPath() + context.getPackageName() + "/databases/";
    }

并添加以下权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

用户回答回答于

以下解决方案仅适用于可调试的应用程序。它可能无法在所有设备上正常运行,因为run-as命令在某些设备上不起作用,尤其是在使用Jelly Bean的情况下:

  1. 创建一个* .bat文件并复制下面的脚本 adb shell run-as [package] chmod 777 / data / data / [package] / databases / adb shell run-as [软件包] chmod 777 / data / data / [软件包] / databases / [db_file_name] adb shell run-as [package] cp / data / data / [package] / databases / [db_file_name] / sdcard / adb pull / sdcard / [db_file_name]
  2. 将[package]更改为所需的应用程序包
  3. 将[db_file_name]更改为所需的db名称运行bat文件,您应该在与bat文件相同的文件夹中看到复制的数据库

上述解决方案假定:

  • 您正在使用Windows
  • 该设备连接并在“adb设备”下可见

扫码关注云+社区