Na niezrootowanym urządzeniu z Androidem mogę przejść do folderu danych zawierającego bazę danych za pomocą run-as
polecenia z nazwą mojego pakietu. Większość typów plików zadowala mnie po prostu przeglądaniem, ale z bazą danych chciałbym pobrać ją z urządzenia z systemem Android.
Czy istnieje polecenie download
copy
lub move
z tej części powłoki adb? Chciałbym pobrać plik bazy danych i obejrzeć jej zawartość w przeglądarce bazy danych.
Jedna odpowiedź polega na przekształceniu całego pakietu aplikacji w skompresowane archiwum, ale nie ma dalszej odpowiedzi na temat tego, jak wyodrębnić to archiwum po wykonaniu tej czynności i przeniesieniu go na maszynę, pozostawiając mnie bardzo bocznym, gdy może być bardziej bezpośrednie rozwiązanie na początek
Odpowiedzi:
Konstrukcja
user
systemu Android (czyli to, co masz w telefonie, dopóki nie odblokujesz bootloadera i nie sflashujesz telefonu za pomocą oprogramowaniauserdebug
lubeng
oprogramowania) ogranicza dostęp do pamięci wewnętrznej - każda aplikacja ma dostęp tylko do własnych plików. Na szczęście dla programistów nie chcąc wykorzenić swoje telefony Google dostarcza sposób dostępu do pamięci wewnętrznej z debuggable wersje swoich pakietów wykorzystującychrun-as
polecenia.Aby pobrać
/data/data/debuggable.app.package.name/databases/file
z urządzenia z systemem Android 5.1+, uruchom następujące polecenie:Aby pobrać wiele plików w jednym folderze
/data/data/debuggable.app.package.name/
na raz - użyjtar
:źródło
run-as
skopiuj plik do miejsca w pamięci zewnętrznej i pobierz plik bazy danych z tego miejsca, zamiast mieszać z uprawnieniami do plików.Zaakceptowana odpowiedź już dla mnie nie działa (zablokowana przez Androida?)
Więc zamiast tego zrobiłem to:
źródło
su
abyrun-as
polecenie działało.Jeśli ktoś szuka ściągnięcia bazy danych z aplikacji debugującej może skorzystać z poniższej procedury:
źródło
Opublikowałem prosty skrypt powłoki do zrzucania baz danych:
Wykonuje dwie różne metody opisane tutaj:
\r
znaki wysyłane przez niektóre urządzenia do powłoki.Z tego miejsca możesz używać różnych aplikacji CLI lub GUI SQLite, takich jak
sqlite3
lubsqlitebrowser
, do przeglądania zawartości bazy danych.źródło
Nie mogłem znaleźć niczego innego do pracy, ale to:
Pierwsze wyjście to wyjście z run-as, drugie wyjście to wyjście z powłoki adb, aby wykonać pociągnięcie.
źródło
W przypadku wersji do debugowania aplikacji bardzo wygodne jest użycie polecenia
adb exec-out run-as xxx.yyy.zzz cat somefile > somefile
do wyodrębnienia pojedynczego pliku. Ale musisz to zrobić wiele razy dla wielu plików. Oto prosty skrypt, którego używam do wyodrębnienia katalogu.Mam nadzieję, że to byłoby pomocne. Ten skrypt jest również dostępny pod adresem gist .
Typowe użycie to
następnie wyodrębni wszystkie pliki z katalogu baz danych aplikacji, czyli
/data/data/com.example.myapplication/databases
do bieżącego katalogu.źródło
O wiele prostsze podejście do pobrania pliku na komputer lokalny:
W powłoce komputera uruchom:
źródło
Możesz użyć tego skryptu do pobrania bazy danych Realm.
źródło
Jeśli ktoś szuka innej odpowiedzi, której można użyć do pobrania,
Database
a takżeShared Preferences
wykonaj następujące czynności:W
build.gradle
pliku swojej aplikacji dodaj wierszteraz, gdy uruchomisz aplikację w
non-release
trybie, aplikacja automatycznie otworzy port 8080 z twojego urządzenia,IP address
upewnij się, że twoje urządzenie jest połączone przezwifi
i żelaptop
współdzielisz tę samą sieć. Teraz po prostu odwiedź adres URLaby obserwować wszystkie dane bazy danych wraz ze wspólnymi preferencjami.
źródło
Oto rozwiązanie, które działa na urządzeniu z systemem Android 5.1. Poniższy przykład dotyczy systemu Windows.
Potrzebujesz seda (lub sed.exe na Windowsie, np. Z cygwin.) (Na Uniksie, po prostu tam będzie;)). Aby usunąć złe znaki „\ r”, przynajmniej w systemie Windows.
Teraz po prostu uruchom następujące polecenie:
Polecenie sed usuwa końcowe znaki / r.
Oczywiście należy zastąpić „com.yourcompany.yourapp” nazwą pakietu aplikacji, a „YourDatabaseName” nazwą bazy danych w aplikacji.
źródło
Plik bazy danych jest pusty podczas używania
adb run-as
. Można to rozwiązać, wywołując metodę close () w instancji RoomDatabase. Wywołaj close (), aby SQLite zapisał swój dziennik na dysku. Utworzyłem ten przycisk, który na żądanie zamyka połączenie z bazą danych:przez GIPHY
Oto jak wywołać close w instancji RoomDatabase.
źródło