Android 通过 adb 备份完整的短信/彩信内容

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/12266374/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-20 10:15:17  来源:igfitidea点击:

backup full sms/mms contents via adb

android

提问by KDEx

I've been attempting to use adb to pull the sms/mms inbox in its entirety from the device but am having some trouble. The phone is rooted and I've tried the following commands:

我一直在尝试使用 adb 从设备中完整地提取 sms/mms 收件箱,但遇到了一些问题。手机已root,我尝试了以下命令:

Input

输入

./adb pull /data/data/com.android.providers.telephony/databases/mmssms.db

output

输出

Permission denied

Input

输入

./adb pull su /data/data/com.android.providers.telephony/databases/mmssms.db

Output

输出

The help menu

Am I flawed in my thinking that I can pull the sms inbox via commands similar to the ones I've tried? If it can be done what is wrong with my command?

我是否认为我可以通过类似于我尝试过的命令来拉取短信收件箱?如果可以完成,我的命令有什么问题?

Thanks

谢谢

回答by Bonlenfum

One way to fetch contents of the /data directory is to first copy the sqlite db to somewhere that is accessible, and then using adb pull to copy from there to the host.

获取 /data 目录内容的一种方法是首先将 sqlite db 复制到可访问的某个地方,然后使用 adb pull 从那里复制到主机。

For example, the following commands use the android bridge to grab the sms data (assuming it is contained in /data/data/com.android.providers.telephony/databases/mmssms.db):

例如,以下命令使用 android 桥接器来抓取 sms 数据(假设它包含在 /data/data/com.android.providers.telephony/databases/mmssms.db 中):

adb shell
$ mkdir /mnt/sdcard/tmp
# su
# cat /data/data/com.android.providers.telephony/databases/mmssms.db > /mnt/sdcard/tmp/mmssms.db
# exit
$ exit
adb pull /mnt/sdcard/tmp/mmssms.db .

Now you have the mms/sms database on your host machine, probe to find most popular recipient, for example:

现在您的主机上已经有了 mms/sms 数据库,可以通过探测找到最受欢迎的收件人,例如:

sqlite3 -header mmssms.db 'select address from sms' | sort -n | uniq -c | sort -n

Finally, tidy up the temp area:

最后,整理一下临时区域:

adb shell
$ rm /mnt/sdcard/tmp/mmssms.db
$ rmdir /mnt/sdcard/tmp
$ exit

回答by TruckeeAviator

You have to give ADB root privalages before you pull that database

在拉取该数据库之前,您必须给 ADB 根权限

adb root

adb pull /data/data/com.android.providers.telephony/databases/mmssms.db ./

回答by skataben

Thanks to @Bonlenfum's answer I was able to come up with a reusable script for copying any file/directory on a rooted device to a Windows path (local or UNC).

感谢@Bonlenfum 的回答,我能够想出一个可重用的脚本,用于将有根设备上的任何文件/目录复制到 Windows 路径(本地或 UNC)。



Edit: Fixed bug with paths containing spaces.

编辑:修复了路径包含空格的错误。



Save the following as: adbSuPull.bat

将以下内容另存为:adbSuPull.bat

@echo off

SetLocal
set RemotePath=%~1
set LocalPath=%~f2

if [%1] == [] goto Usage
if "%~1" == "/?" goto Usage
if not [%3] == [] goto Usage

:: Replace " " with "\ " (escape spaces)
set RemotePath=%RemotePath: =\ %

set TimeStamp=%date:~-4,4%-%date:~-10,2%-%date:~-7,2%_%time:~-11,2%-%time:~-8,2%-%time:~-5,2%

:: Replace spaces with zeros
set TimeStamp=%TimeStamp: =0%

if "%LocalPath%" == "" set LocalPath=adbSuPull_%UserName%_%TimeStamp%
set SdCardPath=/mnt/sdcard
set TempPath=%SdCardPath%/adbSuPull_temp_%TimeStamp%/

echo.
echo Copying to temp location "%TempPath%"
echo.
adb shell "su -c 'mkdir -p %TempPath%; cp -RLv %RemotePath% %TempPath%'"

echo.
echo Copying to destination "%LocalPath%"
echo.
adb pull "%TempPath%" "%LocalPath%"
if ErrorLevel 0 goto Cleanup

:Error
echo.
echo Operation failed. Is USB Storage in use?
echo.
pause
call Cleanup
exit /b 1

:Cleanup
echo.
echo Removing temp location "%TempPath%"
echo.
adb shell "rm -Rf '%TempPath%'"
exit /b ErrorLevel

:Usage
echo.
echo.adbSuPull ^<RemotePath^> [^<LocalPath^>]
echo.
echo Copies files/directories from a rooted Android device to a Windows path.
echo Author: Ben Lemmond [email protected]
echo.
echo.  RemotePath (required)  Specifies the path to the file or directory on
echo.                         the rooted Android device.
echo.
echo.  LocalPath (optional)   Specifies the destination path. This can be a
echo.                         Windows local path (C:\folder) or a UNC path
echo.                         (\server\share).
echo.                         Defaults to adbSuPull_%%UserName%%_%%TimeStamp%%
echo.                         in the current working directory.
exit /b 1


Usage:

用法:

adbSuPull <RemotePath> [<LocalPath>]

Copies files/directories from a rooted Android device to a Windows path.
Author: Ben Lemmond [email protected]

  RemotePath (required)  Specifies the path to the file or directory on
                         the rooted Android device.

  LocalPath (optional)   Specifies the destination path. This can be a
                         Windows local path (C:\folder) or a UNC path
                         (\server\share).
                         Defaults to adbSuPull_%UserName%_%TimeStamp%
                         in the current working directory.