Làm cách nào để xem tệp Realm của tôi trong Trình duyệt Realm?


127

Tôi mới phát hiện ra Realm và muốn khám phá chi tiết hơn nên tôi quyết định tạo ứng dụng mẫu và có một mớ hỗn độn với nó. Càng xa càng tốt.

Tuy nhiên, một điều tôi chưa thể làm việc được là làm thế nào để xem cơ sở dữ liệu của tôi trong Trình duyệt Realm. Điều này có thể giải quyết như thế nào?


MUỐN CÁCH DỄ DÀNG? Bỏ qua việc ghi nhật ký đường dẫn, lệnh adb và đau đầu. @devsmash có câu trả lời: stackoverflow.com/a/49705298/483520
Nolan Amy

Câu trả lời:


131

Hiện tại Trình duyệt Realm không hỗ trợ truy cập cơ sở dữ liệu trực tiếp trên thiết bị, vì vậy bạn cần sao chép cơ sở dữ liệu từ trình giả lập / điện thoại để xem. Điều đó có thể được thực hiện bằng cách sử dụng ADB:

adb pull /data/data/<packagename>/files/ .

Lệnh đó sẽ kéo tất cả các tệp Realm được tạo bằng Realm.getInstance(new RealmConfiguration.Builder().build()). Cơ sở dữ liệu mặc định được gọi default.realm.

Lưu ý rằng điều này sẽ chỉ hoạt động trên một trình giả lập hoặc nếu thiết bị đã được root.


25
Bạn cũng có thể đăng nhập đường dẫn chính xác từ ứng dụng của mình bằng: Log.d ("", "path:" + realm.getPath ());
bmunk

39
Vì vậy, Realm Browser cho Mac là vô dụng. Ai sử dụng trình giả lập
Jemshit Iskenderov

10
Đối với các thiết bị chưa root, tập lệnh này hoạt động: gist.github.com/jk2K/a66ed67b252b880824b32dd4952d1b39
jmartinalonso 22/03/2017

3
nếu bạn gặp lỗi như không tìm thấy tập tin, hãy thực hiện lệnh gốc adb trước khi kéo tập tin cảnh giới.
randy

Điều này hoạt động sau khi sử dụng root adb nhưng bất kể tôi làm gì, tệp realm nói rằng nó được mã hóa khi sử dụng cõi chân mày. Có tôi đã đọc về tham nhũng và như vậy nhưng không có gì tôi cố gắng làm việc cả. Có điều gì đó thay đổi trong vương quốc?
Mike Axle

104

Giờ đây, bạn có thể xem Realm DB trên trình duyệt Chrome bằng Stetho , được phát triển bởi Facebook. Theo mặc định, Stetho cho phép xem Sqlite, mạng, chia sẻ hội nghị nhưng với plugin bổ sung ở đây cũng cho phép xem Realm.

Sau khi định cấu hình Applicationlớp của bạn với các thư viện ở trên, trong khi ứng dụng đang chạy và được kết nối, hãy mở trình duyệt Chrome và điều hướng chrome://inspectđể xem


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

Sau đó Resources->Web Sql->default.realm


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


2
Không thể giải quyết: com.uphyca: stetho_realm: 0.8.0 Có ai có thể giúp tôi không? Tôi xin lỗi, tôi không phải là người dùng mac, vì vậy có vẻ như cách này là cách duy nhất tôi có thể duyệt tệp cơ sở dữ liệu của mình.
cẩn thận7j

4
Bạn đã thêm url https://github.com/uPhyca/stetho-realm/raw/master/maven-reponhư được hiển thị ở đây github.com/uPhyca/stetho-realm
Jemshit Iskenderov

2
Lỗi của tôi, cảm ơn bạn rất nhiều! Tôi đã bỏ lỡ điều này. Bây giờ nó hoạt động như nó nên!
cẩn thận7j

1
Tôi xem các thay đổi của bảng "A" bằng cách nhấp vào một số bảng khác và sau đó nhấp vào bảng "A" một lần nữa @AlexKost
Jemshit Iskenderov

1
xem bài đăng này nếu có ai có vấn đề với các lĩnh vực nhìn thấy: github.com/uPhyca/stetho-realm/issues/45 .... Tôi thấy lĩnh vực của tôi, nhưng không có dữ liệu .... hmmm
Mike6679

56

Bạn cũng có thể kéo tệp của mình từ bất kỳ thiết bị gốc NON nào bằng cách sử dụng shell ADB và lệnh run-as.

Bạn có thể sử dụng các lệnh này để lấy từ bộ nhớ riêng của ứng dụng một cơ sở dữ liệu có tên your_database_file_name nằm trong thư mục tệp:

adb shell "run-as package.name chmod 666 /data/data/package.name/files/your_database_file_name"

// For devices running an android version lower than Android 5.0 (Lollipop)
adb pull /data/data/package.name/files/your_database_file_name

// For devices running an Android version equal or grater
// than Android 5.0 (Lollipop)
adb exec-out run-as package.name cat files/your_database_file_name > your_database_file_name
adb shell "run-as package.name chmod 600 /data/data/package.name/files/your_database_file_name"

3
Đã đồng ý. Vì chúng ta có thể thiết lập ứng dụng thành gỡ lỗi, chúng ta có thể kéo tệp bằng cái này mà không cần root.
JoshuaTree

Có cách nào khác để lấy cơ sở dữ liệu từ apk không thể sửa lỗi không?
JEGADEESAN S

Nếu điều đó là có thể, toàn bộ HĐH Android sẽ hoàn toàn không an toàn, có khả năng chỉ có thể xảy ra trên các thiết bị đã root, nhưng tôi chưa bao giờ làm điều đó
Apperside 22/1/18

Điều này có thể không hoạt động trên các thiết bị Samsung do lỗi triển khai như lỗi của họ.
SkorpEN

Vì vậy, chúng ta có thể sử dụng điều này để nhập vương quốc đã chỉnh sửa của chúng tôi trở lại vị trí của nó? adb exec-out run-as package.name cat files/your_database_file_name < your_database_file_name
Ender

52

Nếu bạn lười biếng lấy tệp cơ sở dữ liệu cảnh giới mỗi lần với adb, bạn có thể thêm chức năng xuất vào mã Android, gửi email cho bạn với tệp cơ sở dữ liệu cảnh giới dưới dạng tệp đính kèm.

Dưới đây là một ví dụ:

public void exportDatabase() {

    // init realm
    Realm realm = Realm.getInstance(getActivity());

    File exportRealmFile = null;
    try {
        // get or create an "export.realm" file
        exportRealmFile = new File(getActivity().getExternalCacheDir(), "export.realm");

        // if "export.realm" already exists, delete
        exportRealmFile.delete();

        // copy current realm to "export.realm"
        realm.writeCopyTo(exportRealmFile);

    } catch (IOException e) {
        e.printStackTrace();
    }
    realm.close();

    // init email intent and add export.realm as attachment
    Intent intent = new Intent(Intent.ACTION_SEND);
    intent.setType("plain/text");
    intent.putExtra(Intent.EXTRA_EMAIL, "YOUR MAIL");
    intent.putExtra(Intent.EXTRA_SUBJECT, "YOUR SUBJECT");
    intent.putExtra(Intent.EXTRA_TEXT, "YOUR TEXT");
    Uri u = Uri.fromFile(exportRealmFile);
    intent.putExtra(Intent.EXTRA_STREAM, u);

    // start email intent
    startActivity(Intent.createChooser(intent, "YOUR CHOOSER TITLE"));
}

Đừng quên thêm quyền người dùng này vào tệp Bản kê khai Android của bạn:

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

3
Điều này đặc biệt tốt nếu bạn sử dụng PushbONS . Sau đó, bạn có thể đẩy tin nhắn đến trình duyệt Chrome của mình và nó sẽ tải xuống tệp. Tập tin sau đó có thể được mở trong Realm Browser
ymerdrengene

1
Sự cố trên Android 8.0
EGHDK

42

Dành cho Android (Không cần root thiết bị của bạn)

Để có bản sao của bất kỳ cơ sở dữ liệu Realm nào trên thiết bị của bạn, hãy truy cập Device File Explorer trong Android Studio.

Điều hướng đến /data/data/your.package.name/files/.

Ở đó bạn sẽ tìm thấy các tập tin * .realm của bạn. Nhấp chuột phải, sau đó Lưu dưới dạng . Đảm bảo đồng bộ hóa trước khi bạn lưu chúng.

Sử dụng Realm Browser hoặc bất kỳ thứ nào trong số này để xem các tệp * .realm:

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


2
Một giải pháp đơn giản như vậy, đây sẽ là câu trả lời
Steven Elliott

Chắc chắn rồi. Đây là cách. 🙏
Nolan Amy

Đảm bảo ứng dụng của bạn được đặt thành gỡ lỗi sai để xem dữ liệu.
Aman Verma

@AmanVerma Đó là gỡ lỗi USB trong Tùy chọn nhà phát triển. Phải gỡ lỗi USB để sử dụng Device File Explorer
krhitesh

Người dùng Linux có thể tải xuống studio realm bằng realm.io/products/realm-studio và mở tệp cảnh giới từ đó
B.shruti

19

Có một cách giải quyết. Bạn có thể truy cập trực tiếp vào tập tin từ màn hình thiết bị. Bạn chỉ có thể truy cập thư mục này khi bạn đang sử dụng trình giả lập hoặc thiết bị đã root.

Trong Studio Android:

Lựa chọn

Công cụ menu → AndroidMàn hình thiết bị AndroidFile Explorerdữ liệudữ liệu → (Tên gói của bạn) → tệp → * db.realm

Kéo tập tin này từ thiết bị:

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

Từ Android Studio 3 canary 1, Device File Explorer đã được giới thiệu. Bạn cần xem tập tin cảnh giới ở đây. Sau đó, (chọn gói của bạn) → chọn tệp cảnh giới → Nhấp chuột phải và lưu.

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

Và mở tập tin vào Realm Browser. Bạn có thể xem dữ liệu của bạn bây giờ.


Cảm ơn. tuy nhiên nó không hoạt động với thiết bị thực. Nó chỉ hoạt động với Trình
mô phỏng

1
@prathamkesarkar, đó là lý do tại sao tôi đã viết trình giả lập hoặc thiết bị đã root bởi vì bạn không thể truy cập vào các thư mục này trong một thiết bị bình thường.
Aveek

14

Bạn có thể truy cập tập tin cảnh giới trực tiếp. Đây là giải pháp mà tôi đã sử dụng.

Trước tiên, bạn có thể sao chép tệp cảnh giới nằm trong '/ data / data / packagename / files' sang Môi trường.getExternalStorageDirectory () + '/ FileName.realm':

public class FileUtil {
    public static void copy(File src, File dst) throws IOException {
        InputStream in = new FileInputStream(src);
        OutputStream out = new FileOutputStream(dst);

        // Transfer bytes from in to out
        byte[] buf = new byte[1024];
        int len;
        while ((len = in.read(buf)) > 0) {
            out.write(buf, 0, len);
        }
        in.close();
        out.close();
    }
}

Realm realm = null;
try {
    realm = Realm.getInstance(this);
        File f = new File(realm.getPath());
        if (f.exists()) {
            try {
                FileUtil.copy(f, new File(Environment.getExternalStorageDirectory()+"/default.realm"));
            }
            catch (IOException e) {
                e.printStackTrace();
            }
        }
}
finally {
    if (realm != null)
        realm.close();
}

Thứ hai, sử dụng công cụ ADB để kéo tệp đó như thế này:

$ adb kéo /sdcard/default.realm.

Bây giờ bạn có thể mở tệp trong Trình duyệt Realm.


6

Đây là một giải pháp không yêu cầu điện thoại của bạn phải được root, bằng cách sử dụng run-aslệnh có trong adbvỏ của nó. Điều kiện tiên quyết là bạn phải cài đặt gỡ lỗi ứng dụng của mình trên điện thoại mục tiêu.

$ adb shell
$ run-as com.yourcompany.yourapp # pwd will return /data/data/com.yourcompany.yourapp
$ cp files/default.realm /sdcard
$ exit
$ exit
$ adb pull /sdcard/default.realm ~/Desktop # or wherever you want to put it

Bạn sẽ có một bản sao DB từ bất kỳ điện thoại nào trong thư mục địa phương của bạn, sau đó bạn có thể tải lên Trình duyệt Realm.


1
đường dẫn mặc định của mac adb ... / Thư viện / Android / sdk / công cụ nền tảng
Francisco Castro

3

Bây giờ bạn có thể truy cập trực tiếp nếu bạn đang sử dụng trình giả lập.

Đầu tiên Đăng nhập đường dẫn nơi tệp nằm trong trình giả lập như @bmunk nói:

Log.d(TAG, "path: " + realm.getPath());

Thứ hai Tìm kiếm nó và nhấp chuột phải vào tệp và chọn "Lưu dưới dạng", trên hộp thoại sẽ xuất hiện tuyến đường nơi tệp thực sự nằm trong hệ thống của bạn.

nhập mô tả hình ảnh ở đây Bạn có thể sao chép tuyến đường từ hộp thoại Lưu với tên

Và sau đó, chỉ cần dán tuyến đường vào hộp thoại "Mở tệp cục bộ" của Realm Studio.

(Tôi đã thử nghiệm điều này chỉ trong Windows)


1
Đây là câu trả lời hữu ích nhất, cảm ơn bạn! Không hiển thị đường dẫn cho macOS, nhưng vẫn dễ dàng xác định vị trí tệp.
Maria

1

Đây là kịch bản shell sẵn sàng sử dụng của tôi. Chỉ cần thay đổi tên gói và đường dẫn adb của bạn sau đó tập lệnh sẽ làm điều cần thiết.

#!/bin/sh
ADB_PATH="/Users/medyo/Library/Android/sdk/platform-tools"
PACKAGE_NAME="com.mobiacube.elbotola.debug"
DB_NAME="default.realm"
DESTINATION_PATH="/Users/Medyo/Desktop/"
NOT_PRESENT="List of devices attached"
ADB_FOUND=`${ADB_PATH}/adb devices | tail -2 | head -1 | cut -f 1 | sed 's/ *$//g'`
if [[ ${ADB_FOUND} == ${NOT_PRESENT} ]]; then
    echo "Make sure a device is connected"
else
    ${ADB_PATH}/adb shell "
        run-as ${PACKAGE_NAME} cp /data/data/${PACKAGE_NAME}/files/${DB_NAME} /sdcard/
        exit
    "
    ${ADB_PATH}/adb pull "/sdcard/${DB_NAME}" "${DESTINATION_PATH}"
    echo "Database exported to ${DESTINATION_PATH}${DB_NAME}"
fi

Thông tin chi tiết về bài đăng trên blog này: http://medyo.github.io/2016/browse-population-and-export-realm-database-on-android/


1

Giữ cho nó đơn giản:

/Users/inti/Library/Android/sdk/platform-tools/adb exec-out run-as com.mydomain.myapp cat files/default.realm > ~/Downloads/default.realm

Giải trình:

  1. Tìm đường dẫn để adbcài đặt của bạn . Nếu bạn đang sử dụng Android Studio, hãy xem Tệp> Cấu trúc dự án> Vị trí SDK> Vị trí SDK Android và nối platform-toolsvào đường dẫn đó.
  2. Sử dụng tên đủ điều kiện của ứng dụng của bạn cho run-asđối số
  3. Quyết định nơi bạn muốn sao chép tệp cảnh giới vào

NB: Tệp được gọi là default.realm vì tôi đã không thay đổi tên của nó khi định cấu hình nó - tệp của bạn có thể khác.


1

Bạn có một vài tùy chọn để xem các tập tin lĩnh vực Android của bạn:

  1. Giống như @Christian Melchior cho biết bạn có thể lấy cơ sở dữ liệu cảnh giới của mình từ thiết bị và mở nó trên máy Mac bằng Trình duyệt OSX Realm

  2. Bạn có thể sử dụng Trình duyệt Android Realm của bên thứ ba do tôi tạo, để giúp phát triển Android dễ dàng hơn một chút. Ứng dụng sẽ hiển thị cho bạn tất cả các tệp cảnh giới trên thiết bị của bạn và bạn có thể xem tất cả các tệp cảnh giới của mình theo thời gian thực trong khi kiểm tra ứng dụng của bạn.

  3. Bạn có thể sử dụng trình duyệt Chrome Stetho Mô tả đầy đủ cách sử dụng Setho được cung cấp bởi @Jemshit Iskendero câu trả lời.


0

Đây là một cái vỏ cho những người lười biếng như tôi :)

Tập .realmtin sẽ được lưu trữ bên trong tmpRealm/thư mục bên cạnh .shtập tin.

#!/bin/sh
adb shell 'su -c "
cd /data/data/<packagename>/files
ls
rm -rf /data/local/tmp/tmpRealm/
mkdir /data/local/tmp/tmpRealm/
cp /data/data/com.arefly.sleep/files/* /data/local/tmp/tmpRealm
chown shell.shell /data/local/tmp/tmpRealm/*
"'
rm -rf ./tmpRealm/
adb pull /data/local/tmp/tmpRealm ./

Hoặc nếu bạn muốn để tmpRealm/trên thẻ SD:

#!/bin/sh
adb shell 'su -c "
cd /data/data/com.arefly.sleep/files
ls
mount -o rw,remount $EXTERNAL_STORAGE/
rm -rf $EXTERNAL_STORAGE/tmpRealm
mkdir $EXTERNAL_STORAGE/tmpRealm
cp /data/data/com.arefly.sleep/files/* $EXTERNAL_STORAGE/tmpRealm
"'
rm -rf ./tmpRealm/
# http://unix.stackexchange.com/a/225750/176808
adb pull "$(adb shell 'echo "$EXTERNAL_STORAGE"' | tr -d '\r')/tmpRealm" ./

Tài liệu tham khảo:

  1. https://stackoverflow.com/a/28486297/2603230
  2. https://android.stackexchange.com/a/129665/179720
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.