2013-08-10 7 views
6

Ho un problema con la mia installazione di Ubuntu di genomotion. Principalmente non riesco a eseguire il debug del mio database poiché sia ​​tramite DBMS in eclipse e adb in shell non riesco a visualizzare il contenuto di/data/cartella. Non ci sono file mostrati.Genomotion. Come estrarre il database dal dispositivo. la mia cartella/data/data/sembra vuota

Accedo adb da cd a/sdk/platform-tools e digito ./adb shell su. Vedo che la scheda non funziona, quindi scrivo ciecamente il percorso. Ad ogni modo non sono in grado di tirare db, forse sto facendo qualcosa di sbagliato con i comandi.

Attraverso il DBMS, provo a collegarmi ma la cartella dati non visualizza il contenuto.

Sull'emulatore tutto funziona senza problemi, ma l'emulatore è lento e preferisco usare la genomotion.

Qualche suggerimento su come affrontare questo problema?

risposta

0

Sono riuscito a risolvere il problema in modo da pubblicare la mia soluzione nel caso qualcuno lo trovasse utile.

In precedenza ho creato VM senza google apis, l'app superutente si è bloccata ogni volta che volevo eseguire il root del telefono.

così ho creato VM che è fornito con Google Play e scaricato SQL Debugger App. Io uso questo codice anche nella mia suite di test e quindi prendo db su SD-card alla fine di ogni test che corro. In questo modo non ho bisogno di avere i permessi di superutente.

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); 
    } 

} 

dove DatabaseHandler.DATABASE_NAME è il nome del mio database impostato per la creazione di db.

11

Non ho il problema di cui si sta parlando, l'utente di shell predefinito su Genymotion è root, quindi non dovrebbe accadere. Nonostante tutto, puoi usare il comando run-as per accedere direttamente ai tuoi dati.

Per farla breve. La cartella dati della tua app è protetta dai diritti utente della tua app. L'utente di shell predefinito non ha il diritto di accedere alla cartella dell'app. È possibile modificare l'utente utilizzato dalla shell grazie al comando run-as.

  1. Aprire una shell: adb shell
  2. tipo Poi: run-as your.package.name

Questo comando cambierà l'utente shell per l'utente della vostra applicazione. Così avrai il diritto di leggere e scrivere sui dati dell'app. Verrai reindirizzato alla cartella dati della tua app: /data/data/you.package.name

Al termine puoi sfogliare facilmente i tuoi file.

Avviso: l'app deve essere compilata come debug per poter utilizzare questo comando. Dovrebbe essere visualizzato nell'elenco dei processi del dispositivo su DDMS.

+0

questa risposta è troppo complicato da capire :( –

+0

Ho aggiornato la risposta. Se ancora non si capisce non so cosa posso fare per te :-) –

+1

ottenuto esso gemella. molte grazie :) –

7

Run emulatore sul computer locale, quindi

localuser: ~ guscio localhost $ adb shell
@ Android:/$ su
shell @ Android:/# cp/dati/data/your.package .nome/database/your_database.db/mnt/shell/emulato/0/Download/your_database.db
shell @ Android:/# exit
shell @ Android:/$ uscita
localuser: ~ localhost $ adb tirare/mnt/shell/emulato/0/download/your_database.db ~/your_database.db

ciò che fa è:
1. si connette a all'emulatore
Permissi 2. le domande di superutente ons
3. Copia il file disponibile solo per superutente in una directory pubblica (Download in questo caso)
4. Tira il file dalla cartella pubblica (Download) alla directory home della macchina locale; puoi anche eseguire questo passaggio da eclipse gui.

2

Hai per impostare le autorizzazioni per quella cartella/file, è possibile estrarre facilmente:

adb shell "run-as package.name chmod 666 /data/data/package.name/databases/ file "

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

Problemi correlati