Trình giả lập Android lưu trữ cơ sở dữ liệu SQLite ở đâu?


108

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ữ ở đâu trên hệ thống tệp khi bạn đang sử dụng trình giả lập?

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

/data/data/package_name/databases

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

Câu trả lời:


55

Hệ thống tệp của trình giả lập 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ý tệp này thông qua Eclipse (tìm biểu tượng trông giống G1 trong thanh công cụ) hoặc thông qua chính tệp nhị phân của trình mô phỏng (chạy "trình giả lập-trợ giúp" để có mô tả về các tùy chọn) .

Tốt nhất bạn nên sử dụng adb từ dòng lệnh để đưa vào trình giả lập đang chạy. Nếu bạn có thể lấy được thư mục và tên tệp cụ thể, bạn có thể thực hiện "kéo adb" để 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.

Chỉnh sửa : Đã xóa đề xuất rằng điều này cũng hoạt động cho các thiết bị chưa root - nó chỉ hoạt động cho trình giả lập và thiết bị mà bạn đang sử dụng adb với tư cách root.


6
Tôi đã tắt DB qua ddms từ Eclipse. Thực hiện các thay đổi của tôi, sau đó bị đẩy lùi. Làm việc như người ở.
I82Much

@ I82Much cũng làm việc cho tôi, thay đổi phối cảnh nhật thực thành ddms và sau đó bạn có thể lấy tệp dữ liệu của đó.
vanzylv 29/12/11

Bản cập nhật 2013: 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 chưa root .
Bill The Ape

Đó không phải là bản cập nhật, về cơ bản ngay từ khi bắt đầu ứng dụng, các tệp riêng tư đã được riêng tư từ adb trên các thiết bị được bảo mật. Nhưng câu hỏi này là về trình giả lập, nơi adb chạy dưới dạng root.
Chris Stratton

6
Một ví dụ để kéo cơ sở dữ liệu từ Trình giả lập vào máy cục bộ của bạn làadb pull /data/data/com.activeandroid.test/databases/Application.db ~/Development/Application.db
Joshua Pinter

123

Cập nhật được đề cập trong các bình luận bên dưới:

Bạn không cần phải ở chế độ DDMS nữa, chỉ cần mở File Explorer từ Eclipse Window> Show View> Other ... Có vẻ như ứng dụng không cần phải chạy ngay cả, tôi có thể duyệt qua các tệp ứng dụng khác nhau các nội dung. Tôi đang chạy phiên bản ADB 1.0.29


Hoặc, bạn có thể thử cách tiếp cận cũ:

Mở phối cảnh DDMS trên IDE Eclipse của bạn

( Window> Open Perspective> Other> DDMS )

và quan trọng nhất:

ỨNG DỤNG CỦA BẠN PHẢI CHẠY ĐƯỢC VÌ VẬY BẠN CÓ THỂ XEM HIỂN THỊ CÁC THƯ MỤC VÀ TỆP .

Sau đó, trong Tab File Explorer, bạn sẽ làm theo đường dẫn:

data> data> your-package-name> database> your-database-file .

Sau đó chọn tập tin, nhấn vào biểu tượng đĩa ở góc phải màn hình để tải tập tin .db . Nếu bạn muốn tải tệp cơ sở dữ liệu lên trình giả lập, bạn có thể nhấp vào biểu tượng điện thoại (bên cạnh biểu tượng đĩa) 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 tại đây .

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


5
Nếu ai đó đang thắc mắc, bạn phải nhấp vào tab 'File Explorer'.
MSpeed

Xin chào 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ó?
Nilesh Nikumbh

4
@NileshNikumbh Chọn tệp và nhấp vào biểu tượng đĩ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. sourceforge.net/projects/sqlitebrowser Sau khi cài đặt, chỉ cần mở tệp .db, chọn tab Duyệt dữ liệu và cột bạn muốn xem.
rogcg

Bài viết tuyệt vời! Tôi đang gặp vấn đề với việc các tập tin SQLite từ thiết bị giả lập:Failed to pull selection (null)
Jan-Terje Sørensen

@OckhamsRazor Nếu bạn muốn xem cơ sở dữ liệu từ một thiết bị thực (không phải giả lập), bạn phải root điện thoại của mình.
rogcg

18

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

  1. Nhấp vào Công cụ> Android> Màn hình thiết bị Android

nhập mô tả hình ảnh ở đây

  1. Nhấp vào File Explorer

nhập mô tả hình ảnh ở đây

  1. Điều hướng đến tệp db của bạn và nhấp vào nút Lưu .

nhập mô tả hình ảnh ở đây


1
"Android Device Monitor không được dùng nữa trong Android Studio 3.1 và bị xóa khỏi Android Studio 3.2. Các tính năng mà bạn có thể sử dụng thông qua Android Device Monitor đã được thay thế bằng các tính năng mới ..." developer.android.com/studio/profile/monitor
Pete Alvin

8

Trong Android Studio 3.4.1, bạn có thể sử dụng tính năng tìm kiếm của Android Studio để tìm "Device File Explorer" và sau đó đi tới thư mục / data / data / package_name / database của trình giả lập.


6

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

tên tệp: android_db_move.sh cách 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

6

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

Công cụ-Android-Giám sát thiết bị Android

nhập mô tả hình ảnh ở đây

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

Đặc biệt cảm ơn những người trả lời câu hỏi này.


4

Cơ sở dữ liệu được lưu trữ dưới dạng tệp SQLite trong / data / data / PACKAGE / databases / DATABASEFILE trong đó:

Bạn có thể xem (sao chép từ / sang 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 File Explorer.


3

Giải pháp đơn giản - hoạt động cho cả Trình giả lập & Thiết bị được kết nối

1 Xem danh sách các thiết bị / trình giả lập hiện có.

$ adb devices

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

Trình giả lập thiết bị G7NZCJ015313309-5554 thiết bị

9885b6454e46383744 thiết bị

2 Chạy sao lưu trên thiết bị / trình giả lập của bạn

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

3 Giải nén 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 /dbthư mục


Nếu bạn đang sử dụng OS X, bạn có thể sẽ thiếu phần zlib của openssl. Bạn có thể sử dụng công việc xung quanh: $ 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

Không làm việc cho tôi. Tôi đang nhậnbash: adb: command not found
Matthias

0

theo tài liệu Android , Monitor không được dùng nữa trong Android Studio 3.1 và bị xóa khỏi Android Studio 3.2. Để truy cập tệp, có một tab trong studio android có tên "Device File Explorer" ở phía dưới bên phải của cửa sổ phát triển mà bạn có thể truy cập hệ thống tệp giả lập của mình. Chỉ cần làm theo

/ data / data / package_name / databases

chúc may mắn.

Thiết bị Android Trình khám phá tệp


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.