2009-10-02 48 views
100

Tôi đang làm việc trên một ứng dụng Android lưu trữ dữ liệu trong cơ sở dữ liệu SQLite. Câu hỏi của tôi là, tệp cơ sở dữ liệu này được lưu trữ trên hệ thống tệp khi bạn đang sử dụng trình giả lập ở đâu?Trình giả lập Android lưu trữ cơ sở dữ liệu SQLite ở đâu?

Tôi đã thấy rằng nó được lưu trữ trong

/data/data/package_name/databases

nhưng tôi cần phải biết nơi trên ổ cứng của máy tính cục bộ của tôi mà thực sự bản đồ để. Cơ sở dữ liệu vẫn tồn tại trên nhiều lần chạy trình mô phỏng, ngay cả sau khi tắt máy, vì vậy nó không thể chỉ nằm trong RAM ...

Trả lời

53

Hệ thống tập tin của trình mô phỏng không ánh xạ tới thư mục trên ổ cứng của bạn . Hình ảnh đĩa của trình giả lập được lưu trữ dưới dạng tệp hình ảnh, bạn có thể quản lý thông qua Eclipse (tìm biểu tượng G1 trong thanh công cụ), hoặc thông qua trình mô phỏng nhị phân (chạy "emulator -help" để mô tả các tùy chọn) .

Bạn nên sử dụng adb từ dòng lệnh để cắm vào trình mô phỏng đang chạy. Nếu bạn có thể nhận được thư mục và tên tệp cụ thể, bạn có thể thực hiện một "adb pull" để lấy tệp cơ sở dữ liệu ra khỏi trình mô phỏng và vào ổ cứng thông thường của bạn.

Sửa: gợi ý Removed rằng điều này làm cho các thiết bị unrooted quá - nó chỉ hoạt động cho giả lập, và các thiết bị mà bạn đang hoạt động adb root.

+6

tôi đã DB tắt qua DDMS từ Eclipse. Thực hiện các thay đổi của tôi, sau đó được đẩy trở lại. Làm việc như người ở. – I82Much

+0

@ I82Much đã làm việc cho tôi, thay đổi quan điểm nhật thực thành ddms và sau đó bạn có thể lấy tệp dữ liệu ở đó. Cảm ơn. – vanzylv

+0

2013 Cập nhật: Trên thiết bị Jelly Bean, bạn không thể 'adb pull' (ngay cả với đường dẫn * chính xác *!), Nếu bạn không phải là ** root **. –

120

Vui lòng tham khảo link hoặc làm theo câu trả lời dưới đây.


Bản cập nhật đề cập trong các ý kiến ​​dưới đây:

Bạn không cần phải được trên quan điểm DDMS nữa, chỉ cần mở File Explorer từ Eclipse Window> Show View> Khác ... Có vẻ như ứng dụng không cần chạy thậm chí, tôi có thể duyệt xung quanh trong các nội dung tệp ứng dụng khác nhau. Tôi chạy phiên bản ADB 1.0.29


Hoặc, bạn có thể thử phương pháp cũ:

mở quan điểm DDMS trên Eclipse IDE

(Window của bạn> Quan điểm mở> Khác> DDMS)

và quan trọng nhất:

ĐƠN ĐĂNG KÝ CỦA BẠN PHẢI ĐƯỢC CHẠY R SONG BẠN CÓ THỂ THẤY HIỂU NGÀNH NGHIÊN CỨU CỦA CÁC LỆNH VÀ PHIM.

Sau đó, trong File Explorer Tab bạn sẽ đi theo con đường:

dữ liệu> Xóa dữ liệu>-package-name của bạn> Cơ sở dữ liệu> bạn-cơ sở dữ liệu tập tin.

Sau đó chọn tệp, nhấp vào biểu tượng tắt disket ở góc bên phải của màn hình để tải xuống tệp .db. Nếu bạn muốn tải tệp cơ sở dữ liệu lên trình mô phỏng, bạn có thể nhấp vào biểu tượng điện thoại (bên cạnh biểu tượng tắt) và chọn tệp để tải lên.

Nếu bạn muốn xem nội dung của tệp .db, tôi khuyên bạn nên sử dụng Trình duyệt cơ sở dữ liệu SQLite, bạn có thể tải xuống here.

PS: Nếu bạn muốn xem cơ sở dữ liệu từ một thiết bị thực, bạn phải root điện thoại của bạn.

+5

Nếu có ai tự hỏi, bạn phải nhấp vào tab 'File Explorer'. –

+0

Hi cyberrog, tôi tìm thấy tệp cơ sở dữ liệu nhưng bạn có thể cho tôi biết cách mở tệp này không? hoặc làm thế nào để xem nội dung của nó? –

+4

@NileshNikumbh Chọn tệp và nhấp vào biểu tượng bẻ khóa và chọn nơi bạn muốn lưu trữ. Bạn cũng cần tải xuống trình duyệt SQLite. http://sourceforge.net/projects/sqlitebrowser/ Sau khi bạn cài đặt nó, chỉ cần mở tệp .db, chọn tab Duyệt Dữ liệu và cột bạn muốn xem. – rogcg

4

Các cơ sở dữ liệu được lưu trữ dưới dạng file SQLite trong /data/data/GÓI/cơ sở dữ liệu/DATABASEFILE nơi:

Bạn có thể xem (sao chép từ/vào hệ thống tệp) tệp cơ sở dữ liệu trong trình mô phỏng chọn phối cảnh DDMS, trong tab Trình khám phá tệp.

6

Tôi đã viết một kịch bản bash đơn giản, mà kéo cơ sở dữ liệu từ thiết bị Android vào máy tính của bạn (Linux, người dùng Mac)

filename: android_db_move.sh sử dụng: 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 
13

Các câu trả lời khác bị lỗi thời nghiêm trọng. Với Android Studio, đây là cách để làm điều đó:

  1. Bấm vào Tools> Android> Android Device Monitor

enter image description here

  1. Nhấp vào Trình khám phá tệp

enter image description here

  1. Navigate to file db của bạn và bấm vào nútLưu.

enter image description here

5

Kể từ khi câu hỏi không bị giới hạn Android Studio, Vì vậy, tôi đưa ra con đường cho Visual Studio 2015 (làm việc cho Xamarin).

Tools-Android-Android Device Monitor

enter image description here

  • Xác định vị trí các tập tin cơ sở dữ liệu đề cập đến trong hình trên, và click vào nút Kéo vì nó thể hiện trong hình ảnh 2.
  • Lưu tập tin ở vị trí mong muốn của bạn.
  • Bạn có thể mở tệp đó bằng cách sử dụng SQLite Studio hoặc Trình duyệt DB cho SQLite.

Đặc biệt Cảm ơn người trả lời khác của câu hỏi này.

2

Giải pháp đơn giản - làm việc cho cả hai Emulator & thiết bị kết nối

Xem danh sách các thiết bị/giả lập hiện nay.

$ adb devices 

Danh sách các thiết bị kèm theo

thiết bị G7NZCJ015313309 emulator-5554 thiết bị

9885b6454e46383744 thiết bị

Run sao lưu trên thiết bị của bạn/emulator

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

Extract data.ab

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

Bạn sẽ tìm thấy cơ sở dữ liệu trong thư mục /db

+0

Nếu bạn đang sử dụng OS X, có thể bạn sẽ thiếu phần zlib của openssl. Bạn có thể sử dụng công việc này: '$ dd if = data.ab bs = 1 skip = 24 | python -c "nhập khẩu zlib, sys; sys.stdout.write (zlib.decompress (sys.stdin.read()))" | tar -xvf -' –

Các vấn đề liên quan