मैं अपने Realm फ़ाइल को Realm Browser में कैसे देखूँ?


127

मैंने सिर्फ दायरे की खोज की है और इसे और अधिक विस्तार से जानना चाहता हूं इसलिए मैंने नमूना आवेदन बनाने और इसके साथ गड़बड़ करने का फैसला किया। अब तक सब ठीक है।

हालाँकि, एक बात मैं अभी तक वर्कआउट नहीं कर पाया हूं कि मैं अपने डेटाबेस को Realm Browser में कैसे देख सकता हूं। यह कैसे किया जा सकता है?


आसान रास्ता चाहते हैं? पथ-लॉगिंग, एडीबी कमांड और सिरदर्द को छोड़ दें। @ महादेव का जवाब है: stackoverflow.com/a/49705298/483520
Nolan Amy

जवाबों:


131

वर्तमान में Realm Browser डिवाइस पर सीधे डेटाबेस तक पहुंचने का समर्थन नहीं करता है, इसलिए आपको इसे देखने के लिए एमुलेटर / फोन से डेटाबेस को कॉपी करना होगा। ADB का उपयोग करके किया जा सकता है:

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

वह कमांड उपयोग करके बनाई गई सभी Realm फ़ाइलों को खींच लेगा Realm.getInstance(new RealmConfiguration.Builder().build())। डिफ़ॉल्ट डेटाबेस कहा जाता है default.realm

ध्यान दें कि यह केवल एक एमुलेटर पर काम करेगा या यदि डिवाइस निहित है।


25
आप अपने ऐप से सटीक रास्ता भी लॉग कर सकते हैं: Log.d ("", "path:" + realm.getPath ());
bmunk

39
तो Mac के लिए Realm Browser बेकार है। एमुलेटर का उपयोग कौन करता है
Jemshit Iskenderov

10
गैर-रूट किए गए उपकरणों के लिए यह स्क्रिप्ट काम करता है: gist.github.com/jk2K/a66ed67b252b880824b32dd4952d1b39
jmartinalonso

3
अगर आपको फ़ाइल की तरह त्रुटि मिलती है, तो वास्तविक फ़ाइल खींचने से पहले पहले adb root कमांड निष्पादित न करें।
रैंडी

यह एडीबी रूट का उपयोग करने के बाद काम करता है, लेकिन कोई फर्क नहीं पड़ता कि मैं क्या करता हूं, दायरे फ़ाइल का उपयोग करते समय यह एन्क्रिप्टेड है। हां, मैंने भ्रष्टाचार और इस तरह के बारे में पढ़ा है, लेकिन मैं कोशिश करता हूं कि कुछ भी काम नहीं कर रहा है। क्या दायरे में कुछ बदला?
माइक एक्सल

104

अब आप फेसबुक द्वारा विकसित स्टेथो का उपयोग करके क्रोम ब्राउजर पर रियल डीबी देख सकते हैं । डिफ़ॉल्ट रूप से, स्टेथो स्क्लाइट, नेटवर्क, साझाकरणों को देखने की अनुमति देता है, लेकिन यहां अतिरिक्त प्लगइन के साथ-साथ दायरे को भी देखने की अनुमति देता है।

Applicationउपरोक्त पुस्तकालयों के साथ अपनी कक्षा को कॉन्फ़िगर करने के बाद , जबकि ऐप चल रहा है और जुड़ा हुआ है, क्रोम ब्राउज़र खोलें और chrome://inspectदेखने के लिए नेविगेट करें


यहाँ छवि विवरण दर्ज करें

फिर Resources->Web Sql->default.realm


यहाँ छवि विवरण दर्ज करें


2
हल करने में विफल: com.uphyca: stetho_realm: 0.8.0 क्या कोई मेरी मदद कर सकता है? मुझे खेद है, मैं एक मैक उपयोगकर्ता नहीं हूं, इसलिए ऐसा लग रहा है कि मैं अपने डेटाबेस फ़ाइल को ब्राउज़ कर सकता हूं।
सावधान 7

4
क्या आपने url https://github.com/uPhyca/stetho-realm/raw/master/maven-repoको यहाँ दिखाया गया है जैसे github.com/uPhyca/stetho-realm
Jemshit Iskenderov

2
मेरी गलती है, बहुत-बहुत धन्यवाद! मुझे यह याद है। अब यह काम करना चाहिए!
सावधान j जे

1
मैं कुछ अन्य तालिका पर क्लिक करके तालिका "ए" के परिवर्तन को देखता हूं, और फिर तालिका "ए" को फिर से @AlexKost
Jemshit Iskenderov

1
इस पोस्ट को देखें यदि किसी के पास फ़ील्ड्स देखने के साथ कोई समस्या है: github.com/uPhyca/stetho-realm/issues/45 .... मैं अपने फ़ील्ड देख रहा हूं, लेकिन कोई डेटा नहीं .... hmmm
Mike6679

56

आप ADB शेल और रन-ऐस कमांड का उपयोग करके अपनी फाइल को किसी भी गैर-निहित डिवाइस से खींच सकते हैं।

आप अपने ऐप के निजी स्टोरेज से अपने डेटाबेस को खींचने के लिए इन कमांड्स का उपयोग कर सकते हैं, जो कि files_database_file_name नामक एक डेटाबेस फाइल में स्थित है:

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
माना। चूंकि हम एप्लिकेशन को डीबग करने योग्य सेट कर सकते हैं, हम फ़ाइल को रूट के बिना इसके साथ खींच सकते हैं।
जोशुआट्री

क्या गैर-डीबग करने योग्य APK से डेटाबेस खींचने का कोई अन्य तरीका है?
JEGADEESAN S

यदि यह संभव होगा, तो पूरा एंड्रॉइड ओएस पूरी तरह से असुरक्षित होगा, एक मौका है कि यह केवल रूट किए गए उपकरणों पर ही संभव हो सकता है, लेकिन मैंने कभी ऐसा नहीं किया था
21

यह सैमसंग उपकरणों पर उनके छोटी गाड़ी चलाने के कार्यान्वयन के कारण काम नहीं कर सकता है।
स्कोर्पेन

तो, हम इसका उपयोग अपने संपादित दायरे को वापस अपनी जगह पर आयात करने के लिए कर सकते हैं? adb exec-out run-as package.name cat files/your_database_file_name < your_database_file_name
Ender

52

यदि आप हर बार adb के साथ realm डेटाबेस फ़ाइल प्राप्त करने के लिए आलसी हैं, तो आप अपने Android कोड में एक निर्यात फ़ंक्शन जोड़ सकते हैं, जो आपको लगाव के रूप में realm डेटाबेस फ़ाइल के साथ एक ईमेल भेजते हैं।

यहाँ एक उदाहरण है:

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

इस उपयोगकर्ता की अनुमति को अपने Android मैनिफ़ेस्ट फ़ाइल में जोड़ना न भूलें:

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

3
यह विशेष रूप से अच्छा है यदि आप Pushbullet का उपयोग करते हैं । तब आप अपने क्रोम ब्राउज़र पर एक संदेश भेज सकते हैं और यह फ़ाइल डाउनलोड करेगा। फ़ाइल तब Realm Browser
ymerdrengene

1
एंड्रॉइड 8.0 पर क्रैशिंग
ईजीएचडीके

42

Android के लिए (अपने डिवाइस को रूट करने की आवश्यकता नहीं है)

अपने डिवाइस पर किसी भी Realm डेटाबेस की एक प्रतिलिपि प्राप्त करने के लिए, Android स्टूडियो में डिवाइस फ़ाइल एक्सप्लोरर पर जाएं।

पर नेविगेट करें /data/data/your.package.name/files/

वहां आपको अपनी * .realm फाइलें मिलेंगी। राइट क्लिक करें, फिर Save As । उन्हें सहेजने से पहले सिंक्रनाइज़ करना सुनिश्चित करें।

* .Realm फ़ाइलों को देखने के लिए Realm Browser या इनमें से किसी का उपयोग करें :

यहां छवि विवरण दर्ज करें


2
इस तरह के एक सरल समाधान, यह अब जवाब होना चाहिए
स्टीवन इलियट

पूर्ण रूप से। यह रास्ता है। An
नोलन एमी

सुनिश्चित करें कि आपका ऐप डेटा देखने के लिए डीबग करने योग्य असत्य पर सेट है।
अमन वर्मा

डेवलपर विकल्पों में @AmanVerma यह USB डीबगिंग है। USB डिबगिंग को डिवाइस फ़ाइल एक्सप्लोरर
krhitesh

लिनक्स उपयोगकर्ता Realm.io/products/realm-studio का उपयोग करके दायरे को डाउनलोड कर सकते हैं और वहां से
वास्तविक

19

वर्कअराउंड है। आप डिवाइस मॉनीटर से फाइल को सीधे एक्सेस कर सकते हैं। आप इस निर्देशिका तक तभी पहुँच सकते हैं जब आप किसी एमुलेटर या रूटेड डिवाइस का उपयोग कर रहे हों।

Android स्टूडियो में:

चुनते हैं

मेनू उपकरणएंड्रॉइडएंड्रॉइड डिवाइस मॉनिटरफ़ाइल एक्सप्लोररडेटाडेटा → (आपका पैकेज नाम) → फाइलें → * db.real

इस फ़ाइल को डिवाइस से खींच लें:

यहां छवि विवरण दर्ज करें

एंड्रॉइड स्टूडियो 3 कैनरी 1 से, डिवाइस फ़ाइल एक्सप्लोरर पेश किया गया है। यहां आपको रियलम फाइल देखने की जरूरत है। फिर, (अपने पैकेज का चयन करें) → दायरे फ़ाइल का चयन करें → राइट क्लिक करें और सहेजें।

यहां छवि विवरण दर्ज करें

और फाइल को Realm Browser में खोलें। अब आप अपना डेटा देख सकते हैं।


धन्यवाद। हालाँकि यह असली डिवाइस के साथ काम नहीं करता है। यह केवल एमुलेटर के साथ काम करता है
pratham kesarkar

1
@prathamkesarkar, यही कारण है कि मैंने एमुलेटर या रूटेड डिवाइस लिखा है क्योंकि आप एक सामान्य डिवाइस में इन फ़ोल्डरों तक पहुंच प्राप्त नहीं कर सकते हैं।
अवेक

14

आप दायरे फ़ाइल को सीधे एक्सेस कर सकते हैं। यहाँ समाधान है जो मैंने उपयोग किया है।

सबसे पहले आप '/ data / data / packagename / files' में स्थित Realm फाइल को 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();
}

दूसरा, उस फ़ाइल को इस तरह खींचने के लिए ADB टूल का उपयोग करें:

$ adb पुल / sdcard/default.realm

अब आप फ़ाइल को Realm Browser में खोल सकते हैं।


6

यहाँ एक समाधान है जिसे आपके फोन को रूट करने की आवश्यकता नहीं है, जो कि शेल के run-asअंदर मौजूद कमांड का उपयोग करके है adb। केवल पूर्व शर्त यह है कि आपके पास लक्ष्य फोन पर इंस्टॉल किए गए अपने ऐप का डिबग बिल्ड होना चाहिए।

$ 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

आपके पास अपने स्थानीय निर्देशिका के अंदर किसी भी फोन से DB की एक प्रति होगी, जिसे आप बाद में Realm Browser पर लोड कर सकते हैं।


1
mac adb default path ... / लाइब्रेरी / एंड्रॉइड / sdk / प्लेटफ़ॉर्म-टूल्स
फ्रांसिस्को कास्त्रो

3

यदि आप एमुलेटर का उपयोग कर रहे हैं तो आप इसे सीधे एक्सेस कर सकते हैं।

पहले उस पथ को लॉग इन करें जहां फ़ाइल एमुलेटर के रूप में एमुलेटर में है:

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

दूसरा इसे खोजें और फ़ाइल पर राइट क्लिक करें और "इस रूप में सहेजें" चुनें, डायलॉग पर वह रूट दिखाई देगा जहां फ़ाइल आपके सिस्टम में है।

यहाँ छवि विवरण दर्ज करें आप मार्ग को इस रूप में सहेजें संवाद से कॉपी कर सकते हैं

और फिर, बस दायरे स्टूडियो के "ओपन लोकल फाइल" डायलॉग पर रूट पेस्ट करें।

(मैंने इसे केवल विंडोज में परीक्षण किया है)


1
यह सबसे उपयोगी उत्तर है, धन्यवाद! MacOS के लिए पथ नहीं दिखाता है, लेकिन फ़ाइल का पता लगाना अभी भी आसान है।
मारिया

1

यहाँ मेरी रेडी-टू-यूज़ शेल स्क्रिप्ट है। बस पैकेज का नाम और अपने अदब के रास्तों को बदल दें तो स्क्रिप्ट आवश्यक हो जाएगी।

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

इस ब्लॉग पोस्ट पर अधिक जानकारी: http://medyo.github.io/2016/browse-populate-and-export-realm-database-on-android/


1

इसे सरल रखना:

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

स्पष्टीकरण:

  1. अपने adbइंस्टॉल का पथ ढूंढें । यदि आप Android Studio का उपयोग कर रहे हैं, तो फ़ाइल> प्रोजेक्ट संरचना> SDK स्थान> Android SDK स्थान देखें और platform-toolsउस पथ पर जाएँ।
  2. अपने ऐप के run-asतर्क के लिए पूरी तरह से योग्य नाम का उपयोग करें
  3. तय करें कि आप कहाँ तक के दायरे को कॉपी करना चाहते हैं

NB: फ़ाइल को default.realm कहा जाता है क्योंकि मैंने इसे कॉन्फ़िगर करते समय इसका नाम नहीं बदला है - आपका अलग हो सकता है।


1

आपके पास अपने Android दायरे की फाइलें देखने के लिए कुछ विकल्प हैं:

  1. @Christian Melchior ने कहा कि आप अपने Realm डेटाबेस को डिवाइस से खींच सकते हैं और OSX Realm Browser का उपयोग करके इसे अपने मैक पर खोल सकते हैं

  2. आप थर्ड पार्टी एंड्रॉइड रियलम ब्राउजर I का उपयोग कर सकते हैं , एंड्रॉइड डेवलपमेंट को रियलम के साथ थोड़ा आसान बना सकते हैं। ऐप आपको आपके डिवाइस पर सभी दायरे की फाइलें दिखाएगा, और आप अपने ऐप की जांच करते समय अपनी सभी रियलमी फाइलों को देख सकते हैं।

  3. आप Chrome ब्राउज़र स्टेथो पूर्ण विवरण का उपयोग कर सकते हैं कि सेठो का उपयोग कैसे किया जाए @Jemshit Iskendero उत्तर।


0

यहाँ मेरे जैसे आलसी लोगों के लिए एक खोल है :)

.realmफ़ाइल में संग्रहीत किया जाएगा tmpRealm/फ़ोल्डर के पास .shफ़ाइल।

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

या यदि आप tmpRealm/एसडी कार्ड पर रहना पसंद करते हैं :

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

संदर्भ:

  1. https://stackoverflow.com/a/28486297/2603230
  2. https://android.stackexchange.com/a/129665/179720
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.