Контакты Android хранятся в директории /data/data/com.android.providers.contacts/databases/ в файле contacts.db или на некоторых прошивках contacts2.db.
Данный файл является базой данных sqlite и может быть прочитан с помощью соответсвующего программного обеспечения.
Теперь как я доставал контакты с телефона у которого отказал сенсор. Экспорт контактов никогда не производился, была отключена функция отладки по USB, и пользуясь способом
способом, 7zip не смог распаковать .backup сделанный стандартным рекавери, а adb почему-то не видел требуемые файлы в папке
data.
Находим на 4pda информацию по установке ClockworkMod recovery (CWM)
FAQ по ClockworkMod recovery для вашего девайса и качаем требуемые файлы.
Для этого как правило нам понадобятся:
1. драйвера для подключения девайса к компьютеру
2. recovery.img - образ CWM
3. fastboot или FlashTool - потребуется для прошивки образа CWM в девайс, выбирайте более понятный для вас
4. нужен будет архиватор для распаковки файла резервной копии (я использовал 7zip)
5. и какую-нибудь программку для работы с базами данных (я использовал
sqlitestudio)
теперь переходим к действиям по вытаскиванию нужной инфы:
1. по скачиванию и установке драйверов, образов и программ писать особо не буду большая часть должна быть описана в инструкции к вашему девайсу на 4PDA и делается почти везде одинаково
2. установив CWM пробуем войти в него (обычно для этого требуется зажать кнопку включения и увеличения/уменьшения громкости)
3. там выбираем пункт по созданию бэкапов 'buckup and restore' и делаем его на флэшку 'Buckup' :)
4. скачиваем с флэшки на комп файлик data.ext4.tar, он должен быть в папке clockworkmod/backup (в название так же будет фигурировать дата ее создания)
если в ваш девайс вставить флэшку нет возможности, возможно поможет такой момент:
после установки CWM у меня получилось подключиться через
adb, и чисто теоретически наверно у вас получится скопировать файлы бэкапа на компьютер.
команды которые вам понадобятся
adb devices - подключение
adb shell - запуск удаленной командной строки
ls - получение списка папок и файлов
cd <путь на Android> - переход в папку
adb pull <путь на Android> <путь на PC> - копируем файл с девайса на комп
5. открываем архив и достаем contacts.db или contacts2.db из /data/data/com.android.providers.contacts/databases/
6. запустив программу sqlitestudio, выбираем файлик базы, который мы достали из архива, в диалоговом окне открытия базы ('Базы данных' -> 'Добавить базу данных')
7. дальше вставляем подобный запрос во вкладку SQL-запрос ('Сервис' -> 'Открыть редактор SQL запросов')
SELECT normalized_number, display_name
FROM phone_lookup, raw_contacts
WHERE phone_lookup.raw_contact_id = raw_contacts.contact_id
объясню смысл текущего запроса
создаем табличку с колонками normalized_number, display_name на основе таблиц phone_lookup, raw_contacts
при условии, что данные из таблицы phone_lookup и колонки raw_contact_id = данным из таблицы raw_contacts колонки contact_id
исходя из этого кода могу предположить, что:
есть некие таблицы в которых есть колонки, в каждой из которой хранятся однотипные данные, в нашем случае это номера строк, имя и номер телефона
phone_lookupraw_contact_id | normalized_number1 |+79001111111
2 |+79002222222
raw_contactscontact_id | display_name1 |Вася
2 |Петя
т.е. мы с помощью нашего запроса получаем новую табличку, строки которой формируются из строк двух исходных путем их объединения
причем в одну строку поподают данные где raw_contact_id = contact_id
normalized_number|display_name+79001111111|Вася
+79002222222|Петя
запросов уйма, т.к. почти в каждой таблице данные дублируются, доставать имя и телефон можно из разных таблиц и колонок, посмотрев все таблички и найдя нужные данные.
Можно на основе данного запроса сделать свой
SELECT 'колонки через запятую' FROM 'таблицы через запятую' WHERE 'условие'
'колонки через запятую' можно писать в таком виде [таблица].[колонка] квадратные скобки можно опустить, но они могут спасти от ошибок, если вдруг названия таблиц/колонок имеют названия зарезервированных команд. Здесь мы через запятую указываем, какие данные хотим видеть в новой таблице
'таблицы через запятую' можно писать в таком виде [таблица]. Здесь мы указываем данные из каких таблиц мы хотим получить
'условие' можно писать в таком виде [таблица1].[колонка1] = [таблица2].[колонка2], так же условий может быть несколько и они пишутся через логические операторы and и or, а так же могут группироваться с помощью круглых скобок. Условия нужны, чтобы объединить данные нескольких таблиц и с их помощью можно задавать фильтры. Например, если мы добавим в конце нашего запроса строку из одинарных кавычек ' AND display_name = "Саша"', то в нашей таблице окажутся не все контакты из нашего листа, а только номера телефонов людей которых зовут "Саша".
так же я обнаружил в данной базе давно удаленные номера, возможно это будет кому-то интересно.
таким же способом можно достать SMS из файла /data/data/com.android.providers.telephony/databases/mmssms.db
в файле data.ext4.tar лежат все пользовательские файлы, которые вам может понадобиться забрать с девайса
Сообщение отредактировал Gridzilla - 30.09.14, 12:17Причина редактирования: правка по просьбе автора