Знакомство с поставщиками, встроенными в Android
Android поставляется с набором встроенных поставщиков контента, которые перечислены в Java-пакете android.provider из SDK. Этот список можно увидеть на странице developer.android.com/reference/android/provider/package- summary.html.
В состав поставщиков входят, например, Contacts и MediaStore. Эти базы данных SQLite обычно имеют расширение .db и доступны только из пакета реализации. Любые обращения извне такого пакета должны проходить через интерфейс поставщика контента.
Базы данных в эмуляторе и на доступных устройствах
Поскольку многие поставщики контента в Android используют базы данных SQLite (www.sqlite.org), для просмотра их содержимого можно применять средства как из Android, так и из SQLite.
Многие из таких средств находятся в подкаталоге \каталог-установки-аид.го1д.- sdk\tools, а другие — в\каталог-установки-android-sdk\platform-tools.
На заметку! Информацию о местоположении каталогов tools и открытии окна командной строки в различных операционных системах можно найти в главе 2. В этой главе, как и в большинстве последующих глав, примеры предоставляются в основном для платформы Windows. При чтении этого раздела, где используется ряд средств командной строки, обращайте внимание на имена исполняемых или пакетных файлов, и не задумывайтесь о каталоге, в котором они находятся. Настройка пути для каталогов инструментальных средств на различных платформах описана в главе 2.
В Android имеется утилита командной строки Android Debug Bridge (adb), которая расположена по следующему пути: platform-tools\adb.exe. Это специальная утилита из набора инструментальных средств Android, которая используется большинством других средств для доступа к устройству. Однако для обращений к устройству необходимо, чтобы на нем выполнялся эмулятор. Узнать, на чем вы работаете — на устройстве или на эмуляторе — можно, выполнив в командной строке следующую команду:
adb devices
Если эмулятор не запущен, его можно запустить с помощью такой команды:
emulator.exe @avdname
96 Глава 4. Поставщики контента
В аргументе @avdname необходимо указать имя виртуального устройства Android (Android Virtual Device — AVD). (Виртуальные устройства Android и способы их создания описаны в главе 2.) Чтобы узнать, какие виртуальные устройства имеются в наличии, можно выполнить следующую команду:
android list avd
Эта команда выводит список доступных устройств AVD. Если вы разработали и запускали какие-то Android-приложения с помощью Eclipse Android Development Tool (ADT), то у вас уже сконфигурировано, по крайней мере, одно виртуальное устройство. Так что вышеприведенная команда выведет это устройство.
Эмулятор можно также запустить с помощью подключаемого модуля Eclipse ADT. Это автоматически происходит при указании программы для выполнения или отладки на эмуляторе. Когда эмулятор будет запущен, можно снова просмотреть список запущенных устройств, введя следующую команду:
adb devices
Теперь на выходе будут примерно такие данные:
List of devices attached
emulator-5554 device
Список параметров и команд, которые можно выполнить с помощью adb, можно вывести следующей командой:
adb help
Кроме того, множество параметров времени выполнения для adb можно просмотреть по адресу developer.android.com/guide/developing/tools/adb.html.
Утилита adb позволяет открыть командную оболочку на подключенном устройстве:
adb shell
На заметку! В качестве оболочки используется ash из Unix — правда, с урезанным набором команд. К примеру, в ней имеется команда ls, но нет find, grep и awk.
На заметку! В Android базы данных могут создаваться при первом обращении к ним. Это означает, что такой файл можно и не увидеть, если не выполнялось приложение работы с контактами.
Если бы в оболочку ash была включена команда find, можно было бы найти все .db-файлы. Но при наличии одной лишь команды ls удобный способ решения этой задачи отсутствует. Лучшее, что можно сделать — выдать такую команду:
ls -R /data/data//databases
Эта команда позволяет увидеть, что в дистрибутиве Android имеются следующие базы данных (опять-таки, в зависимости от выпуска этот список может быть несколько другим):
alarms.db
contacts.db
downloads.db
internal.db
settings.db
mmssms.db
telephony.db
Вы, возможно, уже поняли, что таблица sqlite_master является главной таблицей, в которой хранятся сведения о таблицах и представлениях базы данных. Следующая команда выводит оператор create для таблицы people в базе contacts.db:
.schema people
Это один из способов получения имен столбцов для таблицы в SQLite. Кроме того, данная команда выводит и типы столбцов. При работе с поставщиками контента эти типы столбцов нужны для определения методов доступа.
Но это все-таки утомительно — вручную просматривать длинный оператор create, чтобы просто узнать имена и типы столбцов. Существует более простой способ: можно скопировать файл contacts.db на свой локальный компьютер и исследовать его там с помощью нескольких графических инструментов для SQLite версии 3. Извлечь файл contacts.db можно с помощью такой команды:
adb pull /data/data/com.android.providers.contacts/databases/contacts.db C:/somelocaldir/contacts.db
Нам понравилось графическое средство Sqliteman (sqliteman.com/) для баз данных SQLite, которое работает довольно устойчиво. Несколько раз программа завершалась аварийно, но в остальном вполне справлялась с анализом баз данных SQLite в Android.
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.