Làm cách nào để nhập mmssms.db hiện có vào Thiết bị ảo Android?


7

Tôi đã hạ cấp từ Cyanogenmod 13 (Android 6.0.1) xuống Android stock 5.1.1 và giữ tệp mmssms.db trước đó của tôi, nhưng nó không tương thích với các phiên bản Android cũ hơn. Tôi muốn nhập cơ sở dữ liệu này vào Thiết bị ảo Android chạy Android 6.0, sao lưu bằng SMS Save & Restore, sau đó khôi phục tệp .xml do ứng dụng đó tạo ra trên thiết bị của tôi.

Tuy nhiên, khi tôi sao chép thư mục com.android.providers.telephony cũ của mình trong thư mục / data / data / của AVD, cả ứng dụng Messenger cũng như SMS Backup & Restore đều không thấy bất kỳ tin nhắn nào. Thư mục và nội dung của nó thuộc sở hữu của người dùng radio , thuộc nhóm radio và có chmod được đặt thành 771.

Làm cách nào tôi có thể kiểm tra những gì ngăn hệ thống truy cập cơ sở dữ liệu của mình?

Hoặc làm thế nào khác tôi có thể lấy lại tin nhắn của tôi?


Có thể là mmssms.db của CM 13 không tương thích hoàn toàn với stock 6.0.1. Bạn có thực sự cần phải nhập các tin nhắn vào 5.1.1, hoặc sẽ truy cập chúng trên PC là đủ?
Chahk

Tôi hoàn toàn cần hợp nhất hai cơ sở dữ liệu, không chỉ truy cập cơ sở dữ liệu cũ trên PC. Chỉnh sửa: dựa trên đề xuất của bạn rằng mmssms.db của CM 13 không tương thích với kho Android 6.0.1, tôi sẽ thử cài đặt CM 13 trên AVD.
Máy cắt

Bất kỳ may mắn với CM13 trên AVD?
Chahk

Trình giả lập của Google rất chậm và bị treo khi tôi sử dụng adb để khởi động lại vào recovery / bootloader. Có lẽ nó sẽ hoạt động tốt hơn với một thiết bị ảo có bộ xử lý Intel Atom; Tôi sẽ thử điều đó sau ngày hôm nay.
Máy cắt

Câu trả lời:


2

Cuối cùng tôi đã quản lý để khôi phục nội dung của cơ sở dữ liệu trước đây trên thiết bị hiện tại của mình và tôi sẽ giải thích làm thế nào.

Ý tưởng là sao chép bản sao lưu của /data/data/com.android.providers.telephony từ bản cài đặt trước của tôi, sang Thiết bị ảo Android, sao lưu trên đó bằng SMS Backup & Restore ở định dạng XML, sau đó khôi phục bản sao lưu XML đó thiết bị của tôi. SMS Backup & Restore đã hợp nhất các tin nhắn từ bản sao lưu với tin nhắn của thiết bị hiện tại để tôi không phải hợp nhất hai cơ sở dữ liệu bằng tay.

Trong câu hỏi của tôi, AVD chạy 6.0.0 sẽ không đọc nội dung cơ sở dữ liệu của tôi vì nó được tạo trên CM 13 dựa trên Android 6.0.1. Nhưng Google dường như không cung cấp hình ảnh giả lập dựa trên Android 6.0.1, vì vậy tôi vẫn sử dụng AVD chạy 6.0.0. Vì lý do hiệu suất, tôi đã cấu hình nó để mô phỏng CPU Intel Atom (x86) và cài đặt trình điều khiển Intel HAXM trên PC của tôi (Tôi đã làm theo câu trả lời này để làm điều đó).

Cơ sở dữ liệu mmssms.db chứa các thuộc tính về chính nó, đặc biệt là số phiên bản, vì vậy tôi đã chỉnh sửa chúng để khiến Android tin rằng nó xử lý cơ sở dữ liệu của phiên bản mà nó có thể xử lý. Tôi đã mở mmssms.db trong SQLite Expert , nhấp vào tab "Cơ sở dữ liệu" và trong danh sách thuộc tính, tìm thấy các dòng sau:

  • lược đồ_version
  • user_version

Tôi đã hạ những cái này xuống còn 44 và 60, tương ứng.

Sau đó, tôi đã chuyển bản sao lưu /data/data/com.android.providers.telephony của mình sang AVD bằng cách đẩy adb , sau khi chắc chắn rằng vị trí đó đã trống ở đó. Sử dụng shell adb Tôi đã đặt chủ sở hữu và nhóm mọi thứ trong thư mục này và các thư mục con của nó thành radio và trong thư mục con cơ sở dữ liệu , giá trị chmod là 660.

Tôi đã khởi động lại thiết bị.

Tôi đã cài đặt Sao lưu & Khôi phục SMS trên AVD thông qua ADB. (Có thể tìm thấy .apk của ứng dụng đó trên một thiết bị hiện có trong / data / app trên thiết bị đã cài đặt. Tôi không bận tâm cài đặt Google Play Services trên trình giả lập để lấy nó từ Play Store, nhưng bạn có thể làm điều đó.)

Tôi đã sao lưu các tin nhắn và sao chép .xml kết quả vào thiết bị thực của mình, nơi tôi đã sử dụng SMS Backup & Restore để khôi phục nó. Võngà.


0

Tôi đã phải thực hiện thêm một bước so với câu trả lời @Cutter để làm cho nó hoạt động với LineageOS 14.1 (bản gốc mmssms.dbđến từ Android 5.1).

Thay đổi user_versiontừ 64thành 68:

sqlite3 mmssms.db
PRAGMA user_version;
PRAGMA user_version = 68;
.q

Trong chế độ khôi phục ( adb reboot recovery):

adb push mmssms.db /data/user_de/0/com.android.providers.telephony/databases/
adb shell chown radio:radio /data/user_de/0/com.android.providers.telephony/databases/mmssms.db
adb shell chmod 660 /data/user_de/0/com.android.providers.telephony/databases/mmssms.db
adb shell chcon u:object_r:radio_data_file:s0 /data/user_de/0/com.android.providers.telephony/databases/mmssms.db
adb shell ls -alZ /data/user_de/0/com.android.providers.telephony/databases/mmssms.db

Điều quan trọng là thay đổi bổ sung bối cảnh bảo mật của tập tin TỰ ĐỘNG với chcon.

Và sau khi khởi động lại các tin nhắn SMS cũ cuối cùng đã được nhận ra!

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.