Як використовувати ADB в Android Studio для перегляду бази даних SQLite


83

Мені потрібно переглянути свій SQLite db, але я не знаю, як це зробити. Я зайшов на http://www.sqlite.org/download.html і завантажив оболонку командного рядка для моєї ОС, але коли я запускаю програму та ввожу, adb ...я отримую помилки.

Примітка: Я використовую Android Studio, тому я припускаю, що мені не потрібно нічого додатково встановлювати, оскільки, нагадаю, Android Studio заявила, що вона має всі необхідні інструменти SDK.

Відповіді:


160

Найпростіший спосіб: підключитися до Sqlite3 через оболонку ADB

Я не знайшов жодного способу зробити це в Android Studio, але я отримую доступ до db за допомогою віддаленої оболонки замість того, щоб кожного разу тягнути файл.

Всю інформацію можна знайти тут: http://developer.android.com/tools/help/sqlite3.html

1- Перейдіть до папки інструментів платформи в командному рядку

2- Введіть команду, adb devicesщоб отримати список своїх пристроїв

C:\Android\adt-bundle-windows-x86_64\sdk\platform-tools>adb devices
List of devices attached
emulator-xxxx   device

3- Підключіть оболонку до пристрою:

C:\Android\adt-bundle-windows-x86_64\sdk\platform-tools>adb -s emulator-xxxx shell

4a - Ви можете обійти цей крок на корінному пристрої

run-as <your-package-name> 

4b - Перейдіть до папки, що містить ваш файл db:

cd data/data/<your-package-name>/databases/

5- запустіть sqlite3 для підключення до вашого db:

sqlite3 <your-db-name>.db

6- запустіть команди sqlite3, які вам подобаються, наприклад:

Select * from table1 where ...;

Примітка: Знайдіть більше команд для запуску нижче.

Таблиця SQLite

Щоб переглянути таблиці в базі даних SQLite, виконайте кілька кроків:

  1. Перелічіть таблиці у вашій базі даних:

    .tables
    
  2. Перелічіть, як виглядає таблиця:

    .schema tablename
    
  3. Роздрукувати всю таблицю:

    SELECT * FROM tablename;
    
  4. Перелічіть усі доступні командні команди SQLite:

    .help
    

1
цей метод вимагає root?
tomislav2012

1
@ tomislav2012 так, оскільки ви заходите в /data/dataкаталог
Dheeraj Bhaskar

1
Команда sqlite3 не розпізнана на моєму HTC One S під управлінням Android 4.1
Олексій

@Alex Я б запропонував знайти sqlite3 та встановити його, якщо це можливо, розробка з ним простіша
Dheeraj Bhaskar,

1
Дякую. Якщо ви хочете перенести файл sqlite на робочий стіл комп’ютера, ви можете спочатку cp /data/data/<your-package-name>/databases/<your-db-name>.db /sdcard. Потім скористайтеся файловим менеджером, як Explorer, щоб надіслати файл на електронну пошту. :)
Чеок Ян Ченг

76

Мені найпростіше використовувати монітор пристроїв Android, щоб отримати файл бази даних та браузер SQLite DataBase для перегляду файлу, використовуючи Android Studio для програмування Android.

1) Запустіть і запустіть додаток бази даних з емулятором Android з Android Studio. (Я додав деякі дані до програми бази даних для перевірки)

2) Запустіть Android Device Monitor. Як бігати ?; Перейти до [your_folder] > sdk >tools. Ви можете побачити monitor.bat у цій папці. shift + right clickвсередині папки та виберіть " Open command window here". Ця дія запустить командний рядок. type monitorта буде запущено Монітор пристроїв Android.

3) Виберіть емулятор, який ви зараз використовуєте. Тоді перейдіть доdata>data>[your_app_name]>databases

4) Клацніть на піктограму (розташовану у верхньому правому куті) (наведіть на неї курсор, і ви побачите "витягнути файл із пристрою") та збережіть де завгодно

5) Запустіть браузер SQLite DataBase. Перетягніть файл, який ви щойно зберегли, у цьому браузері.

6) Перейдіть на Browse Dataвкладку та виберіть таблицю для перегляду.

введіть тут опис зображення введіть тут опис зображення


9
Я думаю, що ви не можете відкрити каталог даних з Device Monitor, принаймні я не можу цього зробити.
Естевекс,

6
Ви не можете відкрити каталог даних на некоренованому пристрої, але ви можете зробити це на емуляторі.
Tad

3
як відкрити дані на некоренованому пристрої?
Суджіт Манджавана

4
Поки працює емулятор, ви можете завантажувати файли з емульованого Android за допомогою adb. Приклад: adb pull /data/data/com.yourpackagename.here/databases/yourdbfile.db
Бейкер

Я думаю, @SujithManjavana говорить про те, щоб просто відкрити базу даних sqlite з браузера DataBase, поки вона знаходилася в шляху емулятора в гостьовій ОС. Не після копіювання назад на хост os.
Прадіп Санджая,

14

Проблема, з якою ви стикаєтесь, є загальною і не пояснюється належним чином у документації. Звичайні пристрої не включають двійковий файл бази даних sqlite3, тому ви отримуєте помилку. Android Emeulator, OSX, Linux (якщо встановлено) та Windows (після встановлення) мають двійковий файл, щоб ви могли відкрити базу даних локально на своїй машині.

Вирішення проблеми полягає у копіюванні бази даних із вашого пристрою на локальну машину. Цього можна досягти за допомогою АБР, але для цього потрібен ряд кроків.

Перед початком роботи вам знадобиться деяка інформація:

  • шлях до SDK (якщо він не включений у ваше середовище ОС)
  • <package name>наприклад, вашcom.example.application
  • a <local path>для розміщення бази даних, наприклад. ~/Desktopабо%userprofile%\Desktop

Далі вам потрібно буде зрозуміти, в якому терміналі кожна команда записується до першого символу в наведених нижче прикладах, не набирається, але дає змогу знати, в якій ми оболонці:

  • > = ви командний рядок ОС
  • $ = Командний рядок командної оболонки ADB
  • ! = Оболонка ADB як командний рядок адміністратора
  • %

Далі введіть наступні команди з терміналу або команди (не вводьте перший символ або текст ())

> adb shell
$ su
! cp /data/data/<package name>/Databases/<database name> /sdcard
! exit
$ exit
> adb pull /sdcard/<database name> <local path>
> sqlite3 <local db path>
% .dump
% .exit  (to exit sqldb)

Це справді навколо способу копіювання бази даних на локальну машину та локального читання бази даних. Існують SO та інші ресурси, що пояснюють, як встановити двійковий файл sqlite3 на ваш пристрій з емулятора, але один раз цей процес працює.

Якщо вам потрібен інтерактивний доступ до бази даних, я б запропонував запустити програму в емуляторі (який уже мав sqlite3) або встановити sqlite на ваші пристрої / шлях xbin .


9
  1. Відкрийте термінал
  2. cd <ANDROID_SDK_PATH>(для мене в Windows cd C:\Users\Willi\AppData\Local\Android\sdk)
  3. cd platform-tools
  4. adb shell (це працює, лише якщо запущений лише один емулятор)
  5. cd data/data
  6. su (отримати суперповноваження користувача)
  7. cd <PACKAGE_NAME>/databases
  8. sqlite3 <DB_NAME>
  9. видавати оператори SQL ( важливо: закінчити їх ;, інакше оператор не видається, і замість цього він переходить до нового рядка.)

Примітка. Використовуйте ls(Linux) або dir(Windows), якщо вам потрібно вказати вміст каталогу.


8

Що він згадує під час введення adb?

step1. >adb shell
step2. >cd data/data
step3. >ls -l|grep "your app package here"
step4. >cd "your app package here"
step5. >sqlite3 xx.db

Ну ... я не знаю, куди вводити adb... Коли я вводжу це в оболонку SQLite3, це дає мені, ...>і він очікує продовження команди. Це в основному чекає ;. Якщо я набираю крапку з комою, я отримую error: near "adb": syntax error... Введення adb shellв командному рядку означає, що adb не є розпізнаною командою ... Чи повинен я додавати adb до своїх файлів шляху?
Теренс Чоу

спочатку: вам потрібно потрапити в оболонку adb (mac або linux: виконати в терміналі; windows: запустити на cmd); потім виконати sqlite3 commond в оболонці adb.
log1000

1
Як виконати команду sqlite3 з оболонки ADB? там сказано: /system/bin/sh: sqlite3: not found... А я вже додав SQLite3 та ADB як змінні шляху ...
Теренс Чоу

? Який пристрій ви використовуєте хочете це дасть НУ підказку stackoverflow.com/questions/3645319 / ...
log1000

5

Ви можете використовувати дуже гарний інструмент, який називається Stetho, додавши це до build.gradleфайлу:

compile 'com.facebook.stetho:stetho:1.4.1'

І ініціалізував його всередині вашого Applicationабо Activity onCreate()методу:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Stetho.initializeWithDefaults(this);
    setContentView(R.layout.activity_main);
}

Тоді ви можете переглянути дані db в chrome на адресу:

chrome://inspect/#devices

Детальніше ви можете прочитати в моєму дописі: Як легко переглядати ваші записи в базі даних


4

Залежно від пристроїв, ви не можете знайти команду sqlite3 в оболонці adb. У цьому випадку ви можете дотримуватися цього:

оболонка adb

$ run-as package.name
$ cd ./databases/
$ ls -l # Знайти поточні дозволи - r = 4, w = 2, x = 1
$ chmod 666 ./dbname.db
$ exit
$ exit
adb pull / data /data/package.name/databases/dbname.db ~ / Desktop /
adb push ~ / Desktop / dbname.db /data/data/package.name/databases/dbname.db
adb shell
$ run-as package.name
$ chmod 660 ./databases/dbname.db # Відновити вихідні дозволи
$ exit
$ exit

для довідки перейдіть на https://stackoverflow.com/a/17177091/3758972 .

Можуть бути випадки, коли після наступної процедури ви отримуєте "віддалений об'єкт не знайдений". Потім змініть дозвіл папки бази даних на 755 в оболонці adb.

$ chmod 755 бази даних /

Але майте на увазі, що це буде працювати лише на версії Android <21.


Спробував це (починаючи з "оболонки adb", потім виконуючи "chmod", потім виконуючи "adb pull" бази даних), але отримуємо "adb: error: не вдалося статизувати віддалений об'єкт '/ path / to / db': Дозвіл відмовлено "помилка. І "chmod 666", здавалося, працював (у будь-якому випадку помилки не було). Раніше мені вдалося витягти файл db за допомогою монітора пристроїв Android, але якщо я спробую зараз, я навіть не можу розгорнути початковий каталог "даних". Я спробував Android Device Monitor з запущеним вікном емулятора і не працює з однаковими результатами. Боже, це дурне.
clamum

Як новий хакер ви можете використовувати бібліотеку стето для всіх цілей моніторингу даних та мережі. github.com/facebook/stetho
Nitesh Verma

Мда, так, мабуть, мені доведеться використовувати Stetho. Я бачив, що це рекомендується раніше, але не розумів, що можу запускати з ним запити SQL, тому він буде працювати для мене. Я більше не використовую браузер Chrome, але якщо його встановлення дозволяє мені перевіряти та запитувати до баз даних Android, тоді я це зроблю. Це не так, як спосіб монітора пристроїв Android був надзвичайно швидким, вам все одно доведеться витягувати db, а потім відкривати його в іншому додатку. Дякую Нітешу.
clamum
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.