Резервное копирование содержимого sms/mms через adb
Я пытаюсь использовать adb, чтобы полностью вытащить входящие сообщения sms/mms с устройства, но у меня есть некоторые проблемы. Телефон укоренен, и я пробовал следующие команды:
Ввод
./adb pull /data/data/com.android.providers.telephony/databases/mmssms.db
Выход
Permission denied
Вход
./adb pull su /data/data/com.android.providers.telephony/databases/mmssms.db
Выход
The help menu
Неужели я ошибаюсь в своем мнении, что могу вытащить SMS-сообщения в виде сообщений с помощью команд, подобных тем, которые я пробовал? Если это может быть сделано с моей командой?
Спасибо
Ответы
Ответ 1
Один из способов получить содержимое каталога /data - сначала скопировать sqlite db в доступное место, а затем использовать adb pull для копирования оттуда на хост.
Например, следующие команды используют мост 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 .
Теперь у вас есть база данных mms/sms на вашей главной машине, чтобы найти наиболее популярного получателя, например:
sqlite3 -header mmssms.db 'select address from sms' | sort -n | uniq -c | sort -n
Наконец, уберите область темпа:
adb shell
$ rm /mnt/sdcard/tmp/mmssms.db
$ rmdir /mnt/sdcard/tmp
$ exit
Ответ 2
Благодаря ответу @Bonlenfum мне удалось найти многоразовый script для копирования любого файла/каталога на корневом устройстве на путь Windows (локальный или UNC).
Изменить. Исправлена ошибка с путями, содержащими пробелы.
Сохраните следующее как: 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
Использование:
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.
Ответ 3
Вы должны предоставить приоритеты ADB root, прежде чем вытащить эту базу данных
adb root
adb pull /data/data/com.android.providers.telephony/databases/mmssms.db ./