Jak wyświetlić plik dziedziny w przeglądarce dziedzin?

129

Właśnie odkryłem Realm i chciałem go bardziej szczegółowo zbadać, więc postanowiłem stworzyć przykładową aplikację i mieć z nią bałagan. Na razie w porządku.

Jednak jedna rzecz, której jeszcze nie udało mi się wypracować, to sposób wyświetlania mojej bazy danych w przeglądarce dziedzin. Jak można to zrobić?

Andy Joyce
źródło
CHCESZ ŁATWY SPOSÓB? Pomiń rejestrowanie ścieżek, polecenia adb i ból głowy. @devsmash ma odpowiedź: stackoverflow.com/a/49705298/483520
Nolan Amy

Odpowiedzi:

133

Obecnie przeglądarka Realm nie obsługuje dostępu do baz danych bezpośrednio na urządzeniu, więc aby ją wyświetlić, musisz skopiować bazę danych z emulatora / telefonu. Można to zrobić za pomocą ADB:

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

To polecenie ściągnie wszystkie pliki Realm utworzone za pomocą Realm.getInstance(new RealmConfiguration.Builder().build()). Nazwa domyślnej bazy danych default.realm.

Zwróć uwagę, że będzie to działać tylko na emulatorze lub jeśli urządzenie jest zrootowane.

Christian Melchior
źródło
25
Możesz również zarejestrować dokładną ścieżkę z aplikacji za pomocą: Log.d ("", "path:" + realm.getPath ());
bmunk
39
Więc Realm Browser na Maca jest bezużyteczny. Kto używa emulatora
Jemshit Iskenderov
10
W przypadku urządzeń niezrootowanych
jmartinalonso
3
Jeśli pojawi się błąd typu file not found, wykonaj najpierw polecenie adb root przed ściągnięciem pliku dziedziny.
randy
Działa to po użyciu roota adb, ale bez względu na to, co zrobię, plik realm mówi, że jest zaszyfrowany podczas korzystania z przeglądarki realm. Tak, czytałem o korupcji i takich, ale nic, co próbuję, w ogóle nie działa. Czy coś się zmieniło w rzeczywistości?
Mike Axle
104

Teraz możesz przeglądać Realm DB w przeglądarce Chrome za pomocą Stetho , opracowanego przez Facebooka. Domyślnie Stetho pozwala na przeglądanie Sqlite, sieci, wspólnych preferencji, ale z dodatkową wtyczką pozwala również na przeglądanie Realm.

Po skonfigurowaniu Applicationklasy z powyższymi bibliotekami, gdy aplikacja jest uruchomiona i połączona, otwórz przeglądarkę Chrome i przejdź, chrome://inspectaby zobaczyć


wprowadź opis obrazu tutaj

Następnie Resources->Web Sql->default.realm


wprowadź opis obrazu tutaj

Jemshit Iskenderov
źródło
2
Nie udało się rozwiązać: com.uphyca: stetho_realm: 0.8.0 Czy ktoś może mi w tym pomóc? Przepraszam, nie jestem użytkownikiem Maca, więc wygląda na to, że tylko w ten sposób mogę przeglądać plik mojej bazy danych.
uwaga 7j
4
Czy dodałeś adres URL, https://github.com/uPhyca/stetho-realm/raw/master/maven-repojak pokazano tutaj github.com/uPhyca/stetho-realm
Jemshit Iskenderov
2
Moja wina, bardzo dziękuję! Brakowało mi tego. Teraz działa tak, jak powinno!
uwaga 7j
1
Obserwuję zmiany tabeli „A”, klikając inny stół, a następnie ponownie klikając tabelę „A” @AlexKost
Jemshit Iskenderov
1
zobacz ten post, jeśli ktoś ma problem z wyświetlaniem pól: github.com/uPhyca/stetho-realm/issues/45 .... Widzę moje pola, ale nie ma danych .... hmmm
Mike6679
56

Możesz także pobrać plik z dowolnego niezrootowanego urządzenia za pomocą powłoki ADB i polecenia uruchom jako.

Możesz użyć tych poleceń, aby pobrać z prywatnego magazynu aplikacji bazę danych o nazwie nazwa_pliku_bazy_danych znajdującą się w folderze plików:

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"
Apperside
źródło
3
Zgoda. Ponieważ możemy ustawić aplikację na debugowalną, możemy wyciągnąć plik z tym bez rootowania.
JoshuaTree
czy jest jakiś inny sposób na ściągnięcie bazy danych z aplikacji, której nie można debugować?
JEGADEESAN S
gdyby to było możliwe, cały system operacyjny Android byłby całkowicie niebezpieczny, Jest szansa, że ​​byłoby to możliwe tylko na
zrootowanych
Może to nie działać na urządzeniach Samsung ze względu na ich błędne implementacje.
SkorpEN
Czy możemy użyć tego do zaimportowania naszego edytowanego królestwa z powrotem na swoje miejsce? adb exec-out run-as package.name cat files/your_database_file_name < your_database_file_name
Ender
52

Jeśli jesteś leniwy, aby pobrać plik bazy danych dziedziny za każdym razem za pomocą adb, możesz dodać funkcję eksportu do kodu Androida, która wyśle ​​wiadomość e-mail z plikiem bazy danych dziedziny jako załącznikiem.

Oto przykład:

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

Nie zapomnij dodać tego uprawnienia użytkownika do pliku manifestu Androida:

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
ruclip
źródło
3
Jest to szczególnie dobre, jeśli używasz Pushbullet . Następnie możesz wysłać wiadomość do przeglądarki Chrome, a plik zostanie pobrany. Plik można następnie otworzyć w przeglądarce Realm Browser
ymerdrengene
1
Awaria
43

Na Androida (nie ma potrzeby rootowania urządzenia)

Aby uzyskać kopię dowolnej bazy danych Realm na swoim urządzeniu, przejdź do Eksploratora plików urządzeń w Android Studio.

Przejdź do /data/data/your.package.name/files/.

Tam znajdziesz swoje pliki * .realm. Kliknij prawym przyciskiem, a następnie Zapisz jako . Pamiętaj, aby zsynchronizować je przed ich zapisaniem.

Aby wyświetlić pliki * .realm, użyj przeglądarki Realm lub dowolnej z nich :

Tutaj wprowadź opis obrazu

krhitesh
źródło
2
Takie proste rozwiązanie powinno być teraz odpowiedzią
Steven Elliott
Absolutnie. To jest sposób. 🙏
Nolan Amy
Upewnij się, że Twoja aplikacja jest ustawiona na debugowalną wartość false, aby wyświetlić dane.
Aman Verma
@AmanVerma To debugowanie USB w opcjach programisty. Aby można było korzystać z Eksploratora plików urządzeń, należy włączyć debugowanie USB
krhitesh
Użytkownicy Linuksa mogą pobrać realm studio za pomocą realm.io/products/realm-studio i stamtąd otworzyć plik realm
B.shruti
19

Istnieje obejście. Możesz uzyskać bezpośredni dostęp do pliku z monitora urządzenia. Dostęp do tego katalogu można uzyskać tylko wtedy, gdy używasz emulatora lub urządzenia zrootowanego.

W Android Studio:

Wybierz

Menu NarzędziaAndroidMonitor urządzeń AndroidEksplorator plikówdanedane → (Nazwa Twojego pakietu) → pliki → * db.realm

Pobierz ten plik z urządzenia:

Tutaj wprowadź opis obrazu

W Android Studio 3 canary 1 wprowadzono Eksplorator plików urządzeń. Musisz tu zajrzeć do pliku dziedziny. Następnie (wybierz swój pakiet) → wybierz plik dziedziny → Kliknij prawym przyciskiem myszy i zapisz.

Tutaj wprowadź opis obrazu

I otwórz plik w przeglądarce Realm. Możesz teraz zobaczyć swoje dane.

Aveek
źródło
Dzięki. jednak nie działa z prawdziwym urządzeniem, działa tylko z emulatorem
pratham kesarkar
1
@prathamkesarkar, dlatego napisałem emulator lub urządzenie zrootowane, ponieważ nie możesz uzyskać dostępu do tych folderów na normalnym urządzeniu.
Aveek
14

Możesz uzyskać bezpośredni dostęp do pliku dziedziny. Oto rozwiązanie, którego użyłem.

Najpierw możesz skopiować plik dziedziny, który znajduje się w '/ data / data / nazwa_pakietu / pliki' do 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();
}

Po drugie, użyj narzędzia ADB, aby wyciągnąć ten plik w następujący sposób:

$ adb pull /sdcard/default.realm.

Teraz możesz otworzyć plik w przeglądarce dziedzin.

Rooney
źródło
6

Oto rozwiązanie, które nie wymaga zrootowania telefonu, wykorzystując run-aspolecenie obecne w adbpowłoce. Jedynym warunkiem wstępnym jest to, że na telefonie docelowym musi być zainstalowana kompilacja debugowania aplikacji.

$ 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ędziesz mieć kopię bazy danych z dowolnego telefonu w katalogu lokalnym, którą możesz następnie załadować do przeglądarki Realm.

Pedro Alvarez-Tabio
źródło
1
mac adb default path ... / Library / Android / sdk / platform-tools
Francisco Castro
3

Możesz teraz uzyskać do niego bezpośredni dostęp, jeśli używasz emulatora.

Najpierw zapisz ścieżkę do miejsca, w którym plik znajduje się w emulatorze, jak mówi @bmunk:

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

Po drugie Przeszukaj go i kliknij prawym przyciskiem myszy plik i wybierz „Zapisz jako”, w oknie dialogowym pojawi się trasa, gdzie plik naprawdę znajduje się w twoim systemie.

wprowadź opis obrazu tutaj Możesz skopiować trasę z okna dialogowego Zapisz jako

Następnie po prostu wklej trasę w oknie dialogowym „Otwórz plik lokalny” w Realm Studio.

(Przetestowałem to tylko w systemie Windows)

Brugui
źródło
1
To najbardziej przydatna odpowiedź, dziękuję! Nie pokazuje ścieżki dla systemu macOS, ale nadal łatwo jest zlokalizować plik.
Maria
1

Oto mój gotowy do użycia skrypt powłoki. Po prostu zmień nazwę pakietu i ścieżki adb, a skrypt wykona konieczne.

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

Więcej szczegółów na ten blog: http://medyo.github.io/2016/browse-populate-and-export-realm-database-on-android/

Mehdi Sakout
źródło
1

Upraszczając:

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

Wyjaśnienie:

  1. Znajdź ścieżkę do swojej adbinstalacji. Jeśli korzystasz z Android Studio, spójrz na Plik> Struktura projektu> Lokalizacja SDK> Lokalizacja zestawu Android SDK i dołącz platform-toolsdo tej ścieżki.
  2. Użyj w pełni kwalifikowanej nazwy aplikacji jako run-asargumentu
  3. Zdecyduj, gdzie chcesz skopiować plik dziedziny

NB: Plik nazywa się default.realm, ponieważ nie zmieniłem jego nazwy podczas konfigurowania - Twoja może być inna.

Inti
źródło
1

Masz kilka opcji przeglądania plików dziedzin Androida:

  1. Tak jak @Christian Melchior powiedział, że możesz pobrać bazę danych królestwa z urządzenia i otworzyć ją na komputerze Mac za pomocą przeglądarki OSX Realm Browser

  2. Możesz użyć utworzonej przeze mnie przeglądarki Android Realm innej firmy , aby nieco ułatwić programowanie Androida w dziedzinie. Aplikacja pokaże Ci wszystkie pliki dziedzin na Twoim urządzeniu i podczas testowania aplikacji możesz przeglądać wszystkie swoje pliki dziedzin w czasie rzeczywistym.

  3. Możesz skorzystać z przeglądarki Chrome Stetho. Pełny opis korzystania z Setho zapewnia odpowiedź @Jemshit Iskendero.

SocialError
źródło
0

Oto muszla dla leniwych ludzi takich jak ja :)

.realmPlik będzie przechowywany wewnątrz tmpRealm/folderu obok .shpliku.

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

Lub jeśli wolisz tmpRealm/mieć na karcie 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" ./

Odniesienie:

  1. https://stackoverflow.com/a/28486297/2603230
  2. https://android.stackexchange.com/a/129665/179720
He Yifei 何 一 非
źródło
0

Od ponad dwóch lat Realm Browser jest dostępna dla każdego systemu operacyjnego (Mac, Linux, Windows).

https://docs.realm.io/sync/realm-studio

Działa prosto do przodu.

kuzdu
źródło