Realm dosyamı Realm Browser'da nasıl görüntüleyebilirim?


127

Realm'i yeni keşfettim ve daha ayrıntılı incelemek istedim, bu yüzden örnek uygulama oluşturmaya ve onunla uğraşmaya karar verdim. Çok uzak çok iyi.

Ancak, henüz çözemediğim bir şey, veritabanımı Realm Browser'da nasıl görüntüleyeceğim. Bu nasıl yapılabilir?


KOLAY YOLU İSTER MİSİNİZ? Yol günlük kaydını, adb komutlarını ve baş ağrısını atlayın. Cevap @devsmash'te: stackoverflow.com/a/49705298/483520
Nolan Amy

Yanıtlar:


131

Şu anda Realm Browser, veri tabanlarına doğrudan cihaz üzerinden erişmeyi desteklemiyor, bu yüzden görüntülemek için veritabanını emülatörden / telefondan kopyalamanız gerekir. Bu, ADB kullanılarak yapılabilir:

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

Bu komut kullanılarak oluşturulan tüm Realm dosyalarını çekecektir Realm.getInstance(new RealmConfiguration.Builder().build()). Varsayılan veritabanı denir default.realm.

Bunun yalnızca bir emülatörde veya cihaz köklü ise çalışacağını unutmayın.


25
Ayrıca uygulamanızdan tam yolu şu şekilde günlüğe kaydedebilirsiniz: Log.d ("", "yol:" + realm.getPath ());
bmunk

39
Yani Realm Browser for Mac işe ​​yaramaz. Emülatörü kim kullanıyor
Jemshit Iskenderov


3
dosya bulunamadı gibi bir hata alırsanız, bölge dosyasını çekmeden önce adb root komutunu çalıştırın.
Randy

Bu, adb kökünü kullandıktan sonra çalışır, ancak ne yaparsam yapayım, bölge dosyası bölge tarayıcıları kullanırken şifrelenmiş olduğunu söylüyor. Evet yolsuzluk ve benzeri şeyleri okudum ama denediğim hiçbir şey işe yaramıyor. Dünyada bir şey mi değişti?
Mike Axle

104

Artık Realm DB'yi Facebook tarafından geliştirilen Stetho kullanarak Chrome tarayıcısında görüntüleyebilirsiniz . Stetho varsayılan olarak Sqlite, ağ, paylaşılan tercihleri ​​görüntülemeye izin verir, ancak burada ek eklenti ile Realm'i de görüntülemeye izin verir.

ApplicationSınıfınızı yukarıdaki kitaplıklarla yapılandırdıktan sonra , uygulama çalışırken ve bağlıyken, Chrome tarayıcısını açın ve chrome://inspectgörmek için gidin .


görüntü açıklamasını buraya girin

Sonra Resources->Web Sql->default.realm


görüntü açıklamasını buraya girin


2
Çözümlenemedi: com.uphyca: stetho_realm: 0.8.0 Biri bana bu konuda yardımcı olabilir mi? Üzgünüm, Mac kullanıcısı değilim, bu yüzden veritabanı dosyama göz atabileceğim tek yol bu gibi görünüyor.
dikkatli7j

4
URL'yi https://github.com/uPhyca/stetho-realm/raw/master/maven-repoburada gösterildiği gibi eklediniz mi github.com/uPhyca/stetho-realm
Jemshit Iskenderov

2
Benim hatam, çok teşekkür ederim! Bunu kaçırdım Şimdi olması gerektiği gibi çalışıyor!
dikkatli7j

1
Başka bir tabloya ve ardından tekrar "A" tablosuna tıklayarak "A" tablosundaki değişiklikleri izliyorum @AlexKost
Jemshit Iskenderov

1
alanları görmekle ilgili bir sorun varsa bu gönderiye bakın : github.com/uPhyca/stetho-realm/issues/45 .... Alanlarımı görüyorum ama veri yok .... hmmm
Mike6679

56

Dosyanızı, ADB kabuğunu ve farklı çalıştır komutunu kullanarak köklü olmayan herhangi bir cihazdan da çekebilirsiniz.

Bu komutları, uygulamanızın özel deposundan dosyalar klasöründe bulunan your_database_file_name adlı bir veritabanını çekmek için kullanabilirsiniz:

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
Kabul. Uygulamayı hata ayıklanabilir olarak ayarlayabildiğimiz için, dosyayı bununla root olmadan çekebiliriz.
JoshuaTree

Hata ayıklaması yapılamayan apk'den veri tabanını çekmenin başka bir yolu var mı?
JEGADEESAN S

bu mümkün olsaydı, tüm android işletim sistemi tamamen güvensiz olurdu, Sadece köklü cihazlarda mümkün olabilirdi, ama ben bunu asla yapmadım
Apperside

Bu, hatalı çalıştırma uygulamaları nedeniyle Samsung cihazlarında çalışmayabilir.
SkorpEN

Yani, bunu düzenlenmiş bölgemizi yerine geri aktarmak için kullanabilir miyiz? adb exec-out run-as package.name cat files/your_database_file_name < your_database_file_name
Ender

52

Bölge veritabanı dosyasını her seferinde adb ile almakta tembelseniz, android kodunuza bölge veritabanı dosyasını ek olarak içeren bir e-posta gönderen bir dışa aktarma işlevi ekleyebilirsiniz.

İşte bir örnek:

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

Bu kullanıcı iznini Android Manifest dosyanıza eklemeyi unutmayın:

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

3
Pushbullet kullanıyorsanız bu özellikle iyidir . Ardından Chrome tarayıcınıza bir mesaj gönderebilirsiniz ve dosyayı indirecektir. Dosya daha sonra Realm Browser'da açılabilir
ymerdrengene

1
Android 8.0'da
kilitleniyor

42

Android için (Cihazınızı köklendirmenize gerek yok)

Cihazınızdaki herhangi bir Realm veritabanının bir kopyasını almak için , Android Studio'da Cihaz Dosyası Gezgini'ne gidin .

Gidin /data/data/your.package.name/files/.

Orada * .realm dosyalarınızı bulacaksınız. Sağ tıklayın, ardından Farklı Kaydet . Kaydetmeden önce senkronize ettiğinizden emin olun.

Kullanım Diyar Tarayıcısı veya herhangi bunlar * .realm dosyaları görüntülemek için:

Buraya resim açıklamasını girin


2
Çok basit bir çözüm, şimdi cevap bu olmalı
Steven Elliott

Kesinlikle. Yol budur. 🙏
Nolan Amy

Verileri görüntülemek için uygulamanızın hata ayıklanabilir yanlış olarak ayarlandığından emin olun.
Aman Verma

@AmanVerma Geliştirici Seçeneklerinde USB hata ayıklamasıdır. Aygıt Dosya Gezgini'ni kullanmak için USB hata ayıklama etkinleştirilmelidir
krhitesh

Linux kullanıcıları realm.io/products/realm-studio kullanarak realm stüdyosunu indirebilir ve oradan realm dosyasını açabilir
B.shruti

19

Bir çözüm var. Dosyaya doğrudan cihaz monitöründen erişebilirsiniz. Bu dizine yalnızca bir öykünücü veya köklü bir cihaz kullanıyorsanız erişebilirsiniz.

Android Studio'da:

seçmek

Menü AraçlarıAndroidAndroid Cihaz MonitörüDosya Gezginiveriveri → (Paket Adınız) → dosyalar → * db.realm

Bu dosyayı cihazdan çekin:

Buraya resim açıklamasını girin

Android Studio 3 canary 1'den Cihaz Dosya Gezgini tanıtıldı. Bölge dosyasına buradan bakmanız gerekiyor. Ardından, (paketinizi seçin) → bölge dosyasını seçin → Sağ tıklayıp kaydedin.

Buraya resim açıklamasını girin

Ve dosyayı Realm Browser'da açın. Verilerinizi şimdi görebilirsiniz.


Teşekkürler. ancak gerçek cihazla çalışmaz.Sadece Emulator ile çalışır
pratham kesarkar

1
@prathamkesarkar, bu yüzden öykünücü veya köklü cihaz yazdım çünkü bu klasörlere normal bir cihazda erişemiyorsunuz.
Aveek

14

Bölge dosyasına doğrudan erişebilirsiniz. İşte kullandığım çözüm.

Öncelikle '/ data / data / packagename / files' içinde bulunan bölge dosyasını Environment.getExternalStorageDirectory () + '/ FileName.realm'e kopyalayabilirsiniz:

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

İkinci olarak, bu dosyayı şu şekilde çekmek için ADB aracını kullanın:

$ adb pull /sdcard/default.realm.

Artık dosyayı Realm Browser'da açabilirsiniz.


6

Burada, kabuğunun run-asiçinde bulunan komutu kullanarak telefonunuzun rootlanmasını gerektirmeyen bir çözüm var adb. Yalnızca ön koşul, hedef telefonda uygulamanızın bir hata ayıklama yapısına sahip olmanız gerektiğidir.

$ 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

Yerel dizininizdeki herhangi bir telefondan DB'nin bir kopyasına sahip olacaksınız ve bunu daha sonra Realm Browser'a yükleyebilirsiniz.


1
mac adb varsayılan yolu ... / Kitaplık / Android / sdk / platform araçları
Francisco Castro

3

Bir öykünücü kullanıyorsanız artık doğrudan erişebilirsiniz.

Önce @bmunk dediği gibi dosyanın emülatörde bulunduğu yolu günlüğe kaydedin:

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

İkinci olarak arayın ve dosyaya sağ tıklayın ve "Farklı Kaydet" i seçin, iletişim kutusunda dosyanın gerçekte sisteminizde olduğu rota görünecektir.

görüntü açıklamasını buraya girin Rotayı Farklı Kaydet iletişim kutusundan kopyalayabilirsiniz

Ve sonra, yolu Realm Studio'nun "Yerel Dosyayı Aç" iletişim kutusuna yapıştırın.

(Bunu yalnızca Windows'ta test ettim)


1
Bu en faydalı cevap, teşekkürler! MacOS için yolu göstermez, ancak dosyayı bulmak yine de kolaydır.
Maria

1

İşte kullanıma hazır kabuk betiğim. Sadece paket adını ve adb yollarınızı değiştirin, ardından komut dosyası gerekli olanı yapacaktır.

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

Bu blog gönderisiyle ilgili daha fazla ayrıntı: http://medyo.github.io/2016/browse-populate-and-export-realm-database-on-android/


1

Basit tutmak:

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

Açıklama:

  1. adbKurulumunuzun yolunu bulun . Android Studio kullanıyorsanız, Dosya> Proje Yapısı> SDK Konumu> Android SDK Konumu'na bakın platform-toolsve bu yola ekleyin .
  2. Bağımsız run-asdeğişken için uygulamanızın tam nitelikli adını kullanın
  3. Bölge dosyasını nereye kopyalamak istediğinize karar verin

Not: Dosyanın adı default.realm çünkü onu yapılandırırken adını değiştirmedim - sizinki farklı olabilir.


1

Android bölge dosyalarınızı görüntülemek için birkaç seçeneğiniz var:

  1. @Christian Melchior'un dediği gibi, bölge veritabanınızı cihazdan çekebilir ve OSX Realm Browser kullanarak Mac'inizde açabilirsiniz.

  2. Realm ile android geliştirmeyi biraz daha kolaylaştırmak için oluşturduğum üçüncü parti Android Realm Browser'ı kullanabilirsiniz . Uygulama size cihazınızdaki tüm bölge dosyalarını gösterir ve uygulamanızı test ederken tüm bölge dosyalarınızı gerçek zamanlı olarak görüntüleyebilirsiniz.

  3. Chrome tarayıcısı Stetho'yu kullanabilirsiniz Setho'nun nasıl kullanılacağının tam açıklaması @Jemshit Iskendero tarafından sağlanmıştır.


0

İşte benim gibi tembel insanlar için bir kabuk :)

.realmDosya içinde saklanır edilecektir tmpRealm/yanındaki klasöre .shdosyası.

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

Veya tmpRealm/SD kartta olmasını tercih ederseniz :

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

Referans:

  1. https://stackoverflow.com/a/28486297/2603230
  2. https://android.stackexchange.com/a/129665/179720
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.