31

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受信ボックスをプルできるという私の考えに欠陥がありますか?それができるなら、私のコマンドの何が問題になっていますか?

ありがとう

4

3 に答える 3

45

/ dataディレクトリの内容をフェッチする1つの方法は、最初にsqlite dbをアクセス可能な場所にコピーし、次にadbpullを使用してそこからホストにコピーすることです。

たとえば、次のコマンドは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
于 2012-12-16T19:01:26.777 に答える
9

そのデータベースをプルする前に、ADBにルート権限を与える必要があります

adb root

adb pull /data/data/com.android.providers.telephony/databases/mmssms.db ./
于 2016-04-06T15:08:48.780 に答える
4

@Bonlenfumの回答のおかげで、ルート化されたデバイス上の任意のファイル/ディレクトリを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 benlemmond@codeglue.org
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 benlemmond@codeglue.org

  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.
于 2014-08-09T23:52:54.927 に答える