Android öykünücüsü SQLite veritabanını nerede depolar?


108

Verileri bir SQLite veritabanında depolayan bir Android uygulaması üzerinde çalışıyorum. Sorum şu, bir öykünücü kullanırken bu veritabanı dosyası dosya sisteminde nerede depolanır?

İçinde saklandığını gördüm

/data/data/package_name/databases

ancak yerel makinemin sabit diskinin neresine eşleştiğini bilmem gerekiyor. Veritabanı, makineyi kapattıktan sonra bile, öykünücünün birden çok çalışmasında devam eder, bu nedenle yalnızca RAM'de bulunamaz ...

Yanıtlar:


55

Öykünücünün dosya sistemi, sabit sürücünüzdeki bir dizinle eşleşmez. Öykünücünün disk görüntüsü, Eclipse (araç çubuğunda G1 görünümlü simgeyi arayın) veya öykünücünün kendisi aracılığıyla yönetebileceğiniz bir görüntü dosyası olarak saklanır (seçeneklerin açıklaması için "emulator -help" komutunu çalıştırın) .

Çalışan bir emülatöre girmek için komut satırından adb kullanmak en iyisidir. Belirli bir dizini ve dosya adını alabiliyorsanız, veritabanı dosyasını öykünücünün dışına ve normal sabit sürücünüze almak için bir "adb pull" yapabilirsiniz.

Düzenleme : Bunun köksüz cihazlar için de işe yaradığına dair öneri kaldırıldı - yalnızca emülatörler ve adb'yi root olarak çalıştırdığınız cihazlar için çalışıyor.


6
Eclipse'den ddms aracılığıyla DB'yi kapattım. Değişikliklerimi yaptıktan sonra geri püskürttüm. Bir cazibe gibi çalıştı.
I82Much

@ I82Much benim için de çalıştı, tutulma perspektifini ddms olarak değiştirin ve ardından oradaki veri dosyasını alabilirsiniz.
vanzylv

2013 Güncellemesi: Bir Jelly Bean cihazında, root değilseniz yapamazsınız adb pull( tam yolla bile !) .
Bill The Ape

Bu bir güncelleme değil, temelde başlangıçtan itibaren özel dosyalar güvenli cihazlarda adb'den gizliydi. Ancak bu soru, adb'nin root olarak çalıştığı emülatörle ilgili.
Chris Stratton

6
Veritabanını bir Emülatörden yerel makinenize çekmeye bir örnekadb pull /data/data/com.activeandroid.test/databases/Application.db ~/Development/Application.db
Joshua Pinter

123

Aşağıdaki yorumlarda bahsedilen bir güncelleme:

Artık DDMS perspektifinde olmanıza gerek yok, Eclipse Penceresinden Dosya Gezgini'ni açın > Görünümü Göster> Diğer ... Görünüşe göre uygulamanın çalışmasına gerek yok, farklı uygulamalar dosyalarına göz atabilirim içeriği. ADB 1.0.29 sürümünü çalıştırıyorum


Veya eski yaklaşımı deneyebilirsiniz:

Eclipse IDE'nizde DDMS perspektifini açın

( Pencere> Perspektifi Aç> Diğer> DDMS )

ve en önemlisi:

KLASÖRLERİN VE DOSYALARIN HİERARŞİSİNİ GÖRMEK İÇİN UYGULAMANIZ ÇALIŞIYOR OLMALIDIR .

Ardından Dosya Gezgini Sekmesinde şu yolu takip edeceksiniz:

veri> veri> paket-adınız> veritabanları> veritabanı-dosyanız .

Ardından dosyayı seçin , .db dosyasını indirmek için ekranın sağ köşesindeki disket simgesine tıklayın . Emülatöre bir veritabanı dosyası yüklemek istiyorsanız, telefon simgesine (disket simgesinin yanında) tıklayabilir ve yüklenecek dosyayı seçebilirsiniz.

Eğer içeriğini görmek istiyorsanız .db dosyası, sana indirebilirsiniz SQLite Database Browser, kullanımı tavsiye burada .

Not: Veritabanını gerçek bir cihazdan görmek istiyorsanız, telefonunuzu rootlamanız gerekir.


5
Merak eden biri varsa, 'Dosya Gezgini' sekmesine tıklamanız gerekir.
MSpeed

Merhaba cyberrog, veritabanı dosyasını buldum ama bu dosyayı nasıl açacağımı söyleyebilir misiniz? veya içeriğini nasıl görüntüleyebilirim?
Nilesh Nikumbh

4
@NileshNikumbh Dosyayı seçin ve disket simgesine tıklayın ve saklamak istediğiniz yeri seçin. Ayrıca SQLite Tarayıcısını indirmeniz gerekir. sourceforge.net/projects/sqlitebrowser Yükledikten sonra, sadece .db dosyasını açın, Verilere Gözat sekmesini ve görmek istediğiniz sütunu seçin.
rogcg

Harika gönderi! Öykünücü cihazdan sqlite dosyasını alma konusunda sorun yaşıyorum:Failed to pull selection (null)
Jan-Terje Sørensen

@OckhamsRazor Veritabanını gerçek bir cihazdan (emülatörden değil) görmek istiyorsanız, telefonunuzu rootlamanız gerekir.
rogcg

18

Diğer cevaplar son derece güncel değil. İle Android Studio , bunu yapmak için bir yoldur:

  1. Tıklayın Araçlar> Android> Android Cihaz İzleme

görüntü açıklamasını buraya girin

  1. Dosya Gezgini'ne tıklayın

görüntü açıklamasını buraya girin

  1. Db dosyanıza gidin ve Kaydet düğmesine tıklayın.

görüntü açıklamasını buraya girin


1
"Android Cihaz Monitörü, Android Studio 3.1'de kullanımdan kaldırıldı ve Android Studio 3.2'den kaldırıldı. Android Cihaz Monitörü aracılığıyla kullanabileceğiniz özelliklerin yerini yeni özellikler aldı ..." developer.android.com/studio/profile/monitor
Pete Alvin

8

Android Studio 3.4.1'de, "Aygıt Dosyası Gezgini" ni bulmak için Android Studio'nun arama özelliğini kullanabilir ve ardından öykünücünüzün / data / data / paket_adı / veritabanı dizinine gidebilirsiniz.


6

Veritabanını android cihazdan bilgisayarınıza çeken basit bir bash betiği yazdım (Linux, Mac kullanıcıları)

dosyaadı: android_db_move.sh kullanım: android_db_move.sh com.example.app db_name.db

#!/bin/bash

REQUIRED_ARGS=2
ADB_PATH=/Users/Tadas/Library/sdk/platform-tools/adb
PULL_DIR="~/"

if [ $# -ne $REQUIRED_ARGS ]
    then
        echo ""
        echo "Usage:"
        echo "android_db_move.sh [package_name] [db_name]"
        echo "eg. android_db_move.sh lt.appcamp.impuls impuls.db"
        echo ""
    exit 1
fi;


echo""

cmd1="$ADB_PATH -d shell 'run-as $1 cat /data/data/$1/databases/$2 > /sdcard/$2' "
cmd2="$ADB_PATH pull /sdcard/$2 $PULL_DIR"

echo $cmd1
eval $cmd1
if [ $? -eq 0 ]
    then
    echo ".........OK"
fi;

echo $cmd2
eval $cmd2

if [ $? -eq 0 ]
    then
    echo ".........OK"
fi;

exit 0

6

Soru Android Studio ile sınırlı olmadığından, Visual Studio 2015 için yol veriyorum (Xamarin için çalıştı).

Araçlar-Android-Android Cihaz Monitörü

görüntü açıklamasını buraya girin

  • Yukarıdaki görselde belirtilen veritabanı dosyasını bulun ve 2. resimde gösterildiği gibi Çek butonuna tıklayın.
  • Dosyayı istediğiniz yere kaydedin.
  • Bu dosyayı SQLite Studio veya SQLite için DB Tarayıcısını kullanarak açabilirsiniz.

Bu sorunun diğer cevaplayıcılarına özel teşekkürler.


4

Veritabanları / data / data / PACKAGE / databases / DATABASEFILE konumunda SQLite dosyaları olarak saklanır, burada:

Dosya Gezgini sekmesinde DDMS perspektifini seçerek emülatördeki veritabanı dosyasını görebilir (dosya sistemine / sistemden kopyalayabilirsiniz) .


3

Basit Çözüm - Hem Emülatör hem de Bağlı Cihazlar için çalışır

1 Şu anda mevcut olan cihazların / emülatörlerin listesine bakın.

$ adb devices

Ekli cihazların listesi

G7NZCJ015313309 cihaz emülatörü-5554 cihazı

9885b6454e46383744 cihazı

2 Cihazınızda / emülatörünüzde yedeklemeyi çalıştırın

$ adb -s emulator-5554 backup -f ~/Desktop/data.ab -noapk com.your_app_package.app;

3 Data.ab ayıklayın

$ dd if=data.ab bs=1 skip=24 | openssl zlib -d | tar -xvf -;

Veritabanını /dbklasörde bulacaksınız


OS X kullanıyorsanız, büyük olasılıkla openssl'nin zlib bölümünü kaçıracaksınız. Bu geçici $ dd if=data.ab bs=1 skip=24 | python -c "import zlib,sys;sys.stdout.write(zlib.decompress(sys.stdin.read()))" | tar -xvf -
çözümleri

Benim için çalışmıyor. Anlıyorumbash: adb: command not found
Matthias

0

Android dokümanlarına göre Monitor, Android Studio 3.1'de kullanımdan kaldırıldı ve Android Studio 3.2'den kaldırıldı. Dosyalara erişmek için, android stüdyosunda, emülatör dosya sisteminize erişebileceğiniz, geliştirme penceresinin sağ alt tarafında "Aygıt Dosya Gezgini" adlı bir sekme vardır. Sadece takip et

/ Veri / bilgileri / paket_ismi / veritabanları

iyi şanslar.

Android cihaz Dosya gezgini


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.