Adb kullanırken neden veri klasörüne erişim reddedildi?


181

Canlı cihazıma adb ve aşağıdaki komutları kullanarak bağlandım:

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

Erişimin reddedildiğini görünce şaşırdım. Neden böyle bir komut satırı kullanarak dizinlere göz atamıyorum?

Telefonuma nasıl root erişimi alabilirim?


Basit ... Telefon ekranınızın açık olduğundan emin olun. Bilinmeyen'in köke erişmesini isteyip istemediğinizi sorduğunda "İzin Ver" i tıklayın. Bitti.

veritabanına erişim için basit bir avd oluşturmaya karar verdi. Herkes "özel" parlama ve geliştiriciler için grafik olmadan kılavuzları için herhangi bir bağlantısı var mı? Satın alınan bir cihazda düz vanilya android nasıl.
bgs

Android 7.1.1 cihazımda böyle bir istem gerçekleşmiyor. Ancak adb devam eder ve dizinin içeriğini listeler. Sorun şu ki, içerik aslında mevcut değil. İçerik eklemek için adb-sync kullanıyorum. Çok garip.
Tom Russell

Yanıtlar:


139

Cihazınızdaki her şeye göz atmak istiyorsanız hatırlamanız gereken iki şey vardır.

  1. Bir Android telefonda veri klasörüne göz atmak için root erişimi olan bir telefonunuz olması gerekir. Bu, bir geliştirici cihazınız ( ADP1 veya Google I / O'dan bir ION ) veya telefonunuzu başka bir şekilde ' köklendirmenin ' bir yolunu bulduğunuz anlamına gelir .
  2. ADB'yi kök modunda çalıştırmanız gerekir, bunu yaparak şunları yapın: adb root

77
Ve "adb root" özel bir adb derlemesi gerektirir, aksi takdirde "adbd üretim derlemelerinde kök olarak
çalışamaz

16
adb özel yapı? nereden alabilirim?
Gopinath

9
@Gopinath sorusuna herhangi bir cevap var mı?
Ewoks

2
@Gopinath: ndk kullanarak kök izin vermek için yapılandırılmış, hedef dosya için kaynaktan oluşturmak zorunda inanıyorum ve sonra ikili dosyaların bir görüntü ile birlikte cihaza flaş.
Ben Jaguar Marshall

4
AFAIK, özel bir adb yapısına sahip olmak gerekli değildir. Adbd desteğinin root olarak çalışması gerekir , ancak bu adbd cihazdadır - bu nedenle cihazın kök erişimine sahip olması için herhangi bir değişiklik yapılması yeterlidir.
nitzanms

222

API düzey 8'den (Android 2.2) başlayarak, hata ayıklanabilir uygulama için (sürüm oluşturma istenmedikçe Android Studio tarafından her zaman oluşturulan uygulama), run-asbelirli bir kullanıcı / uygulama olarak bir komutu veya yürütülebilir dosyayı çalıştırmak için shell komutunu kullanabilirsiniz. veya veri dizinine erişebilmek için uygulamanızın UID'sine geçmeniz yeterlidir .

Yourapp'in dizin içeriğini listele:

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

Com.yourapp komutunun UID'sine geçin ve bu uid'i kullanarak (arama yapana kadar exit) tüm diğer komutları çalıştırın :

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

 
Not 1 : Bazı HTC Desire telefonlarında bilinen bir sorun vardır. /data/dataDizinin standart olmayan bir sahibi / izinleri nedeniyle , run-askomut bu telefonlarda çalışamaz.

Not 2 : @Avio tarafından yapılan yorumlarda belirtildiği gibi: run-asCyanogenmod'u herhangi bir sürümde (7'den 10.1'e) çalıştıran Samsung Galaxy S telefonlarıyla da ilgili sorunlar var, çünkü bu platformda /data/databir sembolik bağlantı var /datadata. Sorunu çözmenin bir yolu, symlink'i gerçek dizinle değiştirmektir (maalesef bu genellikle kök erişimi gerektirir).


2
Bu, nerede açıkladığınız gibi çalışır run-as com.mypackage. Karşılaştığım sorun sqlite3 /data/data/com.mypackage/databases/mydb"sqlite3: izin reddedildi" diyor. Sqlite3 sadece root tarafından çalıştırılabilir mi?
styfle

5
Dahili depolamada depolanan dosyaları listelemeye gelince cazibe gibi çalışır.
zaplec

5
Benim sdcard taşıyabilmek için dosya izinlerini değiştirmek zorunda kaldı, çünkü benim uygulama olarak çalışan cp olamazdı. Yani, 1) com.package.example olarak çalıştırın, chmod 777 databasefile.db. 2) çıkın, sdcard'a gidin, cp /data/data/com.package.example/databases/databasefile.db. Ve 3. adım 777 izinlerini geri almalı
Maragues

3
Paketim, terminalime ne kadar doğru hecelediğim önemli değil: (
Costa

3
Bu, köklü olmayan telefonlar için doğru yöntem olduğu için doğru işaretlenmiş cevap olmalıdır.
LNI

49

Başlamadan önce, bir var köklü telefonu? değilse, atlamayı yapmanın zamanı geldiğini şiddetle tavsiye ederim. Bunu yapmanıza yardımcı olan öğreticilerin% 99'u rootlu bir telefona sahip olmanızı gerektirir (biliyorum b / c Rootlu bir telefona sahip olmadan bunu yapmanın bir saatini aradım. ) ayrıca düşünürseniz, iPhone'unuzun da aynı görevi yerine getirebilmesi için rootlanması gerekir. Yani tamamen mantıklı. Yanıtın sonunda köklenme hakkında daha fazla bilgi.

komut satırı türünüzden:

adb shell

Bu android kabuk comand satırına götürür (böyle bir şey görmelisiniz: shell@android:/ $şimdi yazın:

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

bu sizi doğrudan veri dizinine götürmelidir com.domain.yourapp:

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

yoksa (yani bir hata alırsanız) muhtemelen köklü bir telefonunuz yoktur veya kök kullanıcı ayrıcalıklarınızı kullanmamışsınızdır. Kök kullanıcı ayrıcalıklarınızı kullanmak için suadb komut satırına yazın ve ne olduğunu görün, bir hata alırsanız telefonunuz köklü değildir. Değilse, önce köklendirin, ardından bu talimatlara devam edin.

oradan yazabilirsiniz lsve dbs dahil tüm dizinleri göreceksiniz:

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

cache
databases
lib
shared_prefs   

Eğer yüklü yoksa .. dBASE gözatmak için sqlite3 kullanabilirsiniz bundan sonra (eğer yazarak bunu öğrenebilirsiniz sqlite3sen alırsanız, command not foundo zaman yüklemeniz gerekecek., sqlite yüklemek talimatları izleyin buraya .

Köklendirme hakkında: Telefonunuzu daha önce hiç köklendirmediyseniz ve telefonunuzu vidalamaktan endişe ediyorsanız, endişelenecek bir şey olmadığından emin olabilirsiniz. hemen hemen tüm yeni ve eski modeller için tonlarca hızlı ve kolay telefon köklendirme öğretici var ve bir mac olsa bile telefonunuzu rootlayabilirsiniz (mac'imi mac'imle köklendirdim).


8
run-asÇalışmak için rootlu bir telefona ihtiyacınız yok . Ben sadece bir yapım inşa Galaxy Nexus S üzerinde denedim
Ted Hopp

@TedHopp ve böylece b / c üretim-yapım Galaxy Nexus S sadece iyi çalışır .. tüm android telefonlarda sadece iyi çalışacak değil mi?
abbood

İlk olarak, telefonum rootlu bir telefonun gerekli olmadığını gösteren bir örnek . İkincisi, evet, hepsi olmayan kök cihazlarda çalışması gerekir en az Android 2.2 (değil çünkü bu benim telefonda çalışır, ancak işin gerekiyordu nasıl yıllardan çünkü; bkz Idolon tarafından cevap ).
Ted Hopp

@TedHopp şahsen ben bir android geliştirici pek değilim ... ve bu yüzden gibi talimatlar build the application as debuggable (either by building it with the Eclipse, or ant debug command)sizin için önemsiz gelebilir, ama onlar beni korkutuyorlar. Sanırım cevabım android telefonlarını köklendirme konusunda rahat olan insanlar için daha fazla, ancak android dev dünyasında iyi usta değil. Ama bu tartışmayı yaptığımıza sevindim .. Cevabımın okuyucularının diğer köklü olmayan alternatiflerin farkında olmalarını istiyorum
abbood

1
Harika cevap adamım. Burada birkaç farklı telefon kullanıyorum (MotoX, nexus4, LG G3, SGIII) ve bu herkes için oldukça iyi.
Chad Bingham

45

$ adb shell

$ cd / veri

$ ls

opendir başarısız oldu, izin verilmedi


Bunu yapmalısın:

$ adb shell

$ cd /data

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

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

TAMAM!


Bu çalışıyor! Herhangi bir komutu yerine getirmeden önce yapılması gerekenler. Telefonda geliştirici seçenekleri etkinleştirildikten sonra, USB hata ayıklamayı da etkinleştirmemiz gerekir . Ayrıca telefonumda (HTC M8) Hata ayıklama uygulamasını seç ve uygulamamı seçtim. Tüm telefonlarda standart olabilirdi ... olmalı.
srinij

30

Köklü bir Samsung Galaxy S üzerinde çalışmaya çalışırken benzer bir sorun yaşadım. Bilgisayar kabuğundan bir komut verme

> adb root

"üretim derlemelerinde kök olarak çalıştırılamaz" iletisiyle başarısız olur. İşte kök haline izin veren basit bir yöntem.

Bir önceki yerine, aşağıdaki iki komutu birbiri ardına verin

> adb shell
$ su

İlk komuttan sonra, bilgi istemi yukarıda gösterildiği gibi '>' yerine '$' olarak değişmişse, adb kabuk ortamına girmiş olduğunuz anlamına gelir. Daha sonra ikinci komutu verdikten sonra bilgi istemi '#' olarak değiştirildiyse, artık root olduğunuz anlamına gelir. Artık root olarak cihazınızla istediğiniz her şeyi yapabilirsiniz.

'Güvenli' kabuğa geri dönmek için sorun

# exit

'$' Bilgi isteminin yeniden göründüğünü göreceksiniz; bu, kök olarak değil, kullanıcı olarak adb kabuğunda olduğunuz anlamına gelir.


13
su: izin verilmedi
petrnohejl

3
Harika teşekkürler! Btw bunu yapmak için köklü bir telefon olması gerekir. Ayrıca SuperSU veya benzeri bir şeye ihtiyacınız olabilir mi? En azından "su" kullanmaya çalıştığımda SuperSU bana telefonumda bir diyalog verdi.
Richard Fung

16
/ system / bin / sh: su: bulunamadı
matt lohkamp

1
Teşekkür ederim :) adb shell + susinir bozucu izin şey sonsuza kadar çözüldü. su: not foundAndroid 4.3'te bir sorun yaşadım ama 4.4.2'ye yükselttiğimden beri sorun kayboldu. 4.3 sorunları var gibi görünüyor.

3
su benim için mevcut değil, Nexus 5 / Android 5.1 - bir geçici çözüm var mı?
CodeManX

19

Ben de bu konuda çok sorun vardı. Hala izin ve kök çalışma tam olarak anlamıyorum, ama bu benim için (önceki cevaplardan biri kısmen) / data / data / [paket adı] /databases/my_db.db veritabanı dosyasını kopyalamak için çalıştı. Kabuk kökü çalıştırmak veya herhangi bir nedenle kabuk içinde su işe yaramadı, ne de db dosyasını kopyalama (ama yine de dizine gidebilir), ne de sqlite3 yaptı .

Bu işe yaradı! DOS komut isteminde:

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>

Şimdi SDCARD dizinine gidin ve db_copy.db dosyanızı alın. Bu bile gizlenmişti, ama e-postayla göndermeyi başardım. Windows'da, SQLite Database Browser ile db dosyasını açabildim. :)


Ben denedim -> olarak çalış <app_package_name> Ama adb benim app_package_name tanınmadı. AndroidManifest.xml dosyamda belirlediğim paket_adını kullandım. Kaçırdığım bir şey var mı?
ARK

3

Kök erişimi için iki adım aşağıda verilmiştir:

  1. Android cihazlarınız rootlanmalıdır.
  2. ADB kabuğunda, su yazın ve android cihaz y / n isteyecektir? Siz izin verin.

tipi su .. mobil cihazda istemi verecek ..
Superuser

2

üretim yapıları / data / app giremez

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

çalıştırmak için doğru sahibin değiştirilmesi gerekebilir.


2

Sorun, özellikle en son CM'lerde gelişmekte olan seçeneklerde adb root erişimi vermemiz gerekebilir. İşte yaptığım şey.

abc @ abc-L655: ~ $ sudo adb kill-server
abc @ abc-L655: ~ $ sudo adb root başlangıç ​​sunucusu * daemon çalışmıyor. şimdi bağlantı noktası 5037'de başlatılıyor * * arka plan programı başarıyla başlatıldı * sistem erişimi - root erişimi devre dışı bırakılıyor - ayarlarda etkinleştir -> geliştirme seçenekleri

geliştirme seçeneklerini değiştirdikten sonra ...

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

uygulama paketini biliyorsanız cddoğrudan o klasöre ulaşabilirsiniz ..

Örneğin cd data/data/com.yourapp

bu, read/writabledosyaları gerektiği gibi değiştirebileceğiniz bir dizine bırakır. Klasörde aynı olduğundan emulator, klasör yolunu almak için bunu kullanabilirsiniz.


2
Doğrudan klasöre cd olabilir, ancak yine de "opendir başarısız, izin reddedildi" hatası alıyorum.
Tyler Collier

Bunun nedeni, adb'nin "shell" kullanıcısının dizinlerde yürütme iznine sahip olması, ancak okuma izninin olmamasıdır.
Chris Stratton

0

Eğer sadece DB ve Tabloları görmek istiyorsanız o zaman en kolay yolu kullanmaktır Stetho. SQLiteBuit kullanan her Android geliştiricisi için oldukça güzel bir araç Facobook developed.

Steps to use the tool

  1. Uygulamanızın gradle dosyasına aşağıdaki bağımlılığı ekleyin (Modül: uygulama)

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

  1. Activity onCreate () yönteminize aşağıdaki kod satırlarını ekleyin
@Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 Stetho.initializeWithDefaults(this);
 setContentView(R.layout.activity_main);
 }

Şimdi uygulamanızı oluşturun & Uygulama çalışırken URL'de chrome açarak uygulama veritabanınıza göz atabilirsiniz:

chrome://inspect/#devices

Aynı ekran görüntüleri aşağıdaki gibidir_

ChromeInspact

ChromeInspact

DB'niz

DB'niz

Umarım bu herkese yardımcı olur! :)


0

Bu, Android cihazınız herhangi bir yöntemle rootlanmışsa çalışır (rootsuz için çalışıp çalışmadığından emin değilsiniz).

  1. adb shell - kabuğa erişme
  2. su - süper kullanıcı ol.

Artık tüm dizinlerdeki tüm dosyaları okuyabilirsiniz.


-3

Cihazı köklendirmeden aşağıdaki dosyalara dosyalara erişebilirsiniz. cmd ekran görüntüsü:

  1. kullanıcısına göre platform-tools klasöründen cmd kullanarak adb'yi başlatın

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

    başka bir klasörde olabilir nereye yüklediğiniz bağlıdır.

  2. çalışan cihazları görüntüler.

    adb devices

    diyelim ki cevap os komut

    List of devices attached
    0123456789ABCDEF     device
  3. komutu yaz

        adb -s 0123456789ABCDEF shell "su"

    açılacak

        root@theDeviceName:/ #

4. dosyalara erişmek, tüm dosyaları listeleyin

ls

ve veri klasörü gibi herhangi bir yere bu şekilde değiştirilen dizin

cd data/data

1
C: \ Kullanıcılar \ bruker \ AppData \ Local \ Android \ sdk \ platform-tools> adb -s emulator-5554 kabuk "su" / system / bin / sh: su: bulunamadı
Solo

benim durumumda bu android 5.0.2 idi ben başka bir @Koen sürümünden farklı olup olmadığını bilmiyorum
Mahmoud Ashraf

yol, android stüdyosunu nereye yüklediğinize bağlıdır ve SDK'ları @Solo
Mahmoud Ashraf

1
Sorun adb'nin yerini bulamıyor. Benim PATH'ımda. Dosya listesinin (hatta yürütülmesinin su) alınmasına izin verilmiyor / izin verilmiyor. Android 4.3 ile test etme.
Koen

su bulunamadı
Brill Pappin

-5

Cihazın kabuk dizininde olduğunuzda. Sadece koş

su - root

Ardından verilere / klasöre erişebilmelisiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.