2013-08-10 3 views
6

내 우분투 설치에 문제가 있습니다. 주로 DBMS를 통해 이클립스와 덤프 쉘에서/data/folder의 내용을 볼 수 없기 때문에 주로 데이터베이스를 디버그 할 수 없습니다. 파일이 표시되지 않습니다.Genymotion. 장치에서 데이터베이스를 가져 오는 방법. 내/데이터/데이터/폴더가 비어있는 것 같습니다

나는 adb를 cd로/sdk/platform-tools에 로그인하고 ./adb shell su를 입력합니다. 그 탭이 작동하지 않는 것을 보았습니다. 그래서 나는 맹목적으로 경로를 입력합니다. 어쨌든 나는 DB를 당길 수 없다. 어쩌면 커맨드에 문제가있다.

DBMS를 통해 연결하려고하지만 데이터 폴더에 콘텐츠가 표시되지 않습니다.

에뮬레이터에서 모든 것이 원활하게 작동하지만 에뮬레이터가 느리고 차라리 genymotion을 사용합니다.

이 문제를 해결하는 방법에 대한 제안 사항이 있으십니까?

답변

0

나는이 문제를 해결할 수 있도록 관리 했으므로 다른 사람들이 도움이 될 경우에 대비하여 솔루션을 게시합니다.

이전에는 휴대 전화를 뿌리 뽑고 싶을 때마다 수퍼 유저 앱이 다운 된 Google apis없이 VM을 만들었습니다.

그래서 Google Play 및 다운로드 된 SQL 디버거 응용 프로그램과 함께 제공되는 VM을 만들었습니다. 테스트 스위트에서이 코드를 사용하기 때문에 실행하는 모든 테스트가 끝날 때 SD 카드에 db를 가져옵니다. 그렇게하면 수퍼 유저 권한이 필요하지 않습니다.

public static void copyDbToSd(Context context) { 
    File dbFile = context.getDatabasePath((String) DatabaseHandler.DATABASE_NAME); 


    InputStream myInput; 
    try { 
     myInput = new FileInputStream(dbFile); 
     OutputStream myOutput = new FileOutputStream(
       Environment.getExternalStorageDirectory() 
       + java.io.File.separator 
       + "database.db"); 

     byte[] buffer = new byte[1024]; 
     int length; 
     while ((length = myInput.read(buffer)) > 0) { 
      myOutput.write(buffer, 0, length); 
     } 

     myOutput.flush(); 
     myOutput.close(); 
     myInput.close(); 
    } catch (FileNotFoundException e) { 
     Log.e(TAG, "Exception: ", e); 
    } catch (IOException e) { 
     Log.e(TAG, "Exception: ", e); 
    } 

} 

여기서 DatabaseHandler.DATABASE_NAME은 db를 만들 때 설정 한 데이터베이스의 이름입니다.

11

당신이 말하는 문제가 없습니다. Genymotion의 기본 셸 사용자는 root이므로, 그렇게해서는 안됩니다. 모든 기능에도 불구하고 run-as 명령을 사용하여 데이터에 직접 액세스 할 수 있습니다.

짧게 만드십시오. 앱의 데이터 폴더는 앱의 사용자 권한으로 보호됩니다. 기본 셸 사용자에게 앱의 폴더에 대한 권한이 없습니다. run-as 명령 덕분에 쉘이 사용중인 사용자를 변경할 수 있습니다.

  1. 열고 쉘 :
  2. adb shell 그런 다음 입력 : run-as your.package.name

이 명령은 앱 사용자에게 쉘 사용자가 변경됩니다. 따라서 앱의 데이터를 읽고 쓸 수있는 권리가 있습니다. 앱의 데이터 폴더로 리디렉션됩니다. /data/data/you.package.name

완료되면 파일을 쉽게 탐색 할 수 있습니다.

알림 :이 명령어를 사용하려면 응용 프로그램을 디버그로 빌드해야합니다. DDMS의 장치 프로세스 목록에 표시되어야합니다. 다음 로컬 컴퓨터에

+0

이 대답은 내가 대답을 업데이 트했습니다 –

+0

:(이해하기에 너무 복잡하다. 당신은 아직도 내가 당신을 위해 –

+1

그것이 메이트있어 :-) 무엇을 할 수 있는지 모른다 이해하지 않는 경우. 고마워요 :) –

7

실행 에뮬레이터,

localuser : ~ 로컬 호스트 $의 ADB 쉘
쉘 @ 안드로이드 :/$ 스와
쉘 @ 안드로이드 :/#의 CP/데이터/데이터/your.package ./ # 출구
쉘 @ 안드로이드 :/$ 출구
localuser : 이름
/데이터베이스/your_database.db을/mnt/쉘// 0/다운로드/your_database.db
쉘 @ 안드로이드를 에뮬레이트 ~ 로컬 호스트
1. 넥트
2. 요청 수퍼 유저 permissi 에뮬레이터 : $ ADB 풀을/mnt/쉘// 0/다운로드/your_database.db ~/your_database.db

그것이 무엇을하는 것은 에뮬레이션 ons
3. 수퍼 유저 만 사용할 수있는 파일을 공용 디렉토리 (이 경우 다운로드)로 복사합니다.
4. 공용 폴더 (다운로드)에서 로컬 컴퓨터 홈 디렉토리로 파일을 가져옵니다. 이클립스 GUI에서이 단계를 수행 할 수도있다.

2

해당 폴더/파일에 대한 권한을 설정했습니다, 당신은 쉽게 뽑을 수 :

ADB 쉘 "를 실행-로 package.name chmod를 666 /data/data/package.name/databases/을 파일 "

adb pull /data/data/package.name/databases/file.