Android 기기에서 데이터 / 데이터 폴더에 액세스하는 방법은 무엇입니까?
앱을 개발 중이며 데이터베이스 *.db
가data/data/com.****.***
sqlite manager의 도움으로 Eclipse의 AVD 에서이 파일에 액세스 할 수 있습니다
그러나 안드로이드 폰 에서이 파일에 액세스 할 수 없습니다.
나는 그것을 구글하고 그것을 내 전화를 근절해야한다고 말하지만, 그것을하고 싶지 않습니다. (새 전화, 보증 문제 및 보안 문제)
그래서 내 질문은 : data/data/.....
" 루팅하지 않고 내 안드로이드 전화에서 내 디렉토리에 어떻게 액세스 할 수 있습니까?"
디렉토리 data/data.....
를 루팅하지 않고 디렉토리에 대한 사용자 권한을 변경할 수 있습니까 ?
휴대 전화에서 직접 파일에 액세스하는 것은 어렵지만 원하는 작업을 수행 할 수있는 컴퓨터로 파일을 복사 할 수 있습니다. 응원하지 않으면 두 가지 옵션이 있습니다.
응용 프로그램을 디버깅 할 수있는 경우
run-as
adb 쉘 에서 명령을 사용할 수 있습니다adb shell run-as com.your.packagename cp /data/data/com.your.packagename/
또는 안드로이드의 백업 기능을 사용할 수 있습니다.
adb backup -noapk com.your.packagename
이제 '장치 잠금을 해제하고 백업 작업을 확인하십시오'라는 메시지가 표시됩니다. 암호를 제공하지 않는 것이 가장 좋습니다. 그렇지 않으면 데이터를 읽기가 더 어려워집니다. '데이터 백업'을 클릭하십시오. 컴퓨터의 결과 'backup.ab'파일에는 Android 백업 형식의 모든 응용 프로그램 데이터가 포함됩니다. 기본적으로 압축 된 tar 파일입니다. 이 페이지 는 OpenSSL의 zlib 명령을 사용하여 압축을 해제하는 방법을 설명합니다.
adb restore backup.db
명령을 사용 하여 백업을 복원 할 수 있습니다 .
Android Studio 3.0 이상 버전을 사용중인 경우 다음 단계를 수행하십시오.
- 보기 > 도구 창 > 장치 파일 탐색기를 클릭하십시오 .
- / data / data / [package-name] 노드를 펼치십시오 .
루트가 아닌 장치에서 디버그 모드로 실행되는 패키지 만 확장 할 수 있습니다.
루트 탐색기 앱을 사용하여 DB를 가져 오려고 시도 할 수도 있습니다. 그리고 그것이 작동하지 않으면 이것을 시도 할 수 있습니다 :
- cmd 열기
- 디렉토리를 변경하고 '플랫폼 도구'로 이동하십시오.
- '
adb shell
' 입력 su
- 기기에서 '허용'을 누르십시오
chmod 777 /data /data/data /data/data/com.application.package /data/data/com.application.package/*
- 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
- 명령 프롬프트를 엽니 다
- 디렉토리를 E : \ Android \ adt-bundle-windows-x86_64-20140702 \ adt-bundle-windows-x86_64-20140702 \ sdk \ platform-tools로 변경하십시오.
- 아래 명령을 입력하십시오
adb -d shell
run-as com.your.packagename cat databases/database.db > /sdcard/database.db
- 존재
cd /sdcard
하도록 디렉토리를 변경 하십시오database.db
. 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 파일을 추출하려면
- 여기로 가서 다운로드하십시오 : https://sourceforge.net/projects/adbextractor/
- 다운로드 한 파일을 추출하고 추출한 폴더로 이동하십시오.
- 자신의 파일 이름으로 이것을 실행하십시오. 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 텍스트 편집기"를 클릭해야합니다.
관리자 권한이 필요한이 폴더에 액세스 할 수 있습니다.
따라서 두 가지 옵션이 있습니다.
- 장치를 근절 하고이 폴더에 액세스하려고
- 에뮬레이터 사용
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
'IT' 카테고리의 다른 글
첫 번째 직계 자녀만을위한 CSS 선택기가 있습니까? (0) | 2020.03.21 |
---|---|
MySQL-문자열 길이로 데이터를 선택하는 방법 (0) | 2020.03.21 |
PHP 스크립트를 프로파일 링하는 가장 간단한 방법 (0) | 2020.03.21 |
AngularJ에서 사전에 ng-repeat를 사용하는 방법은 무엇입니까? (0) | 2020.03.21 |
C ++ 컴파일러가 operator == 및 operator! =를 정의하지 않는 이유는 무엇입니까? (0) | 2020.03.21 |