Mengapa saya mendapat akses ditolak ke folder data saat menggunakan adb?


181

Saya terhubung ke perangkat langsung saya menggunakan adb dan perintah berikut:

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

Saya terkejut melihat bahwa saya memiliki akses ditolak. Kenapa saya tidak bisa menelusuri direktori menggunakan commandline seperti ini?

Bagaimana cara mendapatkan akses root di ponsel saya?


Sederhana ... pastikan layar ponsel Anda menyala. Klik "Izinkan" ketika ditanya apakah Anda ingin Tidak Dikenal memiliki akses ke root. Selesai

memutuskan untuk membuat AVD sederhana untuk memiliki akses ke database. Adakah yang punya tautan ke panduan, tanpa suar "khusus" dan gambar untuk pengembang? Hanya bagaimana mendapatkan android vanilla biasa pada perangkat yang dibeli.
bgs

Tidak ada prompt seperti itu terjadi pada perangkat Android 7.1.1 saya. Tapi adb berjalan di depan dan daftar isi direktori. Masalahnya adalah, isinya tidak benar-benar ada. Saya menggunakan adb-sync untuk menambahkan konten. Cukup aneh.
Tom Russell

Jawaban:


139

Ada dua hal yang perlu diingat jika Anda ingin menelusuri segala sesuatu di perangkat Anda.

  1. Anda harus memiliki ponsel dengan akses root untuk menjelajahi folder data pada ponsel Android. Itu berarti Anda memiliki perangkat pengembang ( ADP1 atau ION dari Google I / O) atau Anda telah menemukan cara untuk ' me - root' ponsel Anda dengan cara lain.
  2. Anda harus menjalankan ADB dalam mode root, lakukan ini dengan mengeksekusi: adb root

77
Dan "adb root" memerlukan build kustom adb, jika tidak "adbd tidak dapat berjalan sebagai root dalam build produksi"
bortzmeyer

16
membangun kustom adb? dari mana saya bisa mendapatkannya?
Gopinath

9
ada jawaban untuk pertanyaan @Gopinath?
Ewoks

2
@ Gopinath: Saya yakin Anda harus membangunnya dari sumber untuk perangkat target, yang dikonfigurasi untuk memungkinkan root menggunakan ndk kemudian flash ke perangkat bersama dengan gambar file biner.
Ben Jaguar Marshall

4
AFAIK, tidak perlu memiliki custom adb. Ini diperlukan untuk memiliki dukungan adbd berjalan sebagai root, tetapi adbd ini ada di perangkat - jadi modifikasi apa pun yang dilakukan untuk membuat perangkat memiliki akses root sudah cukup.
nitzanms

222

Mulai dari API level 8 (Android 2.2), untuk aplikasi yang dapat di-debuggable (yang dibangun oleh Android Studio setiap saat, kecuali jika rilisnya diminta), Anda dapat menggunakan run-asperintah shell untuk menjalankan perintah atau dijalankan sebagai pengguna / aplikasi tertentu atau hanya beralih ke UID aplikasi Anda sehingga Anda dapat mengakses direktori datanya .

Daftar konten direktori aplikasi Anda:

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

Alihkan ke UID dari com.yourapp dan jalankan semua perintah lebih lanjut menggunakan uid itu (sampai Anda menelepon exit):

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

 
Catatan 1 : ada masalah yang diketahui dengan beberapa ponsel HTC Desire. Karena pemilik / izin non-standar dari /data/datadirektori, run-asperintah gagal dijalankan pada ponsel tersebut.

Catatan 2 : Seperti yang ditunjukkan dalam komentar oleh @Avio: run-asmemiliki masalah juga dengan ponsel Samsung Galaxy S yang menjalankan Cyanogenmod pada versi apa pun (dari 7 hingga 10.1) karena pada platform /data/dataini terdapat symlink ke /datadata. Salah satu cara untuk mengatasi masalah ini adalah mengganti symlink dengan direktori aktual (sayangnya ini biasanya memerlukan akses root).


2
Ini berfungsi saat Anda menjelaskan di mana Anda run-as com.mypackage. Masalah yang saya temui adalah sqlite3 /data/data/com.mypackage/databases/mydbmengatakan "sqlite3: izin ditolak". Bisakah sqlite3 hanya dijalankan oleh root?
styfle

5
Bekerja seperti pesona ketika datang ke daftar file yang disimpan di penyimpanan internal.
zaplec

5
Saya harus mengubah izin pada file untuk dapat memindahkannya ke sdcard saya, karena saya tidak dapat menjalankannya sebagai aplikasi saya. Jadi, 1) run-as com.package.example, chmod 777 databasefile.db. 2) keluar, buka sdcard, cp /data/data/com.package.example/databases/databasefile.db. Dan langkah 3 harus mengembalikan izin 777
Maragues

3
Paket saya tidak diketahui tidak peduli seberapa benar saya mengejanya ke terminal saya: (
Costa

3
Ini harus menjadi jawaban yang ditandai dengan benar karena ini adalah metode yang tepat untuk digunakan untuk ponsel yang tidak di-root.
LNI

49

sebelum kita mulai, apakah Anda memiliki ponsel yang sudah di- rooting ? jika tidak, saya sangat menyarankan bahwa sudah saatnya Anda melakukan lompatan. 99% tutorial yang membantu Anda melakukan ini mengharuskan Anda memiliki ponsel yang di-rooting (Saya tahu, saya menghabiskan sekitar satu jam mencari cara untuk melakukannya tanpa memiliki ponsel yang di-root .. tidak dapat menemukan .. ) juga jika Anda memikirkannya, iPhone Anda juga harus di-root untuk melakukan tugas yang sama. Jadi itu sangat masuk akal. Lebih lanjut tentang rooting di akhir jawaban.

dari jenis baris perintah Anda:

adb shell

ini akan membawa Anda ke baris perintah shell android Anda (Anda akan melihat sesuatu seperti ini: shell@android:/ $sekarang ketik:

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

ini akan membawa Anda langsung ke direktori data com.domain.yourapp:

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

jika tidak (yaitu jika Anda mendapatkan kesalahan) maka Anda mungkin tidak memiliki ponsel yang di-rooting, atau Anda belum menggunakan hak pengguna root. Untuk menggunakan hak istimewa pengguna root, ketik supada baris perintah adb dan lihat apa yang terjadi, jika Anda mendapatkan kesalahan, maka ponsel Anda tidak di-root. Jika tidak, lakukan root terlebih dahulu kemudian lanjutkan instruksi ini.

dari sana Anda bisa mengetik lsdan Anda akan melihat semua direktori termasuk dbs:

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

cache
databases
lib
shared_prefs   

setelah itu Anda dapat menggunakan sqlite3 untuk menelusuri dbase .. jika Anda belum menginstalnya (Anda dapat mengetahuinya dengan mengetik sqlite3, jika Anda mendapatkannya command not foundmaka Anda harus menginstalnya. Untuk menginstal sqlite, ikuti instruksi di sini .

tentang rooting: jika Anda belum pernah me-rooting ponsel Anda sebelumnya, dan Anda khawatir akan melakukan rooting pada ponsel Anda, saya dapat memberi tahu Anda dengan keyakinan penuh bahwa tidak ada yang perlu dikhawatirkan. ada banyak tutorial rooting ponsel yang cepat dan mudah untuk hampir semua model baru dan lama di luar sana, dan Anda dapat me-root ponsel Anda walaupun Anda memiliki mac (saya melakukan root s3 dengan mac saya).


8
Anda tidak perlu ponsel yang sudah di-rooting agar run-asdapat berfungsi. Saya baru saja mencobanya pada Galaxy Nexus S. versi produksi
Ted Hopp

@TedHopp dan b / c berfungsi dengan baik pada produksi Anda membangun Galaxy Nexus S .. itu akan bekerja dengan baik pada semua ponsel android kan?
abbood

Pertama, ponsel saya adalah contoh tandingan yang menunjukkan bahwa ponsel yang di-root tidak diperlukan . Kedua, ya, itu harus bekerja pada semua perangkat non-root yang setidaknya Android 2.2 (bukan karena itu berfungsi pada ponsel saya, tetapi karena itu seharusnya berfungsi; lihat jawaban oleh Idolon ).
Ted Hopp

@TedHopp secara pribadi saya bukan pengembang Android .. dan instruksi seperti itu build the application as debuggable (either by building it with the Eclipse, or ant debug command)mungkin terdengar sepele bagi Anda, tetapi mereka agak mengintimidasi saya. Saya kira jawaban saya lebih untuk orang-orang yang nyaman dengan rooting ponsel android mereka, tetapi tidak berpengalaman dalam dunia dev android. Tapi saya senang kita melakukan diskusi ini .. Saya ingin para pembaca jawaban saya menyadari alternatif non-rooting lainnya
abbood

1
Jawaban yang bagus Saya menggunakan beberapa ponsel berbeda di sini, (MotoX, nexus4, LG G3, SGIII) dan ini cukup baik untuk semua.
Chad Bingham

45

$ adb shell

$ cd / data

$ ls

opendir gagal, Izin ditolak


Anda harus melakukan ini:

$ adb shell

$ cd /data

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

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

BAIK!


Ini bekerja! Beberapa hal yang harus dilakukan sebelum menjalankan perintah apa pun. Setelah opsi pengembang diaktifkan di ponsel, kita juga perlu mengaktifkan debugging USB . Saya juga mengaktifkan sesuatu di ponsel saya (HTC M8) yang disebut Pilih aplikasi debug dan pilih aplikasi saya. Bisa jadi standar pada semua ponsel ... harus.
srinij

30

Saya memiliki masalah yang sama ketika mencoba untuk beroperasi pada Samsung Galaxy S. yang sudah di-root. Menerbitkan perintah dari shell komputer

> adb root

gagal dengan pesan "tidak dapat berjalan sebagai root di build produksi". Berikut adalah metode sederhana yang memungkinkan untuk menjadi root.

Alih-alih yang sebelumnya, keluarkan dua perintah berikut satu demi satu

> adb shell
$ su

Setelah perintah pertama, jika prompt telah berubah dari '>' ke '$' seperti yang ditunjukkan di atas, itu berarti Anda telah memasuki lingkungan adb shell. Jika selanjutnya prompt telah berubah menjadi '#' setelah mengeluarkan perintah kedua, itu berarti Anda sekarang root. Sekarang, sebagai root, Anda dapat melakukan apa pun yang Anda inginkan dengan perangkat Anda.

Untuk beralih kembali ke shell 'aman', masalah

# exit

Anda akan melihat bahwa prompt '$' muncul kembali yang berarti Anda berada di shell adb sebagai pengguna dan bukan sebagai root.


13
su: izin ditolak
petrnohejl

3
Keren terima kasih! Btw Anda harus memiliki ponsel yang sudah di-rooting untuk melakukan ini. Anda mungkin juga membutuhkan SuperSU atau yang serupa? Setidaknya ketika saya mencoba menggunakan "su" SuperSU memberi saya dialog di ponsel saya.
Richard Fung

16
/ system / bin / sh: su: tidak ditemukan
matt lohkamp

1
Terima kasih :) adb shell + sumenyelesaikan masalah izin yang mengganggu selamanya. Saya memiliki masalah tentang su: not foundAndroid 4.3 tetapi karena saya memutakhirkan ke masalah 4.4.2 menghilang. 4.3 tampaknya memiliki masalah.

3
su tidak tersedia untuk saya, Nexus 5 / Android 5.1 - apakah ada solusi?
CodeManX

19

Saya punya banyak masalah dengan ini juga. Saya masih belum sepenuhnya memahami izin dan proses root, tetapi ini berhasil bagi saya (salah satu jawaban sebelumnya sebagian) untuk menyalin file database dari / data / data / [nama paket] / databases/my_db.db. Menjalankan shell root , atau su in shell karena alasan tertentu tidak berhasil, juga tidak menyalin file db (saya bisa menavigasi ke direktori), juga sqlite3 .

Jadi, ini berhasil! Dalam prompt perintah 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>

Sekarang buka direktori SDCARD dan dapatkan file Anda db_copy.db. Bahkan itu disembunyikan, tetapi saya berhasil mengirimkannya melalui email. Kembali di Windows, saya bisa membuka file db dengan SQLite Database Browser. :)


Saya mencoba -> run-as <app_package_name> Tapi adb tidak mengenali app_package_name saya. Saya menggunakan nama_paket yang saya tentukan di AndroidManifest.xml saya. Apakah ada sesuatu yang saya lewatkan?
BAHTERA

3

Berikut adalah dua langkah untuk mendapatkan akses root:

  1. Perangkat android Anda harus di-root.
  2. Di shell ADB, ketik su dan perangkat android akan menanyakan y / n? Anda pilih izinkan.

ketik su .. akan memberikan prompt pada perangkat seluler .. meminta izin super melalui Superuser .. itu berfungsi
Mahajan344

2

build produksi tidak bisa masuk / data / aplikasi

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

mungkin perlu diubah ke pemilik yang tepat untuk mengoperasikannya.


2

Masalahnya mungkin kita perlu secara khusus memberikan akses root adb di opsi developnent di CM terbaru .. Inilah yang saya lakukan.

abc @ abc-L655: ~ $ sudo adb kill-server
abc @ abc-L655: ~ $ sudo adb root start-server * daemon tidak berjalan. mulai sekarang di port 5037 * * daemon mulai berhasil * akses root dinonaktifkan oleh pengaturan sistem - aktifkan dalam pengaturan -> opsi pengembangan

setelah mengubah opsi pengembangan ...

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.. 

1

jika Anda mengetahui paket aplikasi Anda dapat cdlangsung ke folder itu ..

misalnya cd data/data/com.yourapp

ini akan menjatuhkan Anda ke direktori yang read/writablememungkinkan Anda dapat mengubah file sesuai kebutuhan. Karena foldernya sama emulator, Anda dapat menggunakannya untuk mendapatkan path folder.


2
Saya dapat melakukan cd ke folder secara langsung, tetapi saya masih mendapatkan kesalahan "opendir gagal, izin ditolak".
Tyler Collier

Ini karena pengguna "shell" adb telah menjalankan izin pada direktori, tetapi tidak membaca izin.
Chris Stratton

0

Jika Anda hanya ingin melihat DB & Tabel Anda maka cara paling keren adalah menggunakan Stetho. Alat yang sangat keren untuk setiap pengembang Android yang menggunakan SQLitebuit oleh Facobook developed.

Steps to use the tool

  1. Tambahkan dependeccy di bawah ini dalam file gradle aplikasi Anda (Modul: aplikasi)

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

  1. Tambahkan baris kode di bawah ini dalam metode Activity onCreate () Anda
@Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 Stetho.initializeWithDefaults(this);
 setContentView(R.layout.activity_main);
 }

Sekarang, buat aplikasi Anda & Saat aplikasi sedang berjalan, Anda dapat menjelajahi basis data aplikasi Anda, dengan membuka chrome di url:

chrome://inspect/#devices

Tangkapan layar yang sama adalah seperti di bawah ini_

ChromeInspact

ChromeInspact

DB Anda

DB Anda

Semoga ini bisa membantu semuanya! :)


0

Ini berfungsi jika perangkat Android Anda di-root dengan cara apa pun (tidak yakin apakah itu berfungsi untuk non-root).

  1. adb shell - mengakses shell
  2. su - menjadi superuser.

Anda sekarang dapat membaca semua file di semua direktori.


-3

tanpa me - rooting perangkat Anda dapat mengakses file dengan screenshot cmd berikut:

  1. mulai adb menggunakan cmd dari folder platform-tools sesuai dengan pengguna Anda

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

    itu bisa di folder lain tergantung di mana Anda menginstalnya.

  2. tampilkan perangkat yang berfungsi.

    adb devices

    untuk mengatakan respon os perintahnya adalah

    List of devices attached
    0123456789ABCDEF     device
  3. tulis perintahnya

        adb -s 0123456789ABCDEF shell "su"

    itu akan terbuka

        root@theDeviceName:/ #

4. Mengakses file, daftar semua file

ls

dan sebagainya direktori chang ke mana saja seperti folder data

cd data/data

1
C: \ Users \ bruker \ AppData \ Local \ Android \ sdk \ platform-tools> adb -s emulator-5554 shell "su" / system / bin / sh: su: tidak ditemukan
Solo

dalam kasus saya itu android 5.0.2 saya tidak tahu apakah itu berbeda dari versi ke yang lain @Koen
Mahmoud Ashraf

jalannya tergantung di mana Anda menginstal android studio dan itu SDK @ Sol
Mahmoud Ashraf

1
Masalahnya bukan menemukan di mana adb. Itu ada di PATH saya. Mendapatkan daftar file (atau bahkan mengeksekusi su) tidak berfungsi / tidak diizinkan. Pengujian dengan Android 4.3.
Koen

su tidak ditemukan
Brill Pappin

-5

Ketika Anda berada di direktori shell untuk perangkat. Lari saja

su - root

Maka Anda harus dapat mengakses data / folder.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.