Android 기기에서 데이터 / 데이터 폴더에 액세스하는 방법은 무엇입니까?


316

앱을 개발 중이며 데이터베이스 *.dbdata/data/com.****.***

sqlite manager의 도움으로 Eclipse의 AVD 에서이 파일에 액세스 할 수 있습니다

하지만 안드로이드 폰에서이 파일에 액세스 할 수 없습니다.
나는 그것을 구글하고 그것을 내 전화를 근절해야한다고 말하지만 그것을하고 싶지 않습니다. (새 전화, 보증 문제 및 보안 문제)

그래서 내 질문은 : data/data/....." 루팅하지 않고 "안드로이드 폰의 디렉토리에 어떻게 접근 할 수 있습니까?

data/data.....루팅하지 않고 디렉토리에 대한 사용자 권한을 변경할 수 있습니까 ?


1
database.db 파일이 있습니까 .. ???
Amit Prajapati

데이터베이스를 사용하고 있습니다- "openOrCreateDatabase (....)"
Naveen Prince P

5
당신은 확실히 전화를 먼저 뿌리해야합니다. 그런 다음 사용할 수있는 유능한 파일 관리자 앱이 필요합니다. ASTRO 파일 관리자는 널리 사용되지만 루트 액세스 지원이 없으므로 고급 사용자에게는 쓸모가 없습니다. ES 파일 탐색기 또는 파일 전문가를 사용할 수 있어야합니다. 최근에 ES 파일 탐색기를 사용하여 / data / data 또는 기타 보호 된 폴더를 보는 데 문제가있어서 폴더를 거의 버리고 파일 전문가를 사용하고 있습니다. 둘 다 설정으로 이동하여 루트 탐색기 옵션을 활성화해야합니다 (때로는 파일 시스템을 쓰기 가능으로 마운트하기도 함). 먼저해야합니다.
Samir

이것은 프로그래밍 관련 질문이나 답변이 아닙니다.
SkyWalker

답변:


375

휴대 전화에서 직접 파일에 액세스하는 것은 어렵지만 원하는 작업을 수행 할 수있는 컴퓨터로 파일을 복사 할 수 있습니다. 응원하지 않으면 두 가지 옵션이 있습니다.

  1. 응용 프로그램을 디버깅 할 수있는 경우 run-asadb 쉘 에서 명령을 사용할 수 있습니다

    adb shell
    run-as com.your.packagename 
    cp /data/data/com.your.packagename/
  2. 또는 안드로이드의 백업 기능을 사용할 수 있습니다.

    adb backup -noapk com.your.packagename

    이제 '장치 잠금을 해제하고 백업 작업을 확인하십시오'라는 메시지가 표시됩니다. 암호를 제공하지 않는 것이 가장 좋습니다. 그렇지 않으면 데이터를 읽기가 더 어려워집니다. '데이터 백업'을 클릭하십시오. 컴퓨터의 결과 'backup.ab'파일에는 Android 백업 형식의 모든 응용 프로그램 데이터가 포함됩니다. 기본적으로 압축 된 tar 파일입니다. 이 페이지 는 OpenSSL의 zlib 명령을 사용하여 압축을 해제하는 방법을 설명합니다. adb restore backup.db명령을 사용 하여 백업을 복원 할 수 있습니다 .


15
adb backup -f \location\on\local\drive -noapk app.package.name루트없이 나를 위해 일했다
theblang

24
이 명령을 사용하여 백업 파일을 압축 해제하십시오.dd if=backup.ab bs=24 skip=1|openssl zlib -d > backup.tar
Hooman

11
옵션 1에서 cp 명령에 랩탑 (Mac)에 저장하도록 지시하는 방법은 무엇입니까? Win 예제를 제공하면 나도 알고 싶습니다. 번역 해 드리겠습니다. 감사.
Gerard

10
중요 : 실행 adb backup -noapk com.your.packagename상의 AB를 파일에 저장됩니다 현재 디렉토리를 확신 당신이 바로 그 디렉토리에 탐색했는지 확인 (예 cd Desktop..)
Menelaos Kotsollaris

6
android:allowBackup="false"에서 매니페스트 를 통해 백업을 비활성화 한 경우 백업 접근 방식은 빈 백업을 생성합니다 .
Tom

130

Android Studio 3.0 이상 버전을 사용중인 경우 다음 단계를 수행하십시오.

  1. 보기 > 도구 창 > 장치 파일 탐색기를 클릭하십시오 .
  2. / data / data / [package-name] 노드를 펼치십시오 .

루트가 아닌 장치에서 디버그 모드로 실행되는 패키지 만 확장 할 수 있습니다.

Android Studio 3.0의 단계


1
이 도크에서 아무것도 볼 수 없습니다. 아무 것도 보여주지 말라고 무슨 문제인지 아세요?
Mahdi Azadbar

1
이것은하지 않는, 오직 디버그 모드에서 작동 릴리스 빌드
itinance

파일 시스템을 들여다 볼 수있는 방법을 보여 주셔서 감사합니다!
Lensflare

version 옵션이없는 것 같습니다. 3.0.1이동 했습니까?
Codingale

1
대단해. 내가 한동안 알고 있었으면 좋겠다.
checkmate711

59

루트 탐색기 앱을 사용하여 DB를 가져 오려고 시도 할 수도 있습니다. 그리고 그것이 작동하지 않으면 이것을 시도 할 수 있습니다 :

  1. cmd 열기
  2. 디렉토리를 변경하고 '플랫폼 도구'로 이동하십시오.
  3. ' adb shell' 입력
  4. su
  5. 기기에서 '허용'을 누르십시오
  6. chmod 777 /data /data/data /data/data/com.application.package /data/data/com.application.package/*
  7. Eclipse에서 DDMS보기를 열고 거기에서 'FileExplorer'를 열어 원하는 파일을 얻으십시오.

그런 다음 루팅 된 장치에서 파일을 찾아 볼 수 있습니다.


2
루트 탐색 앱은 루팅 된 휴대 전화에서만 작동한다고 생각합니다. 나는 두 번째 방법을 시도합니다
Naveen Prince P

5
chmod / data를 할 수 없음 : 작업이 허용되지 않음
bofredo

@bofredo 귀하의 휴대 전화가 루팅되지 않았기 때문에 그 생각합니다. 당신은 당신의 전화를 근절하고이 시도해야
Sheraz 아마드 Khilji에

1
@mahemadhi yes 모든 디렉토리에 개인 권한이 있으므로 모든 디렉토리에 대해이 명령을 수동으로 실행해야합니다.
Sheraz Ahmad Khilji

1
@VivekChavda p 그들은 뿌리 전화가 필요합니다
Ahmad Khilji

21

위의 작업을 수행하려면 (예 : 휴대 전화 자체에서 보호 된 폴더에 액세스) 루트가 필요합니다. (/ data 폴더의 마운트 권한 변경 및 액세스 포함)

루트가 없으면 코드를 통해 응용 프로그램 내에서 제외하고/data 직접 읽을 수 없습니다. 따라서 해당 파일을 sdcard 또는 복사 가능한 곳에 복사 한 다음 정상적으로 액세스 할 수 있어야합니다.

개발자 기기가있는 경우 응원이 보증을 무효화하지 않습니다. 죄송합니다. AFAIK에는 다른 방법이 없습니다.


개발자 기기를 사용하지 않습니다. 내 엑스 페리아 U입니다
Naveen Prince P

chmode 명령으로 데이터 폴더의 사용자 권한을 편집 할 수 있습니까?
Naveen Prince P

전체 파티션이 읽기 전용으로 마운트됩니다. 나는 당신의 최선의 방법은 adb pull아래 답변에서 언급 한 것처럼 말하고 싶습니다 .
Anirudh Ramanathan

응용 프로그램에서 허용하면 가능합니다. 모든 디렉토리에는 모든 사람에게 x 권한이 있지만 모든 사람에게는 r이 없으므로 경로를 알아야합니다. 응용 프로그램이 파일 세계에 액세스 할 수 있는지 여부에 따라 다릅니다. 일부 파일은 대부분이 아닙니다.
Jan Hudec

먼저 읽을 수 없다고 말한 다음 파일을 다른 곳에 복사하는 것이 좋습니다. 그러나 처음에 파일을 읽지 않고 복사하는 방법은 무엇입니까? 나는이 답변이 버그라고 생각합니다.
전까지

13

/data/data/package.name/databases/file루팅되지 않은 Android 5.0 이상 기기 의 디버깅 가능한 응용 프로그램 폴더에서 파일을 가져 오는 가장 쉬운 방법 (단순한 단계) 은 다음 명령을 사용하는 것입니다.

adb exec-out run-as package.name cat databases/file > file

12
  1. 명령 프롬프트를 엽니 다
  2. 디렉토리를 E : \ Android \ adt-bundle-windows-x86_64-20140702 \ adt-bundle-windows-x86_64-20140702 \ sdk \ platform-tools로 변경하십시오.
  3. 아래 명령을 입력하십시오
  4. adb -d shell
  5. run-as com.your.packagename cat databases/database.db > /sdcard/database.db
  6. 존재 cd /sdcard하도록 디렉토리를 변경 하십시오 database.db.
  7. adb pull /sdcard/database.db 또는 단순히 device에서 database.db를 복사 할 수 있습니다.

나를 위해 완벽하게 작동합니다. 감사! 그러나 제 경우에는 데이터베이스 파일 이름에 .db 확장자가 없습니다.
technik

10

일식에서 파일 탐색기를 사용하십시오. Windows =>보기 표시 => 기타 ... => 파일 탐색기를 선택하십시오.

다른 방법은 adb를 통해 파일을 가져 오는 것입니다.

adb pull /system/data/data/<yourpackagename>/databases/<databasename> /sdcard

5

나는 또한 같은 문제가 한 번 있었다. adb 쉘 또는 루팅 장치를 제외하고 안드로이드 장치 내에서 파일에 직접 액세스하는 방법은 없습니다.

여기 옆에 02 대안이 있습니다.

1)

 public void exportDatabse(String databaseName)
   {
     try {
        File sd = Environment.getExternalStorageDirectory();
        File data = Environment.getDataDirectory();

        if (sd.canWrite()) {
            String currentDBPath = "//data//"+getPackageName()+"//databases//"+databaseName+"";
            String backupDBPath = "backupname.db";
            File currentDB = new File(data, currentDBPath);
            File backupDB = new File(sd, backupDBPath);

            if (currentDB.exists()) {
                FileChannel src = new FileInputStream(currentDB).getChannel();
                FileChannel dst = new FileOutputStream(backupDB).getChannel();
                dst.transferFrom(src, 0, src.size());
                src.close();
                dst.close();
            }
        }
    } catch (Exception e) {

    }
}

2) 이것을 시도하십시오 : https://github.com/sanathp/DatabaseManager_For_Android


5

Android에서 데스크톱으로 백업하려면

명령 행 cmd를 열고 다음을 실행하십시오. adb backup -f C : \ Intel \ xxx.ab -noapk your.app.package . 비밀번호를 입력하지 않고 내 데이터 백업을 클릭하십시오. 드라이브 C 루트에 저장하지 마십시오. 거부 될 수 있습니다. 이것이 내가 C : \ Intel에 저장 한 이유입니다.

* .ab 파일을 추출하려면

  1. 여기로 가서 다운로드하십시오 : https://sourceforge.net/projects/adbextractor/
  2. 다운로드 한 파일을 추출하고 추출한 폴더로 이동하십시오.
  3. 자신의 파일 이름으로 이것을 실행하십시오. java -jar abe.jar unpack c : \ Intel \ xxx.ab c : \ Intel \ xxx.tar

1
좋은 답변입니다. 감사합니다. Xiaomi 장치에서 만든 단일 앱 백업 (.bak 확장명)을 추출하는 데 도움이되었습니다. 응원 불필요
Russian

4

(A)에 루팅 장치, 정확한 솔루션이있다 :

Open cmd
Change your directory and go into 'Platform tools'
Type 'adb shell'
su
Press 'Allow' on device
chmod 777 /data /data/data /data/data/*
Open DDMS view in Eclipse/IntelliJ and from there open 'FileExplorer' to get your desired file

원래 솔루션은 작동했지만 chmod는 알 수없는 디렉토리를 반환합니다. chmod 명령을 / data / data / *로 변경하면 Intellij의 DDMS에서 데이터 디렉토리의 모든 하위 폴더에 액세스 할 수있었습니다. Eclipse DDMS에 대해서도 동일한 솔루션이 적용된다고 가정합니다.

업데이트 그래서 내가 찾은 것은 이상합니다. IntelliJ (Android Device Monitor)에서 DDMS를 사용하여 Nexus 6을 실행하고 있습니다. 작은 스타터 앱을 만들었습니다. 상기 앱은 data / data / com.example.myapp / files의 .csv 파일에 데이터를 저장합니다

Nexus 6에서이 파일에 처음 액세스하려고 할 때 기기를 루팅해야한다는 것을 알게되었습니다. 데이터 폴더를 볼 수는 있지만 열려고 시도해도 작동하지 않습니다. 다른 곳에서 온라인에서 언급했듯이 확장 +는 사라지고 곧 그 후에 다시 나타납니다 (참고, 웹에서 루팅 없이이 폴더에 액세스 할 수 있다고 주장하는 솔루션이 있으며 너무 늦을 때까지 찾지 못했습니다. 어쨌든 근절하지 않으려는지 확실하지 않습니다 ((나에게 솔루션을 제공하기 위해 응용 프로그램이나 명령 프롬프트에 의존하는 것보다 수동으로 할 수 있음)). 나는 6을 근절하고 DDMS를 다시 시도했습니다.

이 시점에서 데이터 폴더가 표시되어 폴더를 확장하고 com을 볼 수 있습니다. 디렉토리가 있지만 열 수 없습니다. 그때 내가 위의 해결책을 발견했습니다. 이 부분에서는 초기 지침이 작동하지 않습니다.

chmod 777 /data /data/data /data/data/com.application.pacakage /data/data/com.application.pacakage/*

그때 내가 게시 한 솔루션을 시도했을 때입니다.

chmod 777 /data /data/data /data/data/*

이 솔루션은 작동하는 것처럼 보였지만 특정 폴더에서만 작동합니다. 이제 myapp 폴더를 확장 할 수 있지만 그 안에있는 파일 디렉토리는 확장 할 수 없습니다.

이 시점에서 나는 잠시 동안 놀았고 왜이 와일드 카드 항목을 시도하기보다는 필요한 디렉토리에서 시도하지 않는지 알아 냈습니다.

chmod 777 /data /data/data /data/data/com.example.myapp/*

뒤에 :

chmod 777 /data /data/data /data/data/com.example.myapp/files

이 명령을 사용하면 .csv가 올바르게 저장되었는지 확인하기 위해 앱 디렉토리의 파일을 확장하고 볼 수있었습니다.

이것이 누군가를 돕기를 바랍니다. 나는 이것을 몇 시간 동안 고투했다!

(이상하게도이 권한을 복잡하게 만들기 위해 권한이 files 디렉토리로 전달 된 .csv 파일로 전달되지 않았습니다. 내 파일 디렉토리 권한은 drwxrwxrwx를 읽고 내 log.csv 파일 권한은 -rw-rw--를 읽습니다. -.. 그냥 fyi)


2

다음과 같은 sigle 파일을 다운로드 할 수 있습니다.

adb exec-out run-as debuggable.app.package.name cat files/file.mp4 > file.mp4

다운로드하기 전에 App-Directory의 파일 구조를보고 싶지 않을 수 있습니다. 이를 위해 THelper위 의 다음 단계를 수행하십시오 .

adb shell
run-as com.your.packagename 
cd files
ls -als .

안드로이드 스튜디오 방법은 Shahidul(언급 https://stackoverflow.com/a/44089388/1256697 )도 일을. DeviceFile Explorer메뉴에 옵션 이 표시되지 않는 경우 : Android Studio에서 / android-Directory를 열어야합니다. 예는 반응 모국어 사용자는이가 자신의 프로젝트 - 폴더 은 / IOS-디렉토리와 같은 레벨에 권리를.


1

간단한 방법 중 하나는 SD 카드에 데이터베이스를 작성하는 것입니다. 전화를 뿌리지 않으면 내부 메모리에있는 전화의 데이터 폴더에 액세스 할 수 없기 때문입니다. SD-Card에 단순히 데이터베이스를 만드십시오.

또한 원하는 경우 일부 파일 복사 코드를 작성하여 기존 데이터베이스 파일 (내부 메모리에서)을 루트없이 외부 메모리로 복사 할 수 있습니다.


어떻게합니까? 어떻게 sdcard에 DB를 만들 수 있습니까
Naveen Prince P

방법을 사용하면 SD 카드에 데이터베이스를 만들 수 있습니다. 간단히의 경로를 제공하는 FileSD 카드를 가리키는 그리고 당신은 갈 수 있습니다
waqaslam

1

관리자 권한이 필요한이 폴더에 액세스 할 수 있습니다.

따라서 두 가지 옵션이 있습니다.

  1. 장치를 근절 하고이 폴더에 액세스하려고
  2. 에뮬레이터 사용

추신 : 위의 두 가지 옵션 중 하나를 사용하는 경우 다음 단계에 따라이 폴더에 액세스 할 수 있습니다

DDMS Perspective 열기-> 장치-> (오른쪽 창 옵션에서 파일 탐색기 선택) 패키지 선택-> 데이터-> 데이터-> 패키지 이름-> 파일

거기에서 파일을 가져올 수 있습니다


1

adb backup나를 위해 작동하지 않았으므로 여기에 내가 한 일이 있습니다 (Xiaomi Redmi Note 4X, Android 6.0).
1. 설정> 추가 설정> 백업 및 재설정> 로컬 백업으로 이동하십시오 .
2. 화면 하단에서 '백업'을 누릅니다.
3. '시스템'및 '앱'확인 표시를 선택 취소하십시오.
4. '앱'셀 오른쪽에있는 세부 정보 공개 버튼을 눌러 앱 선택 화면으로 이동합니다.
5. 원하는 앱을 선택하고 확인을 누릅니다.
6. 백업이 완료된 후 실제 파일을 찾아야합니다. / MIUI / backup / AllBackup / _FOLDER_NAMED_AFTER_BACKUP_CREATION_DATE_ 에서 광산을 찾을 수 있습니다 .
7. 그런 다음 이 답변 의 단계를 수행 했습니다. RonTLV을실제로 백업 파일 (내 경우에는 .bak)을 tar (원래 답변과 중복)로 변환하려면 :
"
a) 여기로 이동하여 다운로드하십시오 : https://sourceforge.net/projects/adbextractor/
b) 다운로드 한 파일을 추출하고 압축을 푼 폴더로 이동하십시오
c) 파일 이름으로 java -jar abe.jar unpack c : \ Intel \ xxx.ab c : \ Intel \ xxx.tar
"


0

이 db 파일을 이클립스 탐색기의 어딘가에 복사 할 수 있습니다 (예 : sdcard 또는 PC). sqlite를 사용하여이 db 파일에 액세스하고 업데이트 할 수 있습니다.


0

문제는 : 안드로이드 데이터 장치의 데이터 데이터 폴더에 액세스하는 방법은 무엇입니까?


android-device가 Bluestacks 인 경우 * Root Browser APK는 data / data /.를 표시합니다.


https://apkpure.com/root-browser/com.jrummy.root.browserfree 에서 루트 브라우저를 다운로드 하십시오.


파일이 텍스트 파일 인 경우 "다른 이름으로 열기", "텍스트 파일", "다른 이름으로 열기", "RB 텍스트 편집기"를 클릭해야합니다.


0

파일을 공용 폴더 인 SD 카드 폴더로 복사 한 다음 sqlite를 사용하여 액세스 할 수있는 PC로 파일을 복사 할 수도 있습니다.

다음은 데이터 / 데이터에서 공용 저장소 폴더로 파일을 복사하는 데 사용할 수있는 코드입니다.

private void copyFile(final Context context) {
    try {
        File sd = Environment.getExternalStorageDirectory();
        File data = Environment.getDataDirectory();

        if (sd.canWrite()) {
            String currentDBPath =
                    context.getDatabasePath(DATABASE_NAME).getAbsolutePath();

            String backupDBPath = "data.db";

            File currentDB = new File(currentDBPath);
            File backupDB = new File(sd, backupDBPath);

            if (currentDB.exists()) {
                FileChannel src = new FileInputStream(currentDB).getChannel();
                FileChannel dst = new FileOutputStream(backupDB).getChannel();
                dst.transferFrom(src, 0, src.size());
                src.close();
                dst.close();
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

명백한:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" />

파일이 다른 사람에게 읽기 권한을 공유하지 않으면 복사 파일에 대한 모든 작업에 액세스 할 수 없습니다
Steve Luck

0

SQLlite 데이터베이스는 사용자의 전화에 저장되며 경로 아래에 숨어 있습니다.

/Data/Data/com.companyname.AppName/File/

여기에 두 가지 옵션이 있습니다.

  1. 당신은 당신의 hidding db3 파일을 볼 수 있도록 휴대 전화를 근절 할 수 있습니다
  2. 이것은 해결책이 아니라 해결 방법입니다. 'select'문을 사용하여 데이터베이스 테이블을 표시하는 테스트 페이지를 작성하십시오.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.