Perché ottengo l'accesso negato alla cartella dei dati quando utilizzo adb?

StackOverflow https://stackoverflow.com/questions/1043322

  •  20-08-2019
  •  | 
  •  

Domanda

Mi sono connesso al mio dispositivo live usando l'adb e i seguenti comandi:

C:\>adb -s HT829GZ52000 shell
$ ls
ls
sqlite_stmt_journals
cache
sdcard
etc
system
sys
sbin
proc
logo.rle
init.trout.rc
init.rc
init.goldfish.rc
init
default.prop
data
root
dev
$ cd data
cd data
$ ls
ls
opendir failed, Permission denied

Sono stato sorpreso di vedere che ho negato l'accesso. Come mai non riesco a sfogliare le directory usando la riga di comando in questo modo?

Come posso ottenere l'accesso come root sul mio telefono?

È stato utile?

Soluzione

Ci sono due cose da ricordare se vuoi sfogliare tutto sul tuo dispositivo.

  1. È necessario disporre di un telefono con accesso root per poter navigare nella cartella dei dati su un telefono Android. Ciò significa che hai un dispositivo sviluppatore ( ADP1 o un ION da I / O Google) o hai trovato un modo di "eseguire il root" del telefono in altro modo.
  2. Devi eseguire ADB in modalità root, esegui: adb root

Altri suggerimenti

A partire dal livello API 8 (Android 2.2), per l'applicazione di debug (quella creata da Android Studio tutte le volte a meno che non sia stata richiesta la build di rilascio), è possibile utilizzare la shell run-as comando per eseguire un comando o eseguibile come un utente / applicazione specifici o semplicemente passare al UID della tua applicazione in modo da poter accedere alla sua directory dati .

Elenca il contenuto della directory di yourapp:

run-as com.yourapp ls -l /data/data/com.yourapp

Passa all'UID di com.yourapp ed esegui tutti gli altri comandi usando quell'uid (fino a quando non chiami esci ):

run-as com.yourapp
cd /data/data/com.yourapp
ls -l
exit

& nbsp;
Nota 1 : esiste un problema noto con alcuni telefoni HTC Desire. A causa di un proprietario / autorizzazioni non standard della directory / data / data , il comando run-as non può essere eseguito su quei telefoni.

Nota 2 : come sottolineato nei commenti di @Avio: run-as ha problemi anche con i telefoni Samsung Galaxy S che eseguono Cyanogenmod in qualsiasi versione (da 7 a 10.1) perché su questa piattaforma / data / data è un link simbolico a / datadata . Un modo per risolvere il problema è sostituire il collegamento simbolico con la directory effettiva (sfortunatamente questo di solito richiede l'accesso come root).

prima di iniziare, hai un rooted ? in caso contrario, consiglio vivamente che sia ora di fare il salto. Il 99% dei tutorial che ti aiutano a fare questo richiede che tu abbia un telefono rootato (lo so b / c ho trascorso circa un'ora a cercare un modo per farlo senza avere un telefono rootato .. non riuscivo a trovare .. ) anche se ci pensi, anche il tuo iPhone deve essere rootato per fare lo stesso compito. Quindi è assolutamente ragionevole. Ulteriori informazioni sul rooting alla fine della risposta.

dal tipo di riga di comando:

adb shell

questo ti porta alla tua riga di comando della shell android (dovresti vedere qualcosa del genere: shell @ android: / $ ora digita:

shell@android:/ $run-as com.domain.yourapp

questo dovrebbe portarti direttamente alla directory dei dati di com.domain.yourapp :

shell@android:/data/data/com.domain.yourapp $ 

in caso contrario (ad esempio se si verifica un errore), probabilmente non si dispone di un telefono rootato o non si sono utilizzati i privilegi dell'utente root. Per usare i tuoi privilegi di utente root, digita su nella riga di comando di adb e vedi cosa succede, se ricevi un errore, allora il tuo telefono non è rootato. In caso contrario, esegui il root prima, quindi continua queste istruzioni.

da lì puoi digitare ls e vedrai tutte le directory incluso il dbs:

shell@android:/data/data/com.domain.yourapp $ ls

cache
databases
lib
shared_prefs   

dopo puoi usare sqlite3 per sfogliare il dbase .. se non lo hai installato (puoi scoprirlo digitando sqlite3 , se ottieni comando non trovato quindi dovrai installarlo. Per installare sqlite, segui le istruzioni qui .

sul rooting: se non hai mai effettuato il root del tuo telefono prima, e sei preoccupato che si rovini il tuo telefono, posso dirti con piena sicurezza che non c'è nulla di cui preoccuparsi. ci sono tonnellate di tutorial di rooting del telefono facili e veloci per praticamente tutti i vecchi e nuovi modelli là fuori, e puoi eseguire il root del tuo telefono anche se hai un mac (ho rootato il mio s3 con il mio mac) .

$ adb shell

$ cd / data

$ ls

opendir non riuscito, autorizzazione negata


Dovresti farlo:

$ adb shell

$ cd /data

shell@android:/data $ run-as com.your.package 

shell@android:/data/data/com.your.package $ ls

OK!

Ho avuto un problema simile durante il tentativo di operare su un Samsung Galaxy S. con root eseguendo un comando dalla shell del computer

> adb root

non riesce con un messaggio "non può essere eseguito come root nelle build di produzione". Ecco un metodo semplice che consente di diventare root.

Invece del precedente, emetti i seguenti due comandi uno dopo l'altro

> adb shell
$ su

Dopo il primo comando, se il prompt è cambiato da '>' a '$' come mostrato sopra, significa che sei entrato nell'ambiente shell adb. Se successivamente il prompt è cambiato in '#' dopo aver emesso il secondo comando, significa che ora sei root. Ora, come root, puoi fare tutto ciò che vuoi con il tuo dispositivo.

Per tornare alla shell "sicura", rilasciare

# exit

Vedrai che riappare il prompt '$', il che significa che sei nella shell adb come utente e non come root.

Ho avuto molti problemi anche con questo. Continuo a non comprendere appieno l'autorizzazione e l'esecuzione root, ma questo ha funzionato per me (una delle risposte precedenti in parte) per copiare il file di database da / data / data / [nome pacchetto] /database/my_db.db. L'esecuzione di shell root o su nella shell per qualche motivo non ha funzionato, né ha copiato il file db (potrei navigare nella directory però), né sqlite3 .

Quindi, ha funzionato! Nel prompt dei comandi DOS:

C:\Program Files\Android\android-sdk\platform-tools>adb shell
1|shell@android:/ $ run-as de.vogella.android.locationapi.maps
run-as de.vogella.android.locationapi.maps
1|shell@android:/data/data/de.vogella.android.locationapi.maps $ cd /data
cd /data
shell@android:/data $ cd data
cd data
shell@android:/data/data $ cd de.vogella.android.locationapi.maps
cd de.vogella.android.locationapi.maps
shell@android:/data/data/de.vogella.android.locationapi.maps $ cd databases
cd databases
shell@android:/data/data/de.vogella.android.locationapi.maps/databases $ ls
ls
bus_timetable_lines.db
bus_timetable_lines.db-journal
shell@android:/data/data/de.vogella.android.locationapi.maps/databases $ cat bus
_timetable_lines.db > /sdcard/db_copy.db
 bus_timetable_lines.db > /sdcard/db_copy.db                                   <
shell@android:/data/data/de.vogella.android.locationapi.maps/databases $exit   ^
exit
shell@android:/ $ exit
exit

C:\Program Files\Android\android-sdk\platform-tools>

Ora vai alla directory SDCARD e ottieni il tuo file db_copy.db. Anche quello era nascosto, ma sono riuscito a inviarlo via email. Di nuovo in Windows, sono stato in grado di aprire il file db con SQLite Database Browser. :)

Di seguito sono riportati i due passaggi per ottenere l'accesso come root:

  1. I tuoi dispositivi Android devono essere rootati.
  2. Nella shell ADB, digitare su e il dispositivo Android richiederà y / n? Scegliete consenti.

le build di produzione non possono inserire / data / app

drwxrwx--- system   cache             1970-01-01 08:00 cache
drwxrwxr-x root     system            1970-01-01 08:00 mnt 
drwxrwx--x system   system            1970-01-01 08:15 data

potrebbe essere necessario modificare il proprietario corretto per gestirlo.

Il problema potrebbe essere che dobbiamo fornire in modo specifico l'accesso root adb nelle opzioni di sviluppo negli ultimi CM. Ecco cosa ho fatto.

  

abc @ abc-L655: ~ $ sudo adb kill-server
  abc @ abc-L655: ~ $ sudo adb root start-server   * demone non in esecuzione. avviandolo ora sulla porta 5037 *   * demone avviato correttamente * l'accesso root è disabilitato dalle impostazioni di sistema - abilita nelle impostazioni - > opzioni di sviluppo

dopo aver modificato le opzioni di sviluppo ...

abc@abc-L655:~$ sudo adb kill-server
abc@abc-L655:~$ sudo adb root start-server
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
restarting adbd as root
abc@abc-L655:~$ adb shell
root@android:/ # ls /data/ .... good to go.. 

se conosci il pacchetto dell'applicazione puoi cd direttamente in quella cartella ..

es. cd data / data / com.yourapp

questo ti porterà in una directory che è read / writable in modo da poter cambiare i file secondo necessità. Poiché la cartella è la stessa nell'emulatore , puoi usarla per ottenere il percorso della cartella.

Se vuoi solo vedere il tuo DB & amp; Tabelle quindi il modo più semplice è usare Stetho . Strumento abbastanza interessante per ogni sviluppatore Android che utilizza SQLite acquistato da Facobook sviluppato .

Passaggi per utilizzare lo strumento

  1. Aggiungi sotto dependeccy nel file gradle della tua applicazione (Modulo: app)
  

'compile' com.facebook.stetho: stetho: 1.4.2 '

  1. Aggiungi sotto le righe di codice nel tuo metodo Activity onCreate ()
@Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 Stetho.initializeWithDefaults(this);
 setContentView(R.layout.activity_main);
 }

Ora, crea la tua applicazione e amp; Quando l'app è in esecuzione, puoi sfogliare il database dell'app, aprendo chrome nell'URL:

chrome://inspect/#devices

Le schermate delle stesse sono come sotto_

  

ChromeInspact

 ChromeInspact

  

Il tuo DB

 Il tuo DB

Spero che questo possa aiutare a tutti! :)

senza eseguire il root sul dispositivo è possibile accedere ai file come segue Lo screenshot di cmd:

  1. avvia l'adb usando cmd dalla cartella degli strumenti della piattaforma in base al tuo utente

    cd C:\Users\YourUserName\AppData\Local\Android\sdk\platform-tools
    

    può trovarsi in un'altra cartella a seconda di dove è stato installato.

  2. visualizza i dispositivi funzionanti.

    adb devices
    

    per esempio la risposta del comando è

    List of devices attached
    0123456789ABCDEF     device
    
  3. scrivi il comando

        adb -s 0123456789ABCDEF shell "su"
    

    si aprirà tra

        root@theDeviceName:/ #
    

4.Accesso ai file, elencare tutti i file

ls

e così via cambia directory in qualsiasi altro posto come la cartella dati

cd data/data

Quando ci si trova nella directory della shell per il dispositivo. Esegui

su - root

Quindi dovresti essere in grado di accedere ai dati / alla cartella.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top