我到处寻找,我找不到真正准确的答案或教程,如果可能的话,如何做到这一点.
是否有可能以任何方式提取Android设备的数据库而无需root用户?我只需要以任何方式提取数据,以便将其收集到我的电脑上,那么我该如何执行此操作呢?我是否需要重新编程应用程序或您知道的任何方法,但请记住,不要使用设备.谢谢
Ser*_*gei 178
如果您的设备运行的是Android V4或以上,你可以拉应用数据,包括它的数据库,而不使用根adb backup命令,然后提取备份文件和访问SQLite数据库.
首先使用以下命令通过USB电缆将应用程序数据备份到PC,替换app.package.name为应用程序的实际软件包名称.
adb backup -f ~/data.ab -noapk app.package.name
Run Code Online (Sandbox Code Playgroud)
这将提示您"解锁设备并确认备份操作".请勿为备份加密提供密码,以便稍后解压缩.单击设备上的"备份我的数据"按钮.屏幕将显示您要备份的软件包的名称,然后在成功完成后自行关闭.
data.ab主文件夹中生成的文件包含android备份格式的应用程序数据.要提取它,请使用以下命令:
dd if=data.ab bs=1 skip=24 | openssl zlib -d | tar -xvf -
Run Code Online (Sandbox Code Playgroud)
如果以上openssl:Error: 'zlib' is an invalid command.错误结束,请尝试以下操作.
dd if=data.ab bs=1 skip=24 | python -c "import zlib,sys;sys.stdout.write(zlib.decompress(sys.stdin.read()))" | tar -xvf -
Run Code Online (Sandbox Code Playgroud)
结果是apps/app.package.name/包含应用程序数据的文件夹,包括sqlite数据库.
有关详细信息,请查看原始博文.
Kar*_*som 77
实现所需的常用方法是使用ADB pull命令.
在大多数情况下,我更喜欢的另一种方法是通过代码将数据库复制到SD卡:
try {
File sd = Environment.getExternalStorageDirectory();
if (sd.canWrite()) {
String currentDBPath = "/data/data/" + getPackageName() + "/databases/yourdatabasename";
String backupDBPath = "backupname.db";
File currentDB = new File(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();
}
}
} catch (Exception e) {
}
Run Code Online (Sandbox Code Playgroud)
不要忘记在清单中设置写入SD的权限,如下所示.
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Run Code Online (Sandbox Code Playgroud)
小智 68
对于非root设备上的可调试应用程序 1,您可以使用以下命令:
adb shell run-as package.name chmod 666 /data/data/package.name/databases/file
adb pull /data/data/package.name/databases/file
Run Code Online (Sandbox Code Playgroud)
例:
adb shell run-as com.app chmod 666 /data/data/com.app/databases/data.db
adb pull /data/data/com.app/databases/data.db
Run Code Online (Sandbox Code Playgroud)
为环境变量设置PATH adb或使用cd命令到android sdk文件夹platform-tools.
例:
cd /folder/android-sdk/platform-tools/
Run Code Online (Sandbox Code Playgroud)
然后使用上面的命令
1请注意,Play商店中的大多数应用程序都不可调试,因为它需要在清单中设置debuggable标志.
Xav*_*ler 53
这里的大部分答案都比以前更加复杂.如果您只想将应用程序的数据库从手机复制到计算机,那么您只需要以下命令:
adb -d shell "run-as your.package.name cat databases/database.name" > target.sqlite
Run Code Online (Sandbox Code Playgroud)
您需要在上面的命令中填写的是您的应用程序的包名称,数据库的调用内容以及您希望将数据库复制到的位置/位置.
请注意,只有当您的计算机只连接了一台设备时,此特定命令才有效.该-d参数表示将定位唯一连接的设备.但是您可以使用其他参数:
-e 将针对唯一正在运行的模拟器 -s <serialnumber> 将针对具有特定序列号的设备.
Sha*_*dul 35
如果应用程序在非root设备上以调试模式运行,则可以使用Android Studio 3.0或更高版本来提取数据库(也可以是共享首选项,缓存目录等).
要使用android studio拉数据库,请按照以下步骤操作.
adb shell "run-as [package.name] chmod -R 777 /data/data/[package.name]/databases"
adb shell "mkdir -p /sdcard/tempDB"
adb shell "cp -r /data/data/[package.name]/databases/ /sdcard/tempDB/."
adb pull sdcard/tempDB/ .
adb shell "rm -r /sdcard/tempDB/*"
Run Code Online (Sandbox Code Playgroud)
对于Ubuntu(不仅仅是?):
请参阅Sergeis Answer但不使用openssl使用zlib-flate:
cat appbackup.ab | (dd bs = 24 count = 0 skip = 1; cat)| zlib-flate -uncompress> appbackup.tar
否则openssl可能会抛出:
openssl:错误:'zlib'是一个无效的命令.
因为在Ubuntu中没有使用zlib支持编译openssl
| 归档时间: |
|
| 查看次数: |
105200 次 |
| 最近记录: |