โปรแกรมจำลอง Android เก็บฐานข้อมูล SQLite ไว้ที่ไหน


109

ฉันกำลังทำงานกับแอปพลิเคชัน Android ที่เก็บข้อมูลในฐานข้อมูล SQLite คำถามของฉันคือไฟล์ฐานข้อมูลนี้จะถูกเก็บไว้ที่ใดในระบบไฟล์เมื่อคุณใช้โปรแกรมจำลอง

ฉันเห็นว่ามันถูกเก็บไว้ใน

/data/data/package_name/databases

แต่ฉันจำเป็นต้องรู้ว่าฮาร์ดไดรฟ์ของเครื่องในเครื่องของฉันอยู่ที่ไหน ฐานข้อมูลยังคงอยู่ในการรันโปรแกรมจำลองหลายครั้งแม้ว่าจะปิดเครื่องไปแล้วก็ตามดังนั้นจึงไม่สามารถอยู่ใน RAM ได้ ...

คำตอบ:


55

ระบบไฟล์ของโปรแกรมจำลองไม่ได้แมปกับไดเร็กทอรีบนฮาร์ดไดรฟ์ของคุณ ภาพดิสก์ของอีมูเลเตอร์จะถูกจัดเก็บเป็นไฟล์รูปภาพซึ่งคุณสามารถจัดการผ่าน Eclipse (มองหาไอคอนรูปลักษณ์ G1 ในแถบเครื่องมือ) หรือผ่านไบนารีของโปรแกรมจำลอง (เรียกใช้ "emulator -help" เพื่อดูคำอธิบายของตัวเลือก) .

คุณดีที่สุดในการใช้ adb จากบรรทัดคำสั่งไปยังแจ็คเข้าสู่โปรแกรมจำลองที่กำลังทำงานอยู่ หากคุณสามารถรับไดเร็กทอรีและชื่อไฟล์ที่ต้องการได้คุณสามารถ "adb pull" เพื่อดึงไฟล์ฐานข้อมูลออกจากโปรแกรมจำลองและลงในฮาร์ดไดรฟ์ปกติของคุณ

แก้ไข : คำแนะนำที่ลบออกซึ่งใช้ได้กับอุปกรณ์ที่ไม่ได้รูทด้วย - ใช้ได้เฉพาะกับอีมูเลเตอร์และอุปกรณ์ที่คุณใช้งาน adb เป็นรูท


6
ฉันปิด DB ผ่าน ddms จาก Eclipse ทำการเปลี่ยนแปลงของฉันแล้วส่งกลับ ทำงานอย่างมีเสน่ห์
I82

มากสำหรับฉันเช่นกันเปลี่ยนมุมมองคราสเป็น ddms จากนั้นคุณจะได้รับไฟล์ข้อมูลจากที่นั่นขอบคุณ
vanzylv

การอัปเดต 2013: บนอุปกรณ์ Jelly Bean คุณไม่สามารถadb pull(แม้ว่าจะมีเส้นทางที่แน่นอน !) หากคุณไม่ได้รู
Bill The Ape

นั่นไม่ใช่การอัปเดตโดยพื้นฐานแล้วไฟล์ส่วนตัวจากแอปเริ่มต้นจะเป็นไฟล์ส่วนตัวจาก adb บนอุปกรณ์ที่ปลอดภัย แต่คำถามนี้เกี่ยวกับอีมูเลเตอร์โดยที่ adb ทำงานเป็นรูท
Chris Stratton

6
ตัวอย่างในการดึงฐานข้อมูลจาก Emulator ไปยังเครื่องของคุณคือadb pull /data/data/com.activeandroid.test/databases/Application.db ~/Development/Application.db
Joshua Pinter

123

การอัปเดตที่กล่าวถึงในความคิดเห็นด้านล่าง:

คุณไม่จำเป็นต้องอยู่ในมุมมอง DDMS อีกต่อไปเพียงแค่เปิด File Explorer จากหน้าต่าง Eclipse > แสดงมุมมอง> อื่น ๆ ...ดูเหมือนว่าแอปไม่จำเป็นต้องทำงานด้วยซ้ำฉันสามารถเรียกดูไฟล์แอพต่างๆได้ เนื้อหา ฉันใช้ ADB เวอร์ชัน 1.0.29


หรือคุณสามารถลองใช้แนวทางเดิม:

เปิดมุมมอง DDMS บน Eclipse IDE ของคุณ

( หน้าต่าง> เปิดมุมมอง> อื่น ๆ > DDMS )

และที่สำคัญที่สุด:

แอปพลิเคชันของคุณจะต้องทำงานเพื่อให้คุณสามารถเห็นความหลากหลายของโฟลเดอร์และไฟล์ได้

จากนั้นในแท็บ File Explorerคุณจะไปตามเส้นทาง:

ข้อมูล> ข้อมูล> คุณแพคเกจชื่อ> ฐานข้อมูล> ฐานข้อมูลของไฟล์

จากนั้นเลือกไฟล์คลิกที่ไอคอน disketที่มุมขวาของหน้าจอเพื่อดาวน์โหลดไฟล์. db หากคุณต้องการอัปโหลดไฟล์ฐานข้อมูลไปยังโปรแกรมจำลองคุณสามารถคลิกที่ไอคอนโทรศัพท์ (ข้างไอคอนดิสเก็ต)และเลือกไฟล์ที่จะอัปโหลด

หากคุณต้องการที่จะเห็นเนื้อหาของ.dbไฟล์ผมแนะนำให้คุณใช้เบราว์เซอร์ฐานข้อมูล SQLite ซึ่งคุณสามารถดาวน์โหลดได้ที่นี่

PS: หากคุณต้องการดูฐานข้อมูลจากอุปกรณ์จริงคุณต้องรูทโทรศัพท์ของคุณ


5
หากใครสงสัยคุณต้องคลิกที่แท็บ "File Explorer"
MSpeed

สวัสดี Cyberrog ฉันพบไฟล์ฐานข้อมูล แต่คุณช่วยบอกวิธีเปิดไฟล์นี้ได้ไหม หรือจะดูเนื้อหาได้อย่างไร?
Nilesh Nikumbh

4
@NileshNikumbh เลือกไฟล์และคลิกที่ไอคอนดิสเก็ตและเลือกตำแหน่งที่คุณต้องการจัดเก็บ คุณต้องดาวน์โหลด SQLite Browser sourceforge.net/projects/sqlitebrowserหลังจากที่คุณติดตั้งแล้วเพียงแค่เปิดไฟล์. db เลือกแท็บเรียกดูข้อมูลและคอลัมน์ที่คุณต้องการดู
rogcg

โพสต์ยอดเยี่ยม! ฉันมีปัญหาในการรับไฟล์ sqlite จากอุปกรณ์จำลอง:Failed to pull selection (null)
Jan-Terje Sørensen

@OckhamsRazor หากคุณต้องการดูฐานข้อมูลจากอุปกรณ์จริง (ไม่ใช่โปรแกรมจำลอง) คุณต้องรูทโทรศัพท์ของคุณ
rogcg

18

คำตอบอื่น ๆ นั้นล้าสมัยอย่างมาก ด้วยAndroid Studioนี่คือวิธีการ:

  1. คลิกที่Tools> Android> Android Device Monitor

ใส่คำอธิบายภาพที่นี่

  1. คลิกที่File Explorer

ใส่คำอธิบายภาพที่นี่

  1. ไปที่ไฟล์ db ของคุณแล้วคลิกที่ปุ่มบันทึก

ใส่คำอธิบายภาพที่นี่


1
"การตรวจสอบอุปกรณ์ Android เลิกใช้งานแล้วใน Android Studio 3.1 และนำออกจาก Android Studio 3.2 คุณลักษณะที่คุณสามารถใช้ผ่านการตรวจสอบอุปกรณ์ Android ได้ถูกแทนที่ด้วยคุณลักษณะใหม่ ... " developer.android.com/studio/profile/monitor
Pete Alvin

8

ใน Android Studio 3.4.1 คุณสามารถใช้คุณลักษณะการค้นหาของ Android Studio เพื่อค้นหา "Device File Explorer" จากนั้นไปที่ไดเร็กทอรี / data / data / package_name / database ของโปรแกรมจำลองของคุณ


6

ฉันเขียนสคริปต์ทุบตีอย่างง่ายซึ่งดึงฐานข้อมูลจากอุปกรณ์ Android ไปยังคอมพิวเตอร์ของคุณ (ผู้ใช้ Linux, Mac)

ชื่อไฟล์: android_db_move.sh การใช้งาน: 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

เนื่องจากคำถามไม่ได้ จำกัด เฉพาะ Android Studio ดังนั้นฉันจึงให้เส้นทางสำหรับ Visual Studio 2015 (ทำงานกับ Xamarin)

เครื่องมือตรวจสอบอุปกรณ์ Android-Android

ใส่คำอธิบายภาพที่นี่

  • ค้นหาไฟล์ฐานข้อมูลที่กล่าวถึงในภาพด้านบนและคลิกที่ปุ่มดึงตามที่แสดงในภาพที่ 2
  • บันทึกไฟล์ในตำแหน่งที่คุณต้องการ
  • คุณสามารถเปิดไฟล์นั้นโดยใช้ SQLite Studio หรือ DB Browser สำหรับ SQLite

ขอขอบคุณเป็นพิเศษสำหรับผู้ตอบคำถามอื่น ๆ ของคำถามนี้


4

ฐานข้อมูลจะถูกจัดเก็บเป็นไฟล์ SQLite ใน/ data / data / PACKAGE / databases / DATABASEFILEโดยที่:

  • PACKAGEคือแพ็คเกจที่ประกาศไว้ใน AndroidManifest.xml (แท็ก "manifest", attribute "package")
  • DATABASEFILEเป็นชื่อที่ส่งผ่านเมื่อคุณเรียกใช้ตัวสร้าง SQLiteOpenHelper ตามที่อธิบายไว้ที่นี่: http://developer.android.com/guide/topics/data/data-storage.html#db

คุณสามารถดู (คัดลอกจาก / ไปยังระบบไฟล์) ไฟล์ฐานข้อมูลในโปรแกรมจำลองการเลือกมุมมอง DDMSในแท็บ File Explorer


3

วิธีแก้ปัญหาง่ายๆ - ใช้ได้กับทั้งอุปกรณ์จำลองและอุปกรณ์ที่เชื่อมต่อ

1 ดูรายการอุปกรณ์ / อีมูเลเตอร์ที่มีอยู่ในปัจจุบัน

$ adb devices

รายการของอุปกรณ์ที่แนบมา

G7NZCJ015313309 อุปกรณ์ emulator-5554

9885b6454e46383744 อุปกรณ์

2 เรียกใช้การสำรองข้อมูลบนอุปกรณ์ / โปรแกรมจำลองของคุณ

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

3 แยก data.ab

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

คุณจะพบฐานข้อมูลใน/dbโฟลเดอร์


หากคุณใช้ OS X คุณอาจจะไม่มีส่วน zlib ของ openssl คุณสามารถใช้วิธีแก้ปัญหานี้: $ dd if=data.ab bs=1 skip=24 | python -c "import zlib,sys;sys.stdout.write(zlib.decompress(sys.stdin.read()))" | tar -xvf -
Lasse Magnussen

ไม่ได้ผลสำหรับฉัน ฉันได้รับbash: adb: command not found
Matthias

0

ตามเอกสารของ Android Monitor เลิกใช้งานแล้วใน Android Studio 3.1 และนำออกจาก Android Studio 3.2 ในการเข้าถึงไฟล์มีแท็บในสตูดิโอ Android ที่เรียกว่า "Device File Explorer" ด้านล่างขวาของหน้าต่างการพัฒนาซึ่งคุณสามารถเข้าถึงระบบไฟล์จำลองของคุณได้ เพียงทำตาม

/ data / data / package_name / databases

โชคดี.

เครื่องมือสำรวจไฟล์ของอุปกรณ์ Android


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.