如何在没有ROOT的情况下从我的Android应用程序下载我的sqlite数据库?

时间:2014-03-26 16:40:40

标签: android adb

我试图下载我的sqlite数据库,以便我可以查看它的内容(我们的应用程序进行在线离线同步,我试图确保它只从API 中删除它应该的内容。

我试图使用adb pull /data/data/com.mycompany.myapp/files/db.sqlite3,但我一直拒绝接受许可。

我尝试通过shell登录并将其复制到SD卡,但我也得到了许可(我不想在我的Manifest中添加SDCard访问权限)。

$ adb shell
$ run-as com.mycompany.myapp
$ cd files
$ cp db.sqlite3 /mnt/sdcard/db.sqlite3
$ PERMISSION DENIED

没有ROOT权限,如何从我的Android设备下载我的sqlite文件到一个允许我访问的位置?

1 个答案:

答案 0 :(得分:3)

下载(如你所见)非常棘手,但并非不可能。

以下是获取文件并将其移至本地计算机的步骤 注意:我在Windows上,但只要您知道本地路径,就可以在其他设备上完成。

$ adb shell                         // enter into shell
$ run-as [com.mycompany.myapp]      // log in as your app
$ cd [files]                        // navigate to the path of the file you need access to.
$ chmod 0644 [db.sqlite3]           // DANGEROUS: change the permissions of said file allow you access via adb pull
$ {ctrc} + {c}                      // Exit Shell
$ adb pull [/data/data/com.mycompany.myapp/files/db.sqlite3] [c:\db.sqlite3] // pull the file to your local machine.

从那里,您可以导航到输出目录并访问该文件。

  

注意:<方形括号中的任何内容都是一个变量,您将使用自己的变量填充。
  注意 {ctrl} + {c}在Windows上的PowerShell中,其他平台可能不同。

我还创建了一个简单的Powershell脚本,可以自动执行此操作。

$appName = 'com.mycompany.myapp'
$dbName  = 'db'

adb shell "run-as $appName chmod 644 /data/data/$appName/files/$dbName"
adb pull "/data/data/$appName/files/$dbName" "./$dbName.sqlite3"
Invoke-Item ".\$dbName.sqlite3"