prosource

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

probook 2023. 8. 6. 10:10
반응형

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

나는 앱을 개발하고 있고 나의 데이터베이스를 알고 있습니다.*.db나 것다니입에 나올 입니다.data/data/com.****.***

SQLite 관리자의 도움을 받아 이클립스의 AVD에서 이 파일에 액세스할 수 있습니다.

하지만 안드로이드 폰에서 이 파일에 접근할 수 없습니다.
제가 구글 검색을 해보니 핸드폰을 루팅해야 한다고 나오는데, 저는 그렇게 하고 싶지 않습니다.

내 액세방에 해야 ?data/data/....."루팅 없이" 내 안드로이드 폰의 디렉터리?

에 대한 할 수 ?data/data.....뿌리를 내리지 않고요?

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

  1. 프로그램이 응프용램수있경우는을 할 수 .run-as in shell in adb

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

    adb backup -noapk com.your.packagename
    

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

Android Studio 3.0 이상 버전을 사용하는 경우 다음 단계를 수행합니다.

  1. View > Tool Windows > Device File Explorer를 클릭합니다.
  2. /data/data/[package-name] 노드를 확장합니다.

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

Steps followed in 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. 이클립스에서 DDMS 보기를 열고 거기서 '파일 탐색기'를 열어 원하는 파일을 가져옵니다.

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

위의 작업 중 하나(즉, 전화기 자체에서 보호된 폴더에 액세스)를 수행하려면 루트가 필요합니다. (여기에는 /data 폴더에 대한 마운트 권한 변경 및 액세스가 포함됩니다.)

를 사용하지 루트없액에 ./data프로그램 내에서 코드를 통해 읽는 것을 제외하고 직접 읽는 것은 불가능합니다.그래서 당신은 그 파일을 sdcard나 접근 가능한 곳에 복사해 볼 수 있고, 그러면 정상적으로 접근할 수 있을 것입니다.

개발자 기기가 있다면 루팅은 보증을 무효화하지 않습니다.죄송합니다, AFAIK는 다른 방법이 없습니다.

프로그램 " " " " " " " " " " " " " " " " " " " " " " " " " " " "/data/data/package.name/databases/file Android +

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또는 단순히 장치에서 database.db를 복사할 수 있습니다.

이클립스에서 파일 탐색기를 사용합니다.Windows = > 보기 표시 = > 기타...를 선택합니다.=> 파일 탐색기.

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

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

Android에서 Desktop으로 백업하려면 다음과 같이 하십시오.

명령줄 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

저도 같은 문제를 겪은 적이 있습니다.안드로이드 기기 내에서 파일에 직접 접근할 수 있는 방법은 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) {

    }
}

사용해 보십시오. https://github.com/sanathp/DatabaseManager_For_Android

루트 장치에서 올바른 솔루션은 다음과 같습니다.

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/*

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

이 시점에서, 저는 잠시 놀다가 왜 이런 와일드카드 항목을 시도하지 않고 제가 필요로 하는 디렉토리에서 시도하지 않는지 생각했습니다.

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

다음 순서:

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

이러한 명령을 사용하여 앱 디렉터리의 파일을 확장하고 볼 수 있으므로 .csv가 올바르게 저장되고 있는지 확인할 수 있습니다.

이것이 누군가에게 도움이 되기를 바랍니다.나는 이것과 몇 시간 동안 씨름했습니다!

(여기에 좀 더 자세히 설명하자면, 이상하게도 파일 디렉토리에 전달된 .csv 파일에 권한이 전달되지 않았습니다. my files 디렉토리 권한은 drwxrwxrwx이고 my log.csv 파일 권한은 -rw-rw----.. fyi입니다.)

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

그래서 두 가지 선택권이 있습니다.

  1. 장치를 루팅하고 이 폴더에 액세스합니다.
  2. 에뮬레이터를 사용합니다.

p.s. : 위의 두 가지 옵션 중 하나를 사용하는 경우 다음 단계를 수행하여 이 폴더에 액세스할 수 있습니다.

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

그리고 거기서 당신은 당신의 파일을 끌어올릴 수 있습니다.

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

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

다운로드하기 전에 앱 디렉터리의 파일 구조를 보고 싶지 않을 수 있습니다.를 위해 합니다.THelper위에서 확인한 내용:

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

Android-Studio 방식Shahidul언급됨(https://stackoverflow.com/a/44089388/1256697) 도 작동합니다.못 보신 분들은.DeviceFile Explorer메뉴의 옵션: Android Studio에서 /android-Directory를 열려면 다음과 같이 하십시오.예를 들어 반응 네이티브 사용자는 /ios-Directory와 동일한 수준의 프로젝트-폴더 내부에 이 정보를 가지고 있습니다.

adb backup제게 적합하지 않았기 때문에, 제가 한 일은 다음과 같습니다(샤오미 레드미 노트 4X, Android 6.0).
Settings > Additional Settings > Backup & Reset > Local backup 으로 이동합니다.
화면 하단에서 '백업'을 누릅니다.
' 표시를 선택 시스템' 및 '앱' 체크 표시를 선택 취소합니다.
앱 선택 화면으로 이동하려면 '앱' 셀 오른쪽에 있는 세부 정보 공개 버튼을 누릅니다.
원하는 앱을 선택하고 확인을 누릅니다.
백업이 완료된 후에는 실제 파일을 찾아야 합니다.내 항목은 /MIUI/backup/AllBackup/_에서 찾을 수 있습니다.FOLDER_NAMED_AFTER_BACKUP_CREATION_DATE_.
그런 다음 RonTLV 답변의 단계를 따라 백업 파일(.bak)을 tar(원래 답변에서 복제)로 실제로 변환했습니다.
"
여기로 이동하여 다운로드: https://sourceforge.net/projects/adbextractor/
다운로드한 파일의 압축을 풀고 압축을 푼 폴더로 이동합니다.
c:\jar unpack c:\jar unpack c:\jar unpack c.Intel\xxx.abc:\Intel\xxx.tar
"

간단한 대답은 아니오입니다.곧 출시될 Android 13에서는 장치를 루팅하거나 PC에 연결하지 않으면 /storage/emulated/0/Android/* 디렉토리의 어떤 것에도 액세스할 수 없습니다. 물론 Pixel 장치에서는 액세스할 수 없습니다.

ADB를 사용하여 이러한 앱 데이터 액세스에 대한 Android 소스 페이지를 읽으십시오. https://developer.android.com/training/data-storage/manage-all-files

간단한 방법 중 하나는 SD-Card에 데이터베이스를 만드는 것입니다.전화기를 루팅하지 않으면 내부 메모리에 있는 전화기의 데이터 폴더에 액세스할 수 없기 때문입니다.SD-Card에 데이터베이스를 만드는 것이 어떨까요?

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

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

또한 파일을 공용 폴더인 SD Card 폴더에 복사한 다음 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" />

SQLite 데이터베이스는 사용자의 전화기에 저장되며 경로 아래에 숨깁니다.

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

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

  1. 숨겨진 DB3 파일을 볼 수 있도록 전화기를 루팅할 수 있습니다.
  2. 이것은 해결책이 아니라 해결책입니다.'선택' 문을 사용하여 데이터베이스 테이블을 표시하는 테스트 페이지를 만드는 것은 어떻습니까?

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

반응형