Android cihazdaki veri / veri klasörüne nasıl erişilir?


316

Bir uygulama geliştiriyorum ve veritabanımın *.dbgörüneceğini biliyorumdata/data/com.****.***

Bu dosyaya sqlite manager yardımıyla Eclipse'deki AVD'den erişebilirim

Ancak bu dosyaya Android telefonumdan erişemiyorum.
Ben google ve bunu yapmak için telefonumu kök gerekir diyor, ama yapmak istemiyorum. (Yeni telefon, garanti sorunları ve güvenlik sorunları)

İşte sorum: data/data/.....Android telefonumdaki " köklenmeden " dizinime nasıl erişebilirim ?

Dizinin kullanıcı izinlerini data/data.....köklendirme yapmadan değiştirebilir miyim ?


1
database.db dosyanız var mı?
Amit Prajapati

si kullanıyorum veritabanı - "openOrCreateDatabase (....)"
Naveen Prens P

5
Öncelikle telefonu rootlamanız gerekir. O zaman kullanabileceğiniz yetkili bir dosya yöneticisi uygulamasına ihtiyacınız olacak. ASTRO dosya yöneticisi popülerdir ancak kök erişim desteği yoktur, bu nedenle güçlü kullanıcılar için işe yaramaz. ES Dosya Gezgini'ni veya Dosya Uzmanını kullanabilmeniz gerekir. Son zamanlarda ES Dosya Gezgini ile / veri / veri veya diğer korumalı klasörleri görüntüleme sorunları yaşadım ve hemen hemen terk ettim ve şimdi Dosya Uzmanını kullanıyorum. Her ikisi de ayarlara gitmenizi ve kök explorer seçeneğini etkinleştirmenizi gerektirir (ve bazen dosya sistemini yazılabilir olarak da bağlar). Yani önce bunu yapmalısın.
Samir

Bu, programlama ile ilgili soru veya cevaplar değildir.
SkyWalker

Yanıtlar:


375

Dosyalara doğrudan telefonunuzda erişmek zordur, ancak bunları bilgisayarınıza istediğiniz herhangi bir şeyi yapabileceğiniz bir yere kopyalayabilirsiniz. Köklenme olmadan 2 seçeneğiniz vardır:

  1. Uygulama hata ayıklanabilirse run-as, adb shell içindeki komutu kullanabilirsiniz

    adb shell
    run-as com.your.packagename 
    cp /data/data/com.your.packagename/
    
  2. Alternatif olarak Android'in yedekleme işlevini kullanabilirsiniz.

    adb backup -noapk com.your.packagename

    Şimdi 'cihazınızın kilidini açmanız ve yedekleme işlemini onaylamanız' istenecektir. Parola vermemek en iyisidir, aksi takdirde verileri okumak daha zor olur. 'Verilerimi yedekle'yi tıklamanız yeterlidir. Bilgisayarınızda ortaya çıkan 'backup.ab' dosyası, android yedekleme biçimindeki tüm uygulama verilerini içerir. Temelde sıkıştırılmış bir tar dosyasıdır. Bu sayfa , OpenSSL'nin zlib komutunu açmak için nasıl kullanabileceğinizi açıklar. adb restore backup.dbYedeklemeyi geri yüklemek için komutu kullanabilirsiniz .


15
adb backup -f \location\on\local\drive -noapk app.package.nameKök olmadan benim için çalıştı
theblang

24
Yedekleme dosyanızı açmak için bu komutu kullanın:dd if=backup.ab bs=24 skip=1|openssl zlib -d > backup.tar
Hooman

11
Seçenek 1'de, cp komutunu dizüstü bilgisayarıma (Mac) kaydetmelerini nasıl söyleyebilirim? Bir Win örneği verirseniz, ben de bilmek istiyorum ve sadece çevireceğim. Teşekkürler.
Gerard

10
Önemli: Çalıştırma adb backup -noapk com.your.packagenameab dosyasını geçerli dizine kaydeder , bu nedenle doğru dizinde (örneğin cd Desktop..) gezindiğinizden emin olun
Menelaos Kotsollaris

6
Uygulamanız android:allowBackup="false"manifest üzerinden yedeklemeleri devre dışı bıraktıysa yedekleme yaklaşımının boş bir yedekleme sağlayacağını unutmayın .
Tom

130

Android Studio 3.0 veya sonraki bir sürümünü kullanıyorsanız bu adımları izleyin.

  1. Click Görünüm > Araç Windows'u > Cihaz Dosya Gezgini .
  2. / Data / data / [paket adı] düğümlerini genişletin .

Yalnızca köklü olmayan cihazda hata ayıklama modunda çalışan paketleri genişletebilirsiniz.

Android Studio 3.0'da izlenen adımlar


1
bu rıhtımda herhangi bir şey göremiyorum. ve bana hiçbir şey göstermediğini söyle. sorunun ne olduğunu biliyor musun?
Mehdi Azadbar

1
Bu, yalnızca hata ayıklama modunda çalışır, sürüm derlemeleri için değil
Ağustos'ta

Dosya sistemine bakmanın pita yolunu gösterdiğiniz için teşekkür ederiz!
Lensflare

Sürümde seçeneğim yok gibi görünüyor 3.0.1, taşındı mı?
18'de Kodlama

1
bu harika. Bunu bir süre önce bilseydim.
checkmate711

59

Ayrıca kök explorer uygulamasını kullanarak db getirmeyi deneyebilirsiniz. Ve bu işe yaramazsa, bunu deneyebilirsiniz:

  1. Açık cmd
  2. Dizininizi değiştirin ve 'Platform araçları'na gidin
  3. Tür ' adb shell'
  4. su
  5. Cihazda 'İzin Ver'e basın
  6. chmod 777 /data /data/data /data/data/com.application.package /data/data/com.application.package/*
  7. Eclipse'de DDMS görünümünü açın ve oradan istediğiniz dosyayı almak için 'FileExplorer'ı açın

Bundan sonra köklü cihazdaki dosyalara gözatabilmelisiniz.


2
Ben kök keşfetmek uygulaması sadece köklü telefonlar için çalışıyor düşünüyorum. 2. yöntemi deneyeceğim
Naveen Prince P

5
Chmod / veri yapılamıyor: Operasyona izin verilmiyor
bofredo

@bofredo Bence onun telefon köklü değil çünkü. telefonunuzu kök ve sonra denemek gerekir
Sheraz Ahmad Khilji

1
@mahemadhi evet, tüm dizinlerin kendilerine özel izinleri olduğundan, bu komutu her dizin için manuel olarak çalıştırmanız gerekir.
Sheraz Ahmad Khilji

1
@VivekChavda yup köklü telefon istiyorlar
Sheraz Ahmad

21

Yukarıdakilerden herhangi birini yapmak için (yani telefonunuzun içinden korumalı klasörlere erişmek), yine de root'a ihtiyacınız vardır. (Bu, / data klasöründeki bağlama izinlerini değiştirmeyi ve bu klasöre erişmeyi içerir)

Kök olmadan, kodunuz aracılığıyla uygulamanızın içinden/data doğrudan okumak için doğrudan erişmek mümkün değildir. Böylece bu dosyayı sdcard'a veya erişilebilir bir yere kopyalamayı deneyebilir ve ardından normal şekilde erişebilmeniz gerekir.

Bir geliştirici cihazınız varsa köklendirme garantinizi geçersiz kılmaz. Üzgünüm, AFAIK'in başka yolu yok.


ben bir geliştirici cihazı kullanmıyorum. Benimki Xperia U
Naveen Prince P

chmode komutlarıyla veri klasörünün kullanıcı iznini düzenleyebilir miyim?
Naveen Prince P

Tüm bölüm salt okunur olarak monte edilmiştir. En iyi bahsinizin adb pullaşağıdaki cevapta belirtildiği gibi olacağını söyleyebilirim .
Anirudh Ramanathan

Uygulama izin verirse mümkündür. Dizinlerin hepsinin herkes için x izni var (ancak herkes için r yok, bu yüzden yolu bilmelisiniz). Bu, uygulamanın dosya dünyasını erişilebilir hale getirip getirmediğine bağlıdır. Bazı dosyalar, çoğu değildir.
Jan Hudec

Önce okumanın imkansız olduğunu söylüyorsunuz, daha sonra dosyayı başka bir yere kopyalamanızı öneririz. Ancak, bir dosyayı ilk etapta okumadan nasıl kopyalayabilirim? Bence bu cevap arabası.
e kadar

13

/data/data/package.name/databases/fileKöklendirilmemiş bir Android 5.0+ cihazında hata ayıklanabilir uygulama klasörünüzden (diyelim ) bir dosyayı almanın en kolay yolu (sadece basit bir adım) bu komutu kullanmaktır:

adb exec-out run-as package.name cat databases/file > file

12
  1. Komut isteminizi açın
  2. Dizini E: \ Android \ adt-bundle-windows-x86_64-20140702 \ adt-bundle-windows-x86_64-20140702 \ sdk \ platform-tools olarak değiştirin
  3. Aşağıdaki komutları girin
  4. adb -d shell
  5. run-as com.your.packagename cat databases/database.db > /sdcard/database.db
  6. Orada cd /sdcardolduğundan emin olmak database.dbiçin dizini olarak değiştirin .
  7. adb pull /sdcard/database.db ya da database.db dosyasını cihazdan kopyalayabilirsiniz.

Benim için mükemmel çalışıyor. Teşekkürler! Ama benim durumumda, veritabanı dosya adında .db uzantısı yok.
technik

10

Tutulmada Dosya Gezgini'ni kullanın. Windows => Görünümü Göster => Diğer ... => Dosya Gezgini'ni seçin.

Başka bir yol, dosyayı adb yoluyla çekmektir:

adb pull /system/data/data/<yourpackagename>/databases/<databasename> /sdcard

5

Aynı problemi bir kez de yaşadım. Adb kabuğu veya köklendirme cihazı dışında, android cihazlardaki dosyaya doğrudan erişmenin bir yolu yoktur.

Burada 02 alternatif var:

1)

 public void exportDatabse(String databaseName)
   {
     try {
        File sd = Environment.getExternalStorageDirectory();
        File data = Environment.getDataDirectory();

        if (sd.canWrite()) {
            String currentDBPath = "//data//"+getPackageName()+"//databases//"+databaseName+"";
            String backupDBPath = "backupname.db";
            File currentDB = new File(data, currentDBPath);
            File backupDB = new File(sd, backupDBPath);

            if (currentDB.exists()) {
                FileChannel src = new FileInputStream(currentDB).getChannel();
                FileChannel dst = new FileOutputStream(backupDB).getChannel();
                dst.transferFrom(src, 0, src.size());
                src.close();
                dst.close();
            }
        }
    } catch (Exception e) {

    }
}

2) Bunu deneyin: https://github.com/sanathp/DatabaseManager_For_Android


5

Android'den Masaüstüne Yedekleme

Komut satırını cmd açın ve şunu çalıştırın: adb backup -f C: \ Intel \ xxx.ab -noapk your.app.package . Parola girmeyin ve Verilerimi yedekle'ye tıklayın. C sürücüsü köküne kaydetmediğinizden emin olun. Reddedilebilirsiniz. Bu yüzden C: \ Intel'e kaydettim.

* .Ab dosyasını ayıklamak için

  1. Buraya gidin ve indirin: https://sourceforge.net/projects/adbextractor/
  2. İndirilen dosyayı ayıklayın ve ayıkladığınız klasöre gidin.
  3. bunu kendi dosya adlarınızla çalıştırın: java -jar abe.jar paketini aç c: \ Intel \ xxx.ab c: \ Intel \ xxx.tar

1
Bu harika bir cevap, teşekkürler. Bir Xiaomi cihazında (.bak uzantısıyla) oluşturulan tek uygulama yedeklemesini çıkarmak için benim için çalıştı. Köklenme gerekmez
Rus

4

Bir Açık köklü cihaza doğru çözüm şudur:

Open cmd
Change your directory and go into 'Platform tools'
Type 'adb shell'
su
Press 'Allow' on device
chmod 777 /data /data/data /data/data/*
Open DDMS view in Eclipse/IntelliJ and from there open 'FileExplorer' to get your desired file

Orijinal çözüm işe yaradı, ancak chmod bilinmeyen dizini döndürecekti. Chmod komutunun / data / data / * olarak değiştirilmesi, veri dizinindeki tüm alt klasörlere Intellij'deki DDMS'den erişim sağladı. Aynı çözüm Eclipse DDMS için de geçerli.

GÜNCELLEME Yani, bulduğum garip. IntelliJ'de (Android Cihaz Monitörü) DDMS kullanarak bir Nexus 6 çalıştırıyorum. Küçük bir başlangıç ​​uygulaması oluşturdum. Bahsedilen uygulama verileri data / data / com.example.myapp / dosyalarındaki bir .csv dosyasına kaydeder

Nexus 6 cihazımda bu dosyaya ilk kez erişmeye çalıştığımda, cihazı rootlamam gerektiğini buldum .. Veri klasörünü görebiliyordum, ancak açmaya çalışmak işe yaramayacaktı. Diğer yerlerde çevrimiçi belirtildiği gibi, genişletme + kaybolur ve kısa bir süre sonra tekrar ortaya çıkar (not, web'de köklenmeden bu klasörlere erişime izin verdiğini iddia eden çözümler vardır, çok geç olana kadar bulamadım ve ben Yine de root yapmamayı tercih edip etmediğimden emin değilim ((bana çözümlerimi vermek için bir uygulamaya veya komut istemine güvenmektense manuel olarak yapmayı tercih ederim))). Ben 6 kök ve DDMS tekrar denedim.

Bu noktada, bana veri klasörünü gösterdi ve klasörü genişletip com'u görebiliyordum. ama hiçbirini açamadım. İşte o zaman yukarıdaki çözümü keşfettim. İlk talimatlar bu kısımda işe yaramaz:

chmod 777 /data /data/data /data/data/com.application.pacakage /data/data/com.application.pacakage/*

O zaman gönderdiğim çözümü denediğimde:

chmod 777 /data /data/data /data/data/*

Bu çözüm işe yaradı, ancak sadece belirli klasörlerde. Şimdi myapp klasörümü genişletebilirim, ancak içindeki dosyalar dizinini genişletemedim.

Bu noktada, bir süre oynadım ve neden sadece bu joker karakter girişlerini denemek yerine ihtiyacım olan dizinde denemedim.

chmod 777 /data /data/data /data/data/com.example.myapp/*

Bunu takiben:

chmod 777 /data /data/data /data/data/com.example.myapp/files

Bu komutlar, .csv dosyasının doğru kaydedildiğini onaylamak için uygulamamın dizinindeki dosyaları genişletip görüntülememi sağladı.

Umarım bu birine yardımcı olur. Saatlerce bununla mücadele ettim!

(bu konuda biraz daha tuhaf bir şekilde, garip bir şekilde izinler, dosyalar dizinine geçen .csv dosyasına geçmedi. dosyaları dizin izinlerim drwxrwxrwx ve log.csv dosya izinlerimi oku -rw-rw --- - .. sadece fyi)


2

Bunun gibi bir sigle dosyasını indirebilirsiniz:

adb exec-out run-as debuggable.app.package.name cat files/file.mp4 > file.mp4

İndirmeden önce Uygulama Dizininizdeki dosya yapısına bir göz atmak istemeyebilirsiniz. Bunun için THelperyukarıda belirtilen aşağıdaki adımları uygulayın:

adb shell
run-as com.your.packagename 
cd files
ls -als .

Android Studio yolu Shahidul(söz https://stackoverflow.com/a/44089388/1256697 ) da işi. DeviceFile ExplorerMenüde Seçeneği görmeyenler için : Android Studio'da / android-Directory'yi açtığınızdan emin olun. Örneğin tepki yerli kullanıcıların bu var içini onların arasında Proje-Klasör / ios-Directory ile aynı Düzeyde sağa.


1

Basit yollardan biri SD-Card üzerinde veritabanınızı oluşturmaktır. Çünkü telefonunuzu rootlamadığınız sürece dahili bellekteki telefonunuzun veri klasörüne erişemezsiniz. Öyleyse neden sadece SD Kart üzerinde veritabanınızı oluşturmuyorsunuz?

Dahası, isterseniz, mevcut veritabanı dosyanızı (dahili bellekten) herhangi bir kök gerektirmeden harici belleğe kopyalamak için bazı dosya kopyalama kodları yazabilirsiniz.


nasıl yapılır? sdcard bir db nasıl oluşturabilirim
Naveen Prince P

Bu yöntem sd kartta veritabanı oluşturmanıza yardımcı olacaktır. Sadece FileSD-Kart'a işaret eden bir yol sağlayın ve gitmekte
fayda var

1

Bu klasöre erişmek için yönetici haklarına ihtiyacınız olabilir.

böylece iki seçeneğiniz var: -

  1. cihazınızı rootlayın ve daha sonra bu klasöre erişmeyi deneyin
  2. emülatör kullan

ps: yukarıdaki iki seçenekten birini kullanıyorsanız şu adımları izleyerek bu klasöre erişebilirsiniz

DDMS perspektifini aç -> cihazınız -> (sağ pencere seçeneklerinden Dosya Gezgini'ni seçin) paketi seçin -> veri -> veri -> paket adı -> dosyalar

ve oradan dosyanızı çekebilirsiniz


1

adb backupbenim için çalışmadı, bu yüzden yaptım (Xiaomi Redmi Note 4X, Android 6.0):
1. Ayarlar> Ek Ayarlar> Yedekle ve sıfırla> Yerel yedeklemeler bölümüne gidin .
2. Ekranın altındaki 'Yedekle'ye dokunun.
3. 'Sistem' ve 'Uygulamalar' onay işaretlerinin işaretini kaldırın.
4. Uygulama seçim ekranına gitmek için 'Uygulamalar' hücresinin sağındaki ayrıntı açıklama düğmesine dokunun.
5. İstediğiniz uygulamayı seçin ve Tamam öğesine dokunun.
6. Yedekleme tamamlandıktan sonra, gerçek dosyanın bir şekilde bulunması gerekir. Benimki / MIUI / backup / AllBackup / _FOLDER_NAMED_AFTER_BACKUP_CREATION_DATE_ adresinde bulunabilir .
7. Sonra gelen adımları takip bu cevap ile RonTLVyedekleme dosyasını (benim durumumda .bak) tar'a dönüştürmek için (orijinal yanıttan kopyalayarak):
"
a) Buraya gidin ve indirin: https://sourceforge.net/projects/adbextractor/
b) İndirilen dosyayı ayıklayın ve ayıkladığınız klasöre gidin.
c) bunu kendi dosya adlarınızla çalıştırın: java -jar abe.jar unpack c: \ Intel \ xxx.ab c: \ Intel \ xxx.tar
"


0

bu db dosyasını eclipse explorer'da (örn: sdcard veya PC) bir yere kopyalayabilir ve bu db dosyasına erişmek ve güncellemek için sqlite kullanabilirsiniz.



0

Ayrıca, dosyayı ortak bir klasör olan SD Kart klasörüne kopyalamayı deneyebilir, daha sonra dosyayı erişmek için sqlite'ı kullanabileceğiniz PC'nize kopyalayabilirsiniz.

Dosyayı verilerden / verilerden bir genel depolama klasörüne kopyalamak için kullanabileceğiniz bazı kodlar şunlardır:

private void copyFile(final Context context) {
    try {
        File sd = Environment.getExternalStorageDirectory();
        File data = Environment.getDataDirectory();

        if (sd.canWrite()) {
            String currentDBPath =
                    context.getDatabasePath(DATABASE_NAME).getAbsolutePath();

            String backupDBPath = "data.db";

            File currentDB = new File(currentDBPath);
            File backupDB = new File(sd, backupDBPath);

            if (currentDB.exists()) {
                FileChannel src = new FileInputStream(currentDB).getChannel();
                FileChannel dst = new FileOutputStream(backupDB).getChannel();
                dst.transferFrom(src, 0, src.size());
                src.close();
                dst.close();
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

Belirgin:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" />

Dosya paylaşılmazsa, kopya dosyası için tüm eylemlere erişilemez
Steve Luck

0

SQLlite veritabanı kullanıcının Telefonunda saklanır ve yol altında saklanır:

/Data/Data/com.companyname.AppName/File/

burada 2 seçeneğiniz var:

  1. hidding db3 dosyanızı görüntülemek için erişim elde etmek için telefonunuzu rootlayabilirsiniz
  2. bu bir çözüm değil, bir çözümdür. Neden sadece 'select' ifadesini kullanarak veritabanı tablonuzu görüntüleyen test sayfası oluşturmuyorsunuz?
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.