Szukałem wszędzie i nie mogę znaleźć naprawdę dokładnej odpowiedzi ani samouczka, jak, jeśli to możliwe, zrobić to.
czy można w jakikolwiek sposób pobrać bazę danych urządzenia z systemem Android bez konieczności rootowania? Po prostu muszę wyodrębnić te dane w jakikolwiek sposób, aby zebrać je na moim komputerze, więc jak mogę to zrobić? czy muszę przeprogramować aplikację lub jakąkolwiek metodę, o której wiesz, ale pamiętaj bez rootowania urządzenia. dzięki
Odpowiedzi:
Typowym sposobem osiągnięcia tego, czego pragniesz, jest użycie polecenia ściągania ADB.
Innym sposobem, który preferuję w większości przypadków, jest skopiowanie bazy danych kodem na kartę SD:
Nie zapomnij ustawić uprawnień do pisania w SD w swoim manifeście, jak poniżej.
źródło
getPath
metodę.Jeśli na Twoim urządzeniu działa system Android v4 lub nowszy, możesz pobrać dane aplikacji, w tym bazę danych, bez
adb backup
uprawnień roota, używając polecenia, a następnie wyodrębnić plik kopii zapasowej i uzyskać dostęp do bazy danych sqlite.Najpierw wykonaj kopię zapasową danych aplikacji na komputerze za pomocą kabla USB za pomocą następującego polecenia, zastąp
app.package.name
rzeczywistą nazwą pakietu aplikacji.Spowoduje to wyświetlenie monitu o „odblokowanie urządzenia i potwierdzenie operacji tworzenia kopii zapasowej”. Nie podawaj hasła do szyfrowania kopii zapasowej , aby móc je później wyodrębnić. Kliknij przycisk „Utwórz kopię zapasową moich danych” na swoim urządzeniu. Na ekranie zostanie wyświetlona nazwa pakietu, którego kopię zapasową tworzysz, a po pomyślnym zakończeniu zamknie się samoczynnie.
Plik wynikowy
data.ab
w folderze domowym zawiera dane aplikacji w formacie kopii zapasowej systemu Android. Aby go wyodrębnić, użyj następującego polecenia:Jeśli powyższe zakończyło się
openssl:Error: 'zlib' is an invalid command.
błędem, wypróbuj poniższe.Rezultatem jest
apps/app.package.name/
folder zawierający dane aplikacji, w tym bazę danych sqlite.Więcej informacji znajdziesz w oryginalnym poście na blogu .
źródło
openssl:Error: 'zlib' is an invalid command.
, na którą odpowiedziałemdd if=data.ab bs=1 skip=24 | python -c "import zlib,sys;sys.stdout.write(zlib.decompress(sys.stdin.read()))" | tar -xvf -
JEDNAK po tym, jak pokazuje,17+0 records in17+0 records out17 bytes transferred in 0.000064 secs
że nie ma żadnych dowodów na to, że coś zostało zrobione w folderze. Ponieważ ma tylko 17 bajtów, zakładam, że to polecenie również się nie powiodło. Myślę, że to źle, jak nie mogęadb pull
bazy danych z aplikacji do debugowania !!android:allowBackup="false"
openssl
na Mac OS X nie obsługujązlib
polecenia albo, więc ponownie zainstalować jeden z wywaru:brew reinstall openssl
. To nie zastąpi twojego systemu openssl. Dlatego zmodyfikowałem polecenie PATH tylko dla bieżącej sesji:export PATH=/usr/local/opt/openssl/bin:$PATH
po której mogłem pomyślnie wykonać polecenia z tej odpowiedzi.Dla debuggable apps 1 na urządzeniach innych niż zakorzenione , można użyć następującego polecenia:
Przykład:
Ustaw PATH adb dla zmiennych środowiskowych lub użyj polecenia cd w folderze Android SDK platforma-narzędzia.
Przykład:
następnie użyj powyższego polecenia
1 Pamiętaj, że większości aplikacji w Sklepie Play nie można debugować, ponieważ wymaga to ustawienia flagi debugowania w manifeście.
źródło
package.name
na pakiet aplikacji zwracany jest błąd:run-as: Package 'com.my.app' is unknown
Większość odpowiedzi tutaj jest o wiele bardziej skomplikowanych, niż muszą. Jeśli chcesz tylko skopiować bazę danych swojej aplikacji z telefonu na komputer, potrzebujesz tylko tego polecenia:
Wszystko, co musisz wpisać w powyższym poleceniu, to nazwa pakietu Twojej aplikacji, nazwa bazy danych i opcjonalnie do czego / gdzie chcesz skopiować bazę danych.
Pamiętaj, że to konkretne polecenie będzie działać tylko wtedy, gdy masz tylko jedno urządzenie podłączone do komputera. W
-d
oznacza parametr że tylko podłączone urządzenie zostanie ukierunkowane. Ale są inne parametry, których możesz użyć zamiast tego:-e
będzie kierować na jedyny działający emulator-s <serialnumber>
będzie kierować na urządzenie o określonym numerze seryjnym.źródło
adb -d shell "run-as your.package.name cat databases/database_name.db > /mnt/sdcard/database_name.db"
uruchomSSHDroid
FileZilla start i połącz się z telefonem przez protokół SFTP. Ustaw / mnt / sdcard jako domyślny katalog zdalny.adb -d shell "run-as your.package.name ls databases"
) i 2) możesz chcieć uzyskać inne powiązane pliki wraz z bazą danych, w mój przypadek wyodrębnienie plików -smh i -wal było jedynym sposobem na to, aby przeglądarka DB Browser dla SQLite otworzyła bazę danychKorzystając z Android Studio 3.0 lub nowszej wersji, możliwe jest ściągnięcie bazy danych (również preferencji współdzielonych, katalogu pamięci podręcznej i innych), jeśli aplikacja działa w trybie debugowania na urządzeniu nierootowanym.
Aby pobrać bazę danych za pomocą Android Studio, wykonaj następujące kroki.
źródło
źródło
Dla Ubuntu (nie tylko?):
zobacz odpowiedź Sergeisa, ale zamiast openssl użyj zlib-flate:
W przeciwnym razie openssl prawdopodobnie wyrzuci:
ponieważ openssl nie jest skompilowana z obsługą zlib w Ubuntu
źródło
Ponieważ tak naprawdę nic dla mnie nie działa. Tworzę mały skrypt Windows BATCH na podstawie innych połączonych razem odpowiedzi. Mam nadzieję, że to komuś pomoże. Proste użycie: backupDatabase <nazwa_pakietu> <nazwa_aplikacji> [katalog_docelowy]. Wykorzystuje metodę tworzenia kopii zapasowych Sergeia i Android Backup Extractor .
źródło
możesz łatwo wyodrębnić plik sqlite ze swojego urządzenia (root nie jest konieczny)
start adb
cd / sdk / platform-tools ./adb shell
Następnie wpisz następujące polecenie w terminalu
./adb -d shell "run-as com.your_packagename cat /data/data/com.your_packagename/databases/jokhanaNepal> /sdcard/jokhana.sqlite"
Na przykład
./adb -d shell "run-as com.yuvii.app cat /data/data/com.yuvii.app/databases/jokhanaNepal> /sdcard/jokhana.sqlite"
źródło
Jeśli próbujesz to zrobić na Androidzie 6, poproś o pozwolenie i użyj kodu odpowiedzi na to pytanie
Raz jest przyznane
źródło
Alternatywnie możesz skorzystać z mojej biblioteki Ultra Debugger . Pozwala na pobranie bazy danych w postaci pliku lub edycję wartości bezpośrednio w przeglądarce. Bez rootowania, bardzo łatwy w użyciu.
źródło
Na komputerze Mac (bez uprawnień roota)
Skopiuje plik sqlite do folderu narzędzi platformy.
źródło
tak, jeśli aplikacja na Androida tworzy kopię bazy danych, do której każdy ma dostęp.
Android chroni prywatne dane aplikacji, więc nie są one widoczne / dostępne dla innych aplikacji. baza danych to dane prywatne. Twoja aplikacja może oczywiście odczytać plik bazy danych, więc może wykonać kopię pliku do jakiegoś publicznego widocznego pliku.
źródło
Na zrootowanym urządzeniu możesz:
źródło
Na podstawie odpowiedzi udzielonej przez Lama Vinha, oto prosty plik wsadowy, który działa dla mnie na moim Nexusie 7 pierwszej generacji. Prosi użytkownika o wprowadzenie nazwy pakietu, a następnie nazwy bazy danych (bez rozszerzenia .sqlite) i umieszcza ją w c: \ temp. Zakłada się, że zestaw SDK systemu Android jest ustawiony w zmiennych środowiskowych.
źródło
Jeśli korzystasz z Androida 4.0 lub nowszego i korzystasz z komputera Mac , oto skrypt ruby, który zapisze zawartość aplikacji na pulpicie. Sądzę, że to zadziała również w Ubuntu, chociaż nie testowałem tego.
uruchomić -> ruby your_ruby_file_name.rb
Ten skrypt jest tylko „szczęśliwą ścieżką”, więc upewnij się, że twoje urządzenie jest podłączone i że adb zostało dodane do twojego profilu.
źródło
Daję kompletne rozwiązanie do „zapisywania” i „przywracania” bazy danych aplikacji do / z pamięci wewnętrznej (nie do komputera z adb).
Zrobiłem dwie metody, jedną do zapisywania, a drugą do przywracania bazy danych. Użyj tych metod na końcu onCreate () w MainActivity (jednej lub drugiej, jeśli chcesz zapisać lub przywrócić bazę danych).
zapisz bazę danych do pamięci wewnętrznej:
przywróć bazę danych z pamięci wewnętrznej:
źródło
Zawsze lepiej, jeśli wszystko jest zautomatyzowane, dlatego napisałem prosty skrypt w Pythonie do kopiowania pliku db z urządzenia za pomocą ADB. Oszczędza dużo czasu programowania, jeśli robisz to często.
Działa tylko z aplikacjami do debugowania, jeśli urządzenie nie jest zrootowane .
Oto link do istoty.
Uruchom jako:
python copyandroiddbfile.py
źródło
Jeśli chcesz, aby plik bazy danych
Zobacz DDMS> Eksploracja plików
znajdź plik db na podstawie nazwy pakietu
następnie kliknij ściągnij plik z urządzenia (tylko urządzenie zrootowane)
źródło