如何检查数据库没有rooted的Android设备

我正在开发一个应用程序,我正在使用sqllite3数据库来存储值。我有Nexus S和Nexus 7都是未连接的设备。如何获取我的应用程序的数据库进行调试。

我努力了
(1)我已经尝试了所有的方法here

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

这说cp没有找到..

(2)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/";
    }

并添加以下权限(感谢@Sathesh指出这一点):

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

我在数据库写入时调用这个方法,以便我最新的数据库文件位于外部存储器中,我可以从中查看并调试。

然后,您可以使用X-Plore app从Android设备上的外部存储器查看数据库。

http://stackoverflow.com/questions/17883447/how-to-check-database-on-not-rooted-android-device

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:如何检查数据库没有rooted的Android设备