Di mana emulator Android menyimpan database SQLite?

108

Saya sedang mengerjakan aplikasi Android yang menyimpan data dalam database SQLite. Pertanyaan saya adalah, di mana file database ini disimpan di sistem file saat Anda menggunakan emulator?

Saya telah melihat bahwa itu disimpan di

/data/data/package_name/databases

tapi saya perlu tahu di mana pada hard drive komputer lokal saya yang sebenarnya memetakan. Basis data tetap ada di beberapa emulator yang berjalan, bahkan setelah mesin dimatikan, sehingga tidak bisa hanya berada di RAM ...

I82Banyak
sumber

Jawaban:

55

Sistem file emulator tidak memetakan ke direktori di hard drive Anda. Gambar disk emulator disimpan sebagai file gambar, yang dapat Anda kelola melalui Eclipse (cari ikon yang tampak seperti G1 di toolbar), atau melalui biner emulator itu sendiri (jalankan "emulator -help" untuk mengetahui deskripsi opsi) .

Anda sebaiknya menggunakan adb dari baris perintah ke jack ke emulator yang sedang berjalan. Jika Anda bisa mendapatkan direktori dan nama file tertentu, Anda bisa melakukan "adb pull" untuk mengeluarkan file database dari emulator dan masuk ke hard drive biasa Anda.

Sunting : Saran yang dihapus bahwa ini juga berfungsi untuk perangkat yang tidak di-root - ini hanya berfungsi untuk emulator, dan perangkat tempat Anda mengoperasikan adb sebagai root.

Eric Mill
sumber
6
Saya mendapatkan DB melalui ddms dari Eclipse. Melakukan perubahan saya, lalu mendorong kembali. Bekerja seperti pesona.
I82Much
@ I82Much bekerja untuk saya juga, ubah perspektif gerhana ke ddms dan kemudian Anda bisa mendapatkan file datanya di sana. Terima kasih.
vanzylv
Pembaruan 2013: Pada perangkat Jelly Bean, Anda tidak dapat adb pull(bahkan dengan jalur yang tepat !), Jika Anda bukan root .
Bill The Ape
Itu bukan pembaruan, pada dasarnya sejak awal file pribadi aplikasi telah menjadi pribadi dari adb pada perangkat yang diamankan. Tetapi pertanyaan ini tentang emulator, di mana adb dijalankan sebagai root.
Chris Stratton
6
Contoh untuk menarik database dari Emulator ke mesin lokal Anda adalahadb pull /data/data/com.activeandroid.test/databases/Application.db ~/Development/Application.db
Joshua Pinter
123

Pembaruan disebutkan dalam komentar di bawah ini:

Anda tidak perlu menggunakan perspektif DDMS lagi, cukup buka File Explorer dari Eclipse Window> Show View> Other ... Sepertinya aplikasi tidak perlu berjalan bahkan, saya dapat melihat-lihat di file aplikasi yang berbeda isi. Saya menjalankan ADB versi 1.0.29


Atau, Anda dapat mencoba pendekatan lama:

Buka perspektif DDMS di Eclipse IDE Anda

( Jendela> Buka Perspektif> Lainnya> DDMS )

dan yang paling penting:

APLIKASI ANDA HARUS BERJALAN SEHINGGA ANDA DAPAT MELIHAT HIERARKI FOLDER DAN FILE .

Kemudian di Tab File Explorer Anda akan mengikuti jalur:

data> data> nama-paket-Anda> database> file-database-Anda .

Kemudian pilih file, klik ikon disket di sudut kanan layar untuk mendownload file .db . Jika Anda ingin mengupload file database ke emulator, Anda dapat mengklik ikon telepon (di samping ikon disket) dan memilih file yang akan diupload.

Jika Anda ingin melihat konten file .db , saya menyarankan Anda untuk menggunakan SQLite Database Browser, yang dapat Anda unduh di sini .

PS: Jika Anda ingin melihat database dari perangkat asli, Anda harus melakukan root pada ponsel Anda.

rogcg.dll
sumber
5
Jika ada yang bertanya-tanya, Anda harus mengklik tab 'File Explorer'.
MSpeed
Hai cyberrog, saya menemukan file database tetapi dapatkah Anda memberi tahu saya cara membuka file ini? atau bagaimana cara melihat isinya?
Nilesh Nikumbh
4
@NileshNikumbh Pilih file, dan klik ikon disket dan pilih di mana Anda ingin menyimpannya. Anda juga perlu mengunduh Browser SQLite. sourceforge.net/projects/sqlitebrowser Setelah Anda menginstalnya, cukup buka file .db, pilih tab Browse Data, dan kolom yang ingin Anda lihat.
rogcg
Pos yang bagus! Saya mengalami masalah saat mendapatkan file sqlite dari perangkat emulator:Failed to pull selection (null)
Jan-Terje Sørensen
@OckhamsRazor Jika Anda ingin melihat database dari perangkat nyata (bukan emulator), Anda harus melakukan root pada ponsel Anda.
rogcg
18

Jawaban lainnya sudah sangat ketinggalan zaman. Dengan Android Studio , berikut cara melakukannya:

  1. Klik Alat> Android> Monitor Perangkat Android

masukkan deskripsi gambar di sini

  1. Klik File Explorer

masukkan deskripsi gambar di sini

  1. Arahkan ke file db Anda dan klik tombol Simpan .

masukkan deskripsi gambar di sini

Yuchen Zhong
sumber
1
"Android Device Monitor tidak digunakan lagi di Android Studio 3.1 dan dihapus dari Android Studio 3.2. Fitur yang dapat Anda gunakan melalui Android Device Monitor telah diganti dengan fitur baru ..." developer.android.com/studio/profile/monitor
Pete Alvin
8

Di Android Studio 3.4.1, Anda bisa menggunakan fitur pencarian di Android Studio untuk menemukan "Device File Explorer", lalu masuk ke direktori / data / data / package_name / database emulator Anda.

S. Miller
sumber
6

Saya menulis skrip bash sederhana, yang menarik database dari perangkat android ke komputer Anda (Linux, pengguna Mac)

namafile: android_db_move.sh penggunaan: 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
Tadas Valaitis
sumber
6

Karena pertanyaannya tidak terbatas pada Android Studio, Jadi saya memberikan jalur untuk Visual Studio 2015 (bekerja untuk Xamarin).

Alat-Android-Monitor Perangkat Android

masukkan deskripsi gambar di sini

  • Cari file database yang disebutkan pada gambar di atas, dan klik tombol Tarik seperti yang ditunjukkan pada gambar 2.
  • Simpan file di lokasi yang Anda inginkan.
  • Anda dapat membuka file tersebut menggunakan SQLite Studio atau DB Browser untuk SQLite.

Terima kasih khusus kepada penjawab lain dari pertanyaan ini.

Foyzul Karim
sumber
4

Basis data disimpan sebagai file SQLite di / data / data / PACKAGE / databases / DATABASEFILE di mana:

Anda dapat melihat (menyalin dari / ke sistem file) file database di emulator dengan memilih perspektif DDMS , di tab File Explorer.

caligari
sumber
3

Solusi Sederhana - berfungsi untuk Emulator & Perangkat Terhubung

1 Lihat daftar perangkat / emulator yang saat ini tersedia.

$ adb devices

Daftar perangkat yang terpasang

G7NZCJ015313309 perangkat emulator-5554 perangkat

9885b6454e46383744 perangkat

2 Jalankan backup di perangkat / emulator Anda

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

3 Ekstrak data.ab

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

Anda akan menemukan database di /dbfolder

Mick
sumber
Jika Anda menggunakan OS X, Anda kemungkinan besar akan kehilangan bagian zlib dari openssl. Anda dapat menggunakan $ dd if=data.ab bs=1 skip=24 | python -c "import zlib,sys;sys.stdout.write(zlib.decompress(sys.stdin.read()))" | tar -xvf -
solusi ini
Tidak bekerja untuk saya. Saya mendapatkanbash: adb: command not found
Matthias
0

menurut dokumen Android , Monitor tidak lagi digunakan di Android Studio 3.1 dan dihapus dari Android Studio 3.2. Untuk mengakses file, ada tab di studio android yang disebut "Device File Explorer" di sisi kanan bawah jendela pengembangan tempat Anda dapat mengakses sistem file emulator Anda. Ikuti saja

/ data / data / package_name / databases

semoga berhasil.

Penjelajah file perangkat Android

vahid sabet
sumber