IT

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

lottoking 2020. 3. 21. 10:45
반응형

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


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

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

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

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

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


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

  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명령을 사용 하여 백업을 복원 할 수 있습니다 .


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

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

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

Android Studio 3.0의 단계


루트 탐색기 앱을 사용하여 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'를 열어 원하는 파일을 얻으십시오.

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


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

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

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


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

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

  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를 복사 할 수 있습니다.

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

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

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

나는 또한 같은 문제가 한 번 있었다. 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


(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)


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

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

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


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
"


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

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

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

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

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


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


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


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


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


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


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

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

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

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

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

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


파일을 공용 폴더 인 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" />

참고 URL : https://stackoverflow.com/questions/13006315/how-to-access-data-data-folder-in-android-device

반응형