Jak sprawdzić bazę danych na nie zakorzenione urządzenie z Androidem
Rozwijam aplikację, w której używam bazy danych sqllite3 do przechowywania wartości. Mam Nexus S I Nexus 7 oba są nierooted urządzeń. Jak Mogę uzyskać bazę danych dla mojej aplikacji w celu debugowania.
Próbowałem (1) próbowałem wszystkich podejść wymienionych tutaj
adb shell
run-as app.package.name \
cp /data/data/package.name/databases/application.sqlite /sdcard/
exit
adb pull /sdcard/application.sqlite ~/
Tu jest napisane cp not found..
(2) http://developer.android.com/tools/help/adb.html#sqlite
adb -s emulator-5554 shell
# sqlite3 /data/data/com.example.google.rss.rssexample/databases/rssitems.db
SQLite version 3.3.12
Enter ".help" for instructions
.... enter commands, then quit...
sqlite> .exit
11 answers
Możesz zapisać swoją bazę danych do pamięci zewnętrznej za pomocą:
private void writeToSD() throws IOException {
File sd = Environment.getExternalStorageDirectory();
if (sd.canWrite()) {
String currentDBPath = DB_NAME;
String backupDBPath = "backupname.db";
File currentDB = new File(DB_PATH, currentDBPath);
File backupDB = new File(sd, backupDBPath);
if (currentDB.exists()) {
FileChannel src = new FileInputStream(currentDB).getChannel();
FileChannel dst = new FileOutputStream(backupDB).getChannel();
dst.transferFrom(src, 0, src.size());
src.close();
dst.close();
}
}
}
Gdzie DB_NAME
jest nazwą mojej bazy danych, a DB_PATH
jest zdefiniowane w następujący sposób:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
DB_PATH = context.getFilesDir().getAbsolutePath().replace("files", "databases") + File.separator;
}
else {
DB_PATH = context.getFilesDir().getPath() + context.getPackageName() + "/databases/";
}
I dodaj następujące pozwolenie (dzięki @Sathesh za zwrócenie na to uwagi):
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Wywołuję tę metodę za każdym razem, gdy mam zapis bazy danych, aby mój najbardziej aktualny plik bazy danych był w pamięci zewnętrznej i mogę go przeglądać i debugować stamtąd.
Następnie można użyć X-Plore aplikacji aby przeglądaj bazę danych z pamięci zewnętrznej bezpośrednio na urządzeniu z systemem Android.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-30 13:09:44
Poniższe rozwiązanie działa tylko dla aplikacji, które można debugować. Może to nie działać dobrze na wszystkich urządzeniach, ponieważ polecenie run-as nie działa na niektórych urządzeniach, szczególnie z Jelly Bean.
-
Utwórz *.plik bat i skopiuj następujące Skrypty
Adb shell run-as [pakiet] chmod 777 / data / data/[pakiet] / bazy danych /
Adb shell run-as [package] chmod 777/data/data/[package]/databases / [db_file_name]
Adb shell run-as [pakiet] cp / data/data/[pakiet]/bazy danych /[db_file_name]/sdcard /
ADB pull / sdcard/[db_file_name]
-
Zmień [pakiet] na żądany pakiet aplikacji
-
Zmień [db_file_name] na żądaną nazwę db uruchom plik bat i skopiowana baza danych powinna znajdować się w tym samym folderze co The bat plik
Powyższe rozwiązanie zakłada:
- pracujesz na Windows
- urządzenie jest podłączone i widoczne pod "urządzenia adb"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-28 12:24:14
Jeśli nie znasz ścieżki aplikacji, możesz użyć tego:
public void copyAppDbToExternalStorage() throws IOException {
File sd = Environment.getExternalStorageDirectory();
File currentDB = getApplicationContext().getDatabasePath("databaseName"); //databaseName=your current application database name, for example "my_data.db"
if (sd.canWrite()) {
File backupDB = new File(sd, "toDatabaseName"); // for example "my_data_backup.db"
if (currentDB.exists()) {
FileChannel src = new FileInputStream(currentDB).getChannel();
FileChannel dst = new FileOutputStream(backupDB).getChannel();
dst.transferFrom(src, 0, src.size());
src.close();
dst.close();
}
}
}
Lub jeśli potrzebujesz skopiować bazę danych do publicznego folderu "Pobierz", możesz użyć tego:
public void copyAppDbToDownloadFolder() throws IOException {
File backupDB = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "toDatabaseName"); // for example "my_data_backup.db"
File currentDB = getApplicationContext().getDatabasePath("databaseName"); //databaseName=your current application database name, for example "my_data.db"
if (currentDB.exists()) {
FileChannel src = new FileInputStream(currentDB).getChannel();
FileChannel dst = new FileOutputStream(backupDB).getChannel();
dst.transferFrom(src, 0, src.size());
src.close();
dst.close();
}
}
To działa idealnie na moim urządzeniu Nexus 4.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-09 15:32:17
Oto bardzo prosta i prosta odpowiedź: (testowane na Android one: unrooted )
adb -d shell
$ run-as my.package.name
$ cp databases/mydatabase.db /sdcard/mydatabase.db
$ exit
$ exit
Teraz przeciągnij bazę danych do domyślnej ścieżki adb
adb -d pull /sdcard/mydatabase.db
Lub na pulpit np.
adb -d pull /sdcard/mydatabase.db C:\Users\user\Desktop
Możesz usunąć kopię poleceniem poniżej:
adb -d shell "rm /sdcard/mydatabase.db"
-d
opcja wybiera domyślne urządzenie, jeśli posiada więcej niż jeden emulator.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-17 15:04:09
Po prostu musiałam zrobić coś takiego i jest na to sposób, chociaż to ból. Musisz zakatalogować plik jako konto użytkownika aplikacji, a następnie skierować go do zapisywalnej lokalizacji. U mnie to działało na moim Nexusie 4 działającym 4.3.3:
adb shell "run-as org.your.application cat /data/data/org.your.application/your-file > /mnt/sdcard/your-file"
adb pull /mnt/sdcard/your-file
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-28 18:21:01
Spróbuj użyć biblioteki stetho opracowanej przez facebook, umożliwia przeglądanie db za pomocą przeglądarki internetowej https://facebook.github.io/stetho/
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-16 12:11:56
adb shell "run-as CHR.Droid chmod 666 /data/data/CHR.Droid/files/CHR.db"
adb shell cp /data/data/CHR.Droid/files/CHR.db /sdcard/
W Xamrinie.forms I had to replace databases to files
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-20 14:54:37
Jeśli po uruchomieniu
adb shell "run-as your.package.name"
Otrzymujesz "run-as: Pakiet "your.package.name' is unknown", następnie spróbuj pobrać bazę danych z emulatora. Zobacz tutaj: https://stackoverflow.com/a/44089632/2914140
W Android Studio 3.0 kliknij Widok > Narzędzia Windows > Eksplorator plików urządzeń. Rozwiń węzły /data/data/[Nazwa pakietu].
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-25 16:47:14
Myślę, że to najprostszy sposób. Dodaj tę zależność do pliku gradle: debugImplementation ' com.amitshekhar.android: debug-db: 1.0.0 '
Po tym, kiedy uruchomisz aplikację w konsoli, zobaczysz komunikat: D / DebugDB: Open http://192.168.1.114:8080 w Twojej przeglądarce
I jest twoja baza danych.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-12-10 15:29:39
Nie możesz uzyskać dostępu do folderu / data na urządzeniu nie zakorzenionym
Nie ma na to sposobu. Android ma świetne mechanizmy bezpieczeństwa. Tylko Twoja aplikacja ma dostęp do własnych plików.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-26 14:09:24
Nie jest to możliwe z telefonu nie zakorzenionego. Nie możesz uzyskać dostępu do katalogu /data, więc nie możesz kopiować bazy danych ani używać aplikacji SQLite jak w (2). Jeśli chcesz debugować, użyj symulatora lub uruchom zapytania w aplikacji, aby sprawdzić bazę danych.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-26 14:09:29