데이터 폴더에 대한 ADB 액세스가 거부되었습니까?
adb와 다음 명령을 사용하여 라이브 장치에 연결했습니다.
C:\>adb -s HT829GZ52000 shell
$ ls
ls
sqlite_stmt_journals
cache
sdcard
etc
system
sys
sbin
proc
logo.rle
init.trout.rc
init.rc
init.goldfish.rc
init
default.prop
data
root
dev
$ cd data
cd data
$ ls
ls
opendir failed, Permission denied
접속이 거부된 것을 보고 깜짝 놀랐습니다.이렇게 명령줄을 사용하여 디렉토리를 검색할 수 없는 이유는 무엇입니까?
전화기에 루트 액세스하려면 어떻게 해야 합니까?
8 2되지 않는 한 은 셸 8(Android 2.2)부터 에서 의 할 을 되지 가 의 할 을 부터run-as
명령어를 실행하거나 특정 사용자/응용 프로그램으로 실행하거나 응용 프로그램의 UID로 전환하여 데이터 디렉토리에 액세스할 수 있습니다.
앱의 디렉터리 컨텐츠를 나열합니다.
run-as com.yourapp ls -l /data/data/com.yourapp
com의 UID로 전환합니다.당신의 앱과 그 uid를 사용하여 모든 추가 명령을 실행합니다 (당신이 호출할 때까지).exit
):
run-as com.yourapp
cd /data/data/com.yourapp
ls -l
exit
참고 1: 일부 HTC Desire 전화기에 알려진 문제가 있습니다.비표준 소유자/사용 권한 때문에/data/data
리,run-as
해당 전화기에서 명령이 실행되지 않습니다.
참고 2: @Avio에서 지적한 바와 같이:run-as
는 삼성 S를 버전(에서 실행하는 . 이시성에서 S를 Cyanogenmod는가다데한 (7~10.1) 때문입니다. 왜냐하면 이 플랫폼에서/data/data
에 대한 심볼 링크입니다./datadata
하는 한 디렉토리로 를 위해서는 액세스가 이 문제를 해결하는 한 가지 방법은 symlink를 실제 디렉토리로 바꾸는 것입니다(불행하게도 이를 위해서는 보통 루트 액세스가 필요합니다).
장치의 모든 것을 탐색하려면 다음 두 가지를 수행해야 합니다.
- Android 전화기의 데이터 폴더를 탐색하려면 루트 액세스 권한이 있는 전화기가 있어야 합니다.즉, 개발자 장치(ADP1 또는 Google I/O의 ION)를 가지고 있거나 다른 방법으로 전화기를 '루팅'할 수 있는 방법을 찾은 것입니다.
- . 다음을하여 이 합니다. 다음을 실행하여 이 작업을 수행합니다.
adb root
1단계를 올바르게 수행하면 2단계만 작동합니다(소스 코드에서 어떤 것도 다시 빌드할 필요가 없음).
시작하기 전에, 당신은 전화기를 가지고 있나요? 만약 그렇지 않다면, 저는 당신이 성공할 때라고 강력히 제안합니다.이 작업을 수행하는 데 도움이 되는 튜토리얼의 99%가 루트 폰을 가지고 있어야 합니다(루트 폰을 가지고 있지 않고도 할 수 있는 방법을 찾는 데 약 한 시간이 걸렸다는 것을 알고 있습니다.찾을 수 없었습니다.) 또한 생각해보면 아이폰 역시 이와 같은 작업을 수행하려면 뿌리를 뽑아야 합니다.그러니 완전히 합리적입니다.답의 끝에 뿌리를 내리는 것에 대한 더 많은 것.
명령줄 유형:
adb shell
명령행으로 합니다 (은 이것과 : 로 합니다 과 이 됩니다 과 됩니다 이 합니다 로 ).shell@android:/ $
이제 유형:
shell@android:/ $run-as com.domain.yourapp
이것은 당신을 직접 당신의 데이터 디렉토리로 데려갈 것입니다.com.domain.yourapp
:
shell@android:/data/data/com.domain.yourapp $
그렇지 않은 경우(즉, 오류가 발생하는 경우), 루트 폰이 없거나 루트 사용자 권한을 사용하지 않았을 수 있습니다.루트 사용자 권한을 사용하려면 다음을 입력합니다.su
루팅되지 adb서슨이지요요지서이슨ndbdsed,btseetfd' 오류가 발생하면 전화가 루팅되지 않습니다.그렇지 않은 경우 먼저 루트를 지정한 다음 이 지침을 계속 수행합니다.
거기서부터 타이핑을 할 수 있습니다.ls
그러면 dbs를 포함한 모든 디렉토리가 표시됩니다.
shell@android:/data/data/com.domain.yourapp $ ls
cache
databases
lib
shared_prefs
그 후 sqlite3을 사용하여 데이터베이스를 탐색할 수 있습니다.설치되어 있지 않은 경우 (입력하면 알 수 있음)sqlite3
, command not found
설치를 하셔야 할 겁니다.sqlite를 설치하려면 여기 지침을 따릅니다.
루팅에 대하여: 전화기를 루팅해 본 적이 없고, 전화기를 망치는 것이 걱정된다면, 걱정할 것이 없다고 안심하고 말씀드릴 수 있습니다.거의 모든 신구 모델과 구형 모델을 위한 빠르고 쉬운 전화 루팅 튜토리얼이 많이 있으며, 맥이 있더라도 전화 루팅을 할 수 있습니다(나는 내 맥으로 내 s3 루팅을 했습니다).
$ 애드비 셸
$ cd/data
$ ls
opendir 실패, 권한 거부
이렇게 해야 합니다.
$ adb shell
$ cd /data
shell@android:/data $ run-as com.your.package
shell@android:/data/data/com.your.package $ ls
네!
루티드 삼성 갤럭시 S에서 작동을 시도할 때도 비슷한 문제가 있었습니다.시스템 셸에서 명령 실행
> adb root
실패하고 "production builds에서 root으로 실행" 메시지가 표시됩니다.여기에 뿌리가 될 수 있는 간단한 방법이 있습니다.
이전 명령 대신 다음 두 명령을 차례로 실행합니다.
> adb shell
$ su
첫 번째 명령 후 위와 같이 프롬프트가 '>'에서 '$'로 변경된 경우 adb shell 환경으로 진입했음을 의미합니다.이후 두 번째 명령을 실행한 후 프롬프트가 '#'으로 바뀌면 이제 root이 된 것입니다.이제, 루트로서, 당신은 당신의 기기로 당신이 원하는 무엇이든지 할 수 있습니다.
'안전한' 셸로 다시 전환하려면, 문제를 제기합니다.
# exit
루트가 아닌 사용자로서 adb 셸에 있음을 의미하는 '$' 프롬프트가 다시 나타납니다.
저도 이것 때문에 고생이 많았습니다.나는 여전히 사용 권한과 루트 실행을 완전히 이해하지 못하지만, 이것은 (부분적으로 이전 답변 중 하나인) 나에게 /data/data/[package name]/databases/my_db.db에서 데이터베이스 파일을 복사하도록 작동했습니다. 셸 루트 또는 suin shell을 실행하는 것은 어떤 이유로 작동하지 않았고, DB 파일을 복사하는 것도 작동하지 않았습니다 (그러나 디렉토리로 이동할 수 있었습니다). sqlite3도 작동하지 않았습니다.
잘 됐어요.DOS 명령 프롬프트에서:
C:\Program Files\Android\android-sdk\platform-tools>adb shell
1|shell@android:/ $ run-as de.vogella.android.locationapi.maps
run-as de.vogella.android.locationapi.maps
1|shell@android:/data/data/de.vogella.android.locationapi.maps $ cd /data
cd /data
shell@android:/data $ cd data
cd data
shell@android:/data/data $ cd de.vogella.android.locationapi.maps
cd de.vogella.android.locationapi.maps
shell@android:/data/data/de.vogella.android.locationapi.maps $ cd databases
cd databases
shell@android:/data/data/de.vogella.android.locationapi.maps/databases $ ls
ls
bus_timetable_lines.db
bus_timetable_lines.db-journal
shell@android:/data/data/de.vogella.android.locationapi.maps/databases $ cat bus
_timetable_lines.db > /sdcard/db_copy.db
bus_timetable_lines.db > /sdcard/db_copy.db <
shell@android:/data/data/de.vogella.android.locationapi.maps/databases $exit ^
exit
shell@android:/ $ exit
exit
C:\Program Files\Android\android-sdk\platform-tools>
이제 SDCARD 디렉토리로 이동하여 db_copy.db 파일을 가져오십시오. 그것도 숨겨져 있었지만 메일로 전송할 수 있었습니다.Windows로 돌아가 SQLite Database Browser로 db 파일을 열 수 있었습니다. :)
이것은 Android 장치가 어떤 방법으로든 루트를 사용하는 경우(루트를 사용하지 않는 경우)에 작동합니다.
adb shell
- 포탄에 접근합니다.su
- 슈퍼유저가 되다
이제 모든 디렉토리의 모든 파일을 읽을 수 있습니다.
루트 액세스를 얻는 두 단계는 다음과 같습니다.
- 당신의 안드로이드 기기는 뿌리가 있어야 합니다.
- ADB 셸에서 su를 입력하면 안드로이드 장치가 y/n을 표시합니까?허용을 선택합니다.
프로덕션 빌드에서 /data/app을 입력할 수 없습니다.
drwxrwx--- system cache 1970-01-01 08:00 cache
drwxrwxr-x root system 1970-01-01 08:00 mnt
drwxrwx--x system system 1970-01-01 08:15 data
작동하려면 올바른 소유자로 변경해야 할 수도 있습니다.
문제는 최신 CM에서 개발 옵션에 대한 adb root 접근 권한을 특별히 부여해야 한다는 것입니다.제가 한 일은 이렇습니다.
abc@abc-L655:~$ sudo adb kill-server
abc@abc-L655:~$ sudo adb root start-server * 데몬이 실행되고 있지 않습니다. 지금 포트 5037에서 시작합니다 * 데몬이 성공적으로 시작되었습니다 * 시스템 설정에 의해 루트 액세스가 비활성화되었습니다 - 설정에서 활성화 -> 개발 옵션
개발 옵션을 변경한 후...
abc@abc-L655:~$ sudo adb kill-server
abc@abc-L655:~$ sudo adb root start-server
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
restarting adbd as root
abc@abc-L655:~$ adb shell
root@android:/ # ls /data/ .... good to go..
당신이 애플리케이션 패키지를 안다면 당신은 할 수 있습니다.cd
바로 그 폴더에..
예를 들면cd data/data/com.yourapp
이것은 당신을 다음과 같은 디렉토리로 떨어뜨릴 것입니다.read/writable
따라서 필요에 따라 파일을 변경할 수 있습니다.가 ㅇㅇㅇ에 emulator
경로를 수 . , 를 할 할 를 .
DB & Tables만 보고 싶다면 다음을 사용하는 것이 가장 쉬운 방법입니다.Stetho
를 사용하는 에게 꽤 입니다. . . . Android 에게 하는 에게 SQLite
에에 의해 Facobook developed
.
Steps to use the tool
- 응용프로그램의 그라들 파일(Module: app)에 아래 의존성 추가
'com' com. com. com. com.stetho:stetho:1.4.2'
- Activity on Create() 메서드에서 아래 줄의 코드 추가
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Stetho.initializeWithDefaults(this); setContentView(R.layout.activity_main); }
이제 응용 프로그램을 만들고 앱이 실행 중일 때 url에서 크롬을 열어서 앱 데이터베이스를 탐색할 수 있습니다.
chrome://inspect/#devices
동일한 스크린샷은 아래와 같습니다_
크롬 인스팩트
사용자 DB
이것이 모두에게 도움이 되기를 바랍니다! :)
이 스레드가 꽤 오래된 것은 알지만 오늘 안드로이드 스튜디오 내에서 데이터베이스 파일을 읽기 위해 내 윈도우에 복사하려고 하다가 이 문제가 발생했습니다.어떤 명령도 실행할 필요가 없었지만, 사실은 그런 식으로 아무것도 실행할 필요가 없었습니다.제가 한 일은 기기에 연결된 USB를 다시 연결하는 것이었는데 "USB 사용"이라는 프롬프트가 뜨자 "파일 전송"을 선택했고 작동했습니다!내부 파일을 복사하기 위해 루트 장치가 필요 없습니다.
- 당신의 전화는 뿌리를 뽑아야 합니다.이것은 중요한 단계입니다!
- adb 파일 위치로 이동하여 해당 위치에서 관리자로 명령 프롬프트 시작
- 다음 명령을 실행합니다.
adb shell
run-as com.domain.yourapp
이것은 당신의 전화기에 루트 액세스를 요청할 것이고, 허용할 것입니다.
- 루트 액세스를 사용하여 파일을 탐색할 수 있습니다.감사합니다!
장치의 셸 디렉터리에 있을 때.그냥 달려라
su - root
그러면 데이터/폴더에 접근할 수 있을 것입니다.
장치를 루팅하지 않고 다음 cmd 스크린샷을 통해 파일에 액세스할 수 있습니다.
사용자에 따라 platform-tools 폴더에서 cmd를 사용하여 adb를 시작합니다.
cd C:\Users\YourUserName\AppData\Local\Android\sdk\platform-tools
설치 위치에 따라 다른 폴더에 있을 수 있습니다.
작업 장치를 표시합니다.
adb devices
예를 들어, 응답 명령은
List of devices attached 0123456789ABCDEF device
명령어를 쓰다
adb -s 0123456789ABCDEF shell "su"
그것은 곧 열릴 것입니다.
root@theDeviceName:/ #
4.파일에 접속하여 모든 파일을 나열합니다.
ls
디렉토리를 데이터 폴더와 같은 다른 곳으로 변경할 수 있습니다.
cd data/data
언급URL : https://stackoverflow.com/questions/1043322/adb-access-denied-to-data-folder
'programing' 카테고리의 다른 글
를 합니다 합니다 를 에 초점을 맞출 때 모바일 기본 키보드를 방지합니다. 를 합니다 합니다 를 에 초점을 맞출 때 모바일 기본 키보드를 방지합니다. 를 합니다 합니다 를 에 초점을.. (0) | 2023.09.06 |
---|---|
jQuery로 CSS 속성의 숫자 부분만 얻는 방법? (0) | 2023.09.06 |
maria db의 데이터 변경 시 maria db에서 sms로 대용량 데이터 전송 (0) | 2023.09.06 |
이미지를 업데이트하기 위해 배포하는 방법을 Kubernetese (0) | 2023.09.06 |
iPython 노트북에서 DataFrame을 표로 표시 (0) | 2023.09.06 |