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ć?
Odpowiedzi:
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 danychdefault.realm
.Zwróć uwagę, że będzie to działać tylko na emulatorze lub jeśli urządzenie jest zrootowane.
źródło
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
Application
klasy z powyższymi bibliotekami, gdy aplikacja jest uruchomiona i połączona, otwórz przeglądarkę Chrome i przejdź,chrome://inspect
aby zobaczyćNastępnie
Resources->Web Sql->default.realm
źródło
https://github.com/uPhyca/stetho-realm/raw/master/maven-repo
jak pokazano tutaj github.com/uPhyca/stetho-realmMoż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"
źródło
adb exec-out run-as package.name cat files/your_database_file_name < your_database_file_name
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" />
źródło
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 :
źródło
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ędzia → Android → Monitor urządzeń Android → Eksplorator plików → dane → dane → (Nazwa Twojego pakietu) → pliki → * db.realm
Pobierz ten plik z urządzenia:
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.
I otwórz plik w przeglądarce Realm. Możesz teraz zobaczyć swoje dane.
źródło
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:
Teraz możesz otworzyć plik w przeglądarce dziedzin.
źródło
Oto rozwiązanie, które nie wymaga zrootowania telefonu, wykorzystując
run-as
polecenie obecne wadb
powł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.
źródło
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.
Następnie po prostu wklej trasę w oknie dialogowym „Otwórz plik lokalny” w Realm Studio.
(Przetestowałem to tylko w systemie Windows)
źródło
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/
źródło
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:
adb
instalacji. Jeśli korzystasz z Android Studio, spójrz na Plik> Struktura projektu> Lokalizacja SDK> Lokalizacja zestawu Android SDK i dołączplatform-tools
do tej ścieżki.run-as
argumentuNB: Plik nazywa się default.realm, ponieważ nie zmieniłem jego nazwy podczas konfigurowania - Twoja może być inna.
źródło
Masz kilka opcji przeglądania plików dziedzin Androida:
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
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.
Możesz skorzystać z przeglądarki Chrome Stetho. Pełny opis korzystania z Setho zapewnia odpowiedź @Jemshit Iskendero.
źródło
Oto muszla dla leniwych ludzi takich jak ja :)
.realm
Plik będzie przechowywany wewnątrztmpRealm/
folderu obok.sh
pliku.#!/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:
źródło
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.
źródło