Android的ADB访问应用程序数据库,而根Android的ADB访问应用程序数据库,而根(And

2019-05-13 03:06发布

谁能告诉我,是不是可以使用ADB在手机上拉,并从一个应用程序发送数据库,没有root权限?

例如,我知道我的根魔术和梦想的位置是:

/data/data/com.xxxx.xxxx/databases/xxxx

我知道,你可以使用ADB无根,而是试图使用shell时 - 你不能没有根privaliges查看该位置。 但有人告诉我,你可以使用推拉如果你知道你想要的文件?

基本上,我想从我的应用程序拉数据库中的非根植在手机上修改它,并将它推回。

唯一的麻烦我已经是,两款手机我是根和我没有访问到非根一个尝试一下。

Answer 1:

虽然Nilhcem的回答并没有为我工作,这导致我在正确的方向(即我upvoted),我现在有一个可行的解决方案。

旧的答案,可能无法与Android的新版本的工作:

#Transfer file from app databases directory to PC
adb shell
$ run-as package.name
$ cd ./databases/
$ ls -l #Find the current permissions - r=4, w=2, x=1
$ chmod 666 ./dbname.db
$ exit
$ exit
adb pull /data/data/package.name/databases/dbname.db ~/Desktop/

#Transfer file from PC to app databases directory (requires the above permission change)
adb push ~/Desktop/dbname.db /data/data/package.name/databases/dbname.db
adb shell
$ run-as package.name
$ chmod 660 ./databases/dbname.db #Restore original permissions
$ exit
$ exit

使用外部存储(证实6.0.1工作)另一种方法:

#Transfer file from app databases directory to external storage
adb shell
$ run-as package.name
$ cp ./databases/dbname.db /sdcard/
$ exit
$ exit

#Transfer file from external storage to app databases directory
adb shell
$ run-as package.name
$ cp /sdcard/dbname.db ./databases/
$ exit
$ exit


Answer 2:

一种解决方法是使用run-as命令将数据库文件夹中复制,你可以访问,如/sdcard ,然后,做一个正常的adb pull

adb shell
$ run-as package.name cp /data/data/package.name/dbname.db /sdcard/
$ exit
adb pull /sdcard/dbname.db

上运行的命令的详细信息在这里

注意, run-as命令是因为API级8个可用(Android 2.2的),并且如果该应用程序是仅可用于debbugable 。



Answer 3:

OxygenOS (基于Android 5.2),我已经混了所提供的两种解决方案Pilot_51

首先,我已经使用run-as获得关于访问/data/data/package.name/databases从这里我无法直接复制在/sdcard/所以我改变了文件的权限。 从那以后,我已经从退出run-as模式和所使用cp复制在文件/sdcard/存储。 最后,我能够使用adb pull

$ adb -s <DEVICE_ID> shell
$ run-as package.name
$ chmod 666 databases/dbname.db
$ exit
$ cp /data/data/package.name/databases/dbname.db /sdcard/dbname.db
$ exit
$ adb pull /sdcard/dbname.db ./dbname.db


Answer 4:

我们从应用程序中设置文件权限读取所有用户。

if (BuildConfig.DEBUG)
{
    new File(mDB.getPath()).setReadable(true, false);
}

然后,只需拉带.db了与亚行正常。

adb -d pull //data/data/xxxxx/databases/xxxxx.db .

注:我发现,这需要每一个数据库文件被打开,例如在时间的onCreate以及您SQLiteOpenHelper包装的构造函数(当你的数据库不为空),或者可能的OnOpen工作要做。 如果只是在的onCreate,那么下次你运行你的应用程序和.db的已经存在的时候,由于某些原因,权限已被改回来。 这可能有一些做与Android如何管理其数据。



Answer 5:

如果你想要把数据库文件到应用程序

首先,地方“file.db”下的“/存储/模拟/ 0 /”,因为权限问题的。 那么你应该假装为应用程序访问数据的文件夹。

  adb shell
  $ run-as com.package.name
  :/data/data/com.package.name $ cp /storage/emulated/0/file.db /data/data/com.package.name/databases/

它复制file.db,在主文件夹中的数据库。



文章来源: Android ADB access to application databases without root
标签: android adb root