Bagaimana cara melihat file Realm saya di Browser Realm?


127

Saya baru saja menemukan Realm dan ingin menjelajahinya secara lebih detail sehingga saya memutuskan untuk membuat aplikasi sampel dan mengacaukannya. Sejauh ini baik.

Namun, satu hal yang belum dapat saya lakukan adalah bagaimana cara melihat database saya di Realm Browser. Bagaimana ini bisa dilakukan?


INGIN CARA MUDAH? Lewati pembuatan jalan, perintah adb, dan sakit kepala. @devsmash punya jawabannya: stackoverflow.com/a/49705298/483520
Nolan Amy

Jawaban:


131

Saat ini Realm Browser tidak mendukung pengaksesan database secara langsung di perangkat, jadi Anda perlu menyalin database dari emulator / telepon untuk melihatnya. Itu bisa dilakukan dengan menggunakan ADB:

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

Perintah itu akan menarik semua file Realm yang dibuat menggunakan Realm.getInstance(new RealmConfiguration.Builder().build()). Basis data default disebut default.realm.

Perhatikan bahwa ini hanya akan bekerja pada emulator atau jika perangkat di-root.


25
Anda juga dapat mencatat jalur yang tepat dari aplikasi Anda dengan: Log.d ("", "path:" + realm.getPath ());
bmunk

39
Jadi Realm Browser untuk Mac tidak berguna. Siapa yang menggunakan emulator
Jemshit Iskenderov

10
Untuk perangkat yang tidak di-rooting, skrip ini berfungsi: gist.github.com/jk2K/a66ed67b252b880824b32dd4952d1b39
jmartinalonso

3
jika Anda mendapatkan kesalahan seperti file tidak ditemukan, jalankan perintah adb root terlebih dahulu sebelum menarik file ranah.
Randy

Ini berfungsi setelah menggunakan adb root tetapi apa pun yang saya lakukan, file ranah mengatakan itu terenkripsi saat menggunakan ranah browser. Ya saya membaca tentang korupsi dan semacamnya tetapi tidak ada yang saya coba bekerja sama sekali. Apakah sesuatu berubah di ranah?
Mike Axle

104

Sekarang Anda dapat melihat Realm DB di browser Chrome menggunakan Stetho , yang dikembangkan oleh Facebook. Secara default, Stetho memungkinkan untuk melihat Sqlite, jaringan, preferensi bersama tetapi dengan plugin tambahan di sini memungkinkan untuk melihat Realm juga.

Setelah mengonfigurasi Applicationkelas Anda dengan pustaka di atas, saat aplikasi sedang berjalan dan terhubung, buka browser Chrome dan navigasikan chrome://inspectuntuk melihat


masukkan deskripsi gambar di sini

Kemudian Resources->Web Sql->default.realm


masukkan deskripsi gambar di sini


2
Gagal menyelesaikan: com.uphyca: stetho_realm: 0.8.0 Adakah yang bisa membantu saya dengan ini? Maaf, saya bukan pengguna mac, jadi sepertinya cara ini adalah satu-satunya saya dapat menelusuri file database saya.
careful7j

4
Apakah Anda menambahkan url https://github.com/uPhyca/stetho-realm/raw/master/maven-reposeperti yang ditunjukkan di sini github.com/uPhyca/stetho-realm
Jemshit Iskenderov

2
Kesalahan saya, terima kasih banyak! Saya melewatkan ini. Sekarang berfungsi sebagaimana mestinya!
careful7j

1
Saya menonton perubahan tabel "A" dengan mengklik beberapa tabel lain, dan kemudian mengklik tabel "A" lagi @AlexKost
Jemshit Iskenderov

1
lihat posting ini jika ada yang memiliki masalah dengan melihat bidang: github.com/uPhyca/stetho-realm/issues/45 .... Saya melihat bidang saya tetapi tidak ada data .... hmmm
Mike6679

56

Anda juga dapat menarik file Anda dari perangkat NON-rooted lainnya menggunakan perintah ADB shell dan run-as.

Anda dapat menggunakan perintah ini untuk menarik dari penyimpanan pribadi aplikasi Anda, sebuah database bernama your_database_file_name yang terletak di folder file:

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
Sepakat. Karena kita dapat mengatur aplikasi menjadi debuggable, kita dapat menarik file dengan ini tanpa root.
JoshuaTree

apakah ada cara lain untuk menarik basis data dari apk yang tidak dapat di-debuggable?
JEGADEESAN S

jika itu mungkin, seluruh OS android akan benar-benar tidak aman, Ada kemungkinan itu hanya mungkin pada perangkat yang di-rooting, tetapi saya tidak pernah melakukannya
Apperside

Ini mungkin tidak berfungsi pada perangkat Samsung karena implementasi run-as buggy mereka.
SkorpEN

Jadi, kita dapat menggunakan ini untuk mengimpor ranah yang sudah diedit kembali ke tempatnya? adb exec-out run-as package.name cat files/your_database_file_name < your_database_file_name
Ender

52

Jika Anda malas mendapatkan file basis data realm setiap kali menggunakan adb, Anda bisa menambahkan fungsi ekspor ke kode android Anda, yang mengirimi Anda email dengan file basis data realm sebagai lampiran.

Berikut sebuah contoh:

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"));
}

Jangan lupa untuk menambahkan izin pengguna ini ke file Android Manifest Anda:

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

3
Ini sangat baik jika Anda menggunakan Pushbullet . Kemudian Anda dapat mendorong pesan ke browser Chrome Anda dan itu akan mengunduh file. File tersebut kemudian dapat dibuka di Realm Browser
ymerdrengene

1
Crashing on Android 8.0
EGHDK

42

Untuk Android (Tidak perlu me-rooting perangkat Anda)

Untuk mendapatkan salinan basis data Realm pada perangkat Anda, buka Device File Explorer di Android Studio.

Navigasi ke /data/data/your.package.name/files/ .

Di sana Anda akan menemukan file * .realm Anda. Klik kanan, lalu Simpan Sebagai . Pastikan untuk menyinkronkan sebelum Anda menyimpannya.

Gunakan Realm Browser atau salah ini untuk melihat file * .realm:

Masukkan deskripsi gambar di sini


2
Solusi yang sangat sederhana, sekarang seharusnya jawabannya
Steven Elliott

Benar. Inilah caranya. πŸ™
Nolan Amy

Pastikan aplikasi Anda disetel ke debugable false untuk melihat data.
Aman Verma

@AmanVerma Ini adalah USB debugging di Opsi Pengembang. USB debugging harus diaktifkan untuk menggunakan Device File Explorer
krhitesh

Pengguna Linux dapat mengunduh realm studio menggunakan realm.io/products/realm-studio dan membuka file ranah dari sana
B.shruti

19

Ada solusinya. Anda dapat langsung mengakses file dari monitor perangkat. Anda dapat mengakses direktori ini hanya ketika Anda menggunakan emulator atau perangkat yang di-rooting.

Di Android Studio:

Pilih

Alat Menu β†’ Android β†’ Monitor Perangkat Android β†’ File Explorer β†’ data β†’ data β†’ (Nama Paket Anda) β†’ file β†’ * db.realm

Tarik file ini dari perangkat:

Masukkan deskripsi gambar di sini

Dari Android Studio 3 canary 1, Device File Explorer telah diperkenalkan. Anda perlu melihat file ranah di sini. Kemudian, (pilih paket Anda) β†’ pilih file ranah β†’ Klik kanan dan simpan.

Masukkan deskripsi gambar di sini

Dan buka file tersebut ke Realm Browser. Anda dapat melihat data Anda sekarang.


Terima kasih. namun itu tidak bekerja dengan perangkat sungguhan. Ini hanya bekerja dengan Emulator
pratham kesarkar

1
@prathamkesarkar, itulah sebabnya saya menulis emulator atau perangkat yang di-rooting karena Anda tidak dapat mengakses folder-folder ini di perangkat normal.
Aveek

14

Anda dapat mengakses file ranah secara langsung. Inilah solusi yang saya gunakan.

Pertama, Anda dapat menyalin file ranah yang terletak di '/ data / data / nama paket / file' ke Environment.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();
}

Kedua, gunakan alat ADB untuk menarik file itu seperti ini:

$ adb pull /sdcard/default.realm.

Sekarang Anda dapat membuka file di Realm Browser.


6

Inilah solusi yang tidak mengharuskan ponsel Anda di-rooting, dengan memanfaatkan run-asperintah yang ada di dalam adbshell. Hanya prasyarat adalah Anda harus menginstal debug aplikasi Anda pada ponsel target.

$ 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

Anda akan memiliki salinan DB dari telepon di dalam direktori lokal Anda, yang kemudian dapat Anda muat ke Realm Browser.


1
mac adb jalur default ... / Library / Android / SDK / platform-tools
Francisco Castro

3

Anda sekarang dapat mengaksesnya langsung jika Anda menggunakan emulator.

Pertama, Log path tempat file tersebut berada di emulator seperti yang dikatakan @bmunk:

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

Pencarian kedua dan lakukan klik kanan pada file dan pilih "Save As", pada dialog akan muncul rute di mana file tersebut benar-benar ada di sistem Anda.

masukkan deskripsi gambar di sini Anda dapat menyalin rute dari dialog Simpan Sebagai

Dan kemudian, cukup tempel rute pada dialog "Buka File Lokal" dari Realm Studio.

(Saya sudah menguji ini di Windows saja)


1
Ini jawaban yang paling berguna, terima kasih! Tidak menunjukkan path untuk macOS, tetapi masih mudah untuk menemukan file.
Maria

1

Ini skrip shell saya yang siap pakai. Cukup ganti nama paket dan jalur adb Anda maka skrip akan melakukan yang diperlukan.

#!/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

Lebih detail di posting blog ini: http://medyo.github.io/2016/browse-populate-and-export-realm-database-on-android/


1

Tetap sederhana:

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

Penjelasan:

  1. Temukan jalur untuk adbinstalasi Anda . Jika Anda menggunakan Android Studio kemudian lihat File> Struktur Proyek> Lokasi SDK> Lokasi Android SDK dan tambahkanplatform-tools ke jalur itu.
  2. Gunakan nama aplikasi Anda yang sepenuhnya memenuhi syarat untuk run-as argumen
  3. Tentukan di mana Anda ingin menyalin file ranah

NB: File ini disebut default.realm karena saya belum mengubah namanya saat mengonfigurasinya - nama Anda mungkin berbeda.


1

Anda memiliki beberapa opsi untuk melihat file ranah android Anda:

  1. Seperti @Christian Melchior berkata Anda dapat menarik basis data ranah Anda dari perangkat dan membukanya di mac Anda menggunakan OSX Realm Browser

  2. Anda dapat menggunakan Browser Realm Android pihak ketiga yang saya buat, untuk membuat pengembangan android dengan ranah sedikit lebih mudah. Aplikasi akan menampilkan semua file ranah pada perangkat Anda, dan Anda dapat melihat semua file ranah Anda secara real time saat menguji aplikasi Anda.

  3. Anda dapat menggunakan browser Chrome Stetho Deskripsi lengkap cara menggunakan Setho disediakan oleh @Jemshit Iskendero.


0

Inilah cangkang untuk orang-orang malas seperti saya :)

The .realmfile akan disimpan dalam tmpRealm/folder di sebelah .shberkas.

#!/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 ./

Atau jika Anda lebih suka membiarkan tmpRealm/kartu 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" ./

Referensi:

  1. https://stackoverflow.com/a/28486297/2603230
  2. https://android.stackexchange.com/a/129665/179720
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.