Perché ottengo l'accesso negato alla cartella dei dati quando utilizzo adb?
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?
Soluzione
Ci sono due cose da ricordare se vuoi sfogliare tutto sul tuo dispositivo.
- È 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.
- 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 ??code>. 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:
- I tuoi dispositivi Android devono essere rootati.
- 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
- Aggiungi sotto dependeccy nel file gradle della tua applicazione (Modulo: app)
'compile' com.facebook.stetho: stetho: 1.4.2 '
- 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
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:
-
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.
-
visualizza i dispositivi funzionanti.
adb devices
per esempio la risposta del comando è
List of devices attached 0123456789ABCDEF device
-
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.