실행 도구를 사용하여 내부 저장소에서 데이터베이스 또는 기타 파일 검색
루팅되지 않은 Android 장치에서 run-as
패키지 이름과 함께 명령을 사용하여 데이터베이스가 포함 된 데이터 폴더로 이동할 수 있습니다 . 대부분의 파일 형식은보기만으로 만족하지만 데이터베이스를 사용하는 경우 Android 장치에서 가져오고 싶습니다.
있는가 download
copy
또는 move
ADB 쉘의이 부분에서 명령은? 데이터베이스 파일을 다운로드하고 데이터베이스 브라우저를 사용하여 그 내용을보고 싶습니다.
여기에 한 가지 대답은 전체 애플리케이션 패키지를 압축 된 아카이브로 바꾸는 것이지만, 일단 이것이 완료되고 머신으로 이동되면 해당 아카이브를 추출하는 방법에 대한 더 이상의 대답이 없으므로 시작하기에 더 직접적인 솔루션이있을 때 저를 매우 잊혀지 게됩니다.
user
Android의 설계 빌드 ( 부트 로더 를 잠금 해제하고 userdebug
또는 eng
소프트웨어로 휴대 전화를 플래시 할 때까지 휴대 전화에있는 것임 )는 내부 저장소에 대한 액세스를 제한 합니다. 모든 앱은 자체 파일에만 액세스 할 수 있습니다. 다행히하려하지 소프트웨어 개발자를위한 뿌리 휴대폰 구글이 액세스 할 수있는 방법을 제공합니다 내부 스토리지 의 디버깅 사용하여 패키지의 버전 run-as
명령을 사용합니다.
/data/data/debuggable.app.package.name/databases/file
Android 5.1 이상 기기에서 다운로드하려면 다음 명령어를 실행하세요.
adb exec-out run-as debuggable.app.package.name cat databases/file > file
아래의 폴더에 여러 파일을 한 번에 다운로드하려면 다음 /data/data/debuggable.app.package.name/
을 사용하십시오 tar
.
adb exec-out run-as debuggable.app.package.name tar c databases/ > databases.tar
adb exec-out run-as debuggable.app.package.name tar c shared_prefs/ > shared_prefs.tar
수락 된 답변이 더 이상 작동하지 않습니다 (Android에서 차단 되었습니까?).
그래서 대신 이렇게했습니다.
> adb shell
shell $ run-as com.example.package
shell $ chmod 666 databases/file
shell $ exit ## exit out of 'run-as'
shell $ cp /data/data/package.name/databases/file /sdcard/
shell $ run-as com.example.package
shell $ chmod 600 databases/file
> adb pull /sdcard/file .
디버그 응용 프로그램 에서 데이터베이스를 가져 오려는 사람 은 아래 절차를 사용할 수 있습니다.
- 장치 파일 탐색기 검색 및 열기
- 핸드셋을 선택한 다음
data/data
디렉토리 를 찾습니다.
- 이제 응용 프로그램 패키지를 찾고 데이터베이스 폴더로 이동하십시오. 거기에서 데이터베이스를 볼 수 있으며 마우스 오른쪽 버튼을 클릭하면 드라이브에 저장할 수있는 옵션이 표시됩니다.
데이터베이스 덤프를위한 간단한 셸 스크립트를 게시했습니다.
여기에 설명 된 두 가지 다른 방법을 수행합니다.
- 첫째, 다른 사용자가 파일에 액세스 할 수 있도록하고 장치에서 파일을 가져 오려고합니다.
- If that fails, it streams the contents of the file over the terminal to the local machine. It performs an additional trick to remove
\r
characters that some devices output to the shell.
From here you can use a variety of CLI or GUI SQLite applications, such as sqlite3
or sqlitebrowser
, to browse the contents of the database.
I couldn't get anything else to work for me but this:
adb shell
run-as package.name
cat /databases/databaseFileName.db > /sdcard/copiedDatabaseFileName.db
exit
exit
adb pull /sdcard/copiedDatabaseFileName.db /file/location/on/computer/
The first exit is to exit out of the run-as, the second exit is to exit out of adb shell to do the pull.
For app's debug version, it's very convenient to use command adb exec-out run-as xxx.yyy.zzz cat somefile > somefile
to extract a single file. But you have to do multiple times for multiple files. Here is a simple script I use to extract the directory.
#!/bin/bash
P=
F=
D=
function usage()
{
echo "$(basename $0) [-f file] [-d directory] -p package"
exit 1
}
while getopts ":p:f:d:" opt
do
case $opt in
p)
P=$OPTARG
echo package is $OPTARG
;;
f)
F=$OPTARG
echo file is $OPTARG
;;
d)
D=$OPTARG
echo directory is $OPTARG
;;
\?)
echo Unknown option -$OPTARG
usage
;;
\:)
echo Required argument not found -$OPTARG
usage
;;
esac
done
[ x$P == x ] && {
echo "package can not be empty"
usage
exit 1
}
[[ x$F == x && x$D == x ]] && {
echo "file or directory can not be empty"
usage
exit 1
}
function file_type()
{
# use printf to avoid carriage return
__t=$(adb shell run-as $P "sh -c \"[ -f $1 ] && printf f || printf d\"")
echo $__t
}
function list_and_pull()
{
t=$(file_type $1)
if [ $t == d ]; then
for f in $(adb shell run-as $P ls $1)
do
# the carriage return output from adb shell should
# be removed
mkdir -p $(echo -e $1 |sed $'s/\r//')
list_and_pull $(echo -e $1/$f |sed $'s/\r//')
done
else
echo pull file $1
[ ! -e $(dirname $1) ] && mkdir -p $(dirname $1)
$(adb exec-out run-as $P cat $1 > $1)
fi
}
[ ! -z $D ] && list_and_pull $D
[ ! -z $F ] && list_and_pull $F
Hope it would be helpful. This script is also available at gist.
Typical usage is
$ ./exec_out.sh -p com.example.myapplication -d databases
then it will extract all files under your apps databases directory, which is /data/data/com.example.myapplication/databases
, into current directory.
Much much simpler approach to download the file onto your local computer:
In your PC shell run:
adb -d shell 'run-as <package_name> cat /data/data/<package_name>/databases/<db_name>' > <local_file_name>
#!/bin/bash
#export for adb
export PATH=$PATH:/Users/userMe/Library/Android/sdk/platform-tools
export PATH=$PATH:/Users/userMe/Library/Android/sdk/tools
adb -d shell 'run-as com.android.app cp /data/data/com.android.app/files/db.realm /sdcard'
adb pull sdcard/db.realm /Users/userMe/Desktop/db
You can use this script for get Realm database.
If someone is looking for another answer that can be used to retrieve Database
as well as Shared Preferences
then follow this step:
In your build.gradle
file of your app add line
debugCompile 'com.amitshekhar.android:debug-db:1.0.0'
now when you run your app in non-release
mode then your app will automatically open 8080 port from your device IP address
make sure your device is connected via wifi
and your laptop
is sharing the same network. Now simply visit the url
to watch all data of database along with shared preferences.
Here's a solution that works on a device running Android 5.1. The following example is for Windows.
You need sed (or sed.exe on windows, e.g. from cygwin.) ( On Unix, it'll just be there ;) ). To remove bad '\r' characters, at least on windows.
Now just run the following command:
adb exec-out "run-as com.yourcompany.yourapp /data/data/com.yourcompany.yourapp/databases/YourDatabaseName" | c:\cygwin\bin\sed.exe 's/\x0D\x0A/\x0A/'>YourDatabaseName.db
The sed command strips out trailing /r characters.
Of course you should replace "com.yourcompany.yourapp" with the package name of the app and "YourDatabaseName" with the name of the database in the app.
를 사용할 때 데이터베이스 파일은 emtpyadb run-as
입니다. RoomDatabase 인스턴스에서 close ()를 호출하여 해결할 수 있습니다. close ()를 호출하여 SQLite가 저널을 디스크에 쓰도록합니다. 요청시 데이터베이스 연결을 닫는이 버튼을 만들었습니다.
다음은 RoomDatabase 인스턴스에서 close를 호출하는 방법 입니다.
'program story' 카테고리의 다른 글
IEnumerable 초기화 (0) | 2020.08.14 |
---|---|
Android의 strings.xml 파일 오류 (0) | 2020.08.14 |
Rails 3 양식 제출 버튼의 텍스트를 변경하는 방법 (0) | 2020.08.14 |
mac os x 터미널 배치 이름 바꾸기 (0) | 2020.08.14 |
Swift 3에서 현재 날짜를 얻으시겠습니까? (0) | 2020.08.14 |