Приветствую хабражителей.
Являюсь счастливым обладателем LG Optimus One. Счастливым потому, что андроидофон дешевый и все мои потребности удовлетворяет на ура. Но есть и неприятный момент. Был.
Довольно частая (если не постоянная) практика у производителей гаджетов напичкивать заводскую прошивку сторонними сервисами, широко использующимися в регионе. С технической точки зрения все вполне вменяемо: производитель закидывает .apk в прошивку наряду с родными для Android в r/o папку. Виджеты и приложения еще можно удалить либо с помощью uninstaller'ов, коих полно в Market, либо руками с помощью Root Explorer и т. п. Но вот залоченные на удаление закладки в стандартном браузере (а он мне нравится больше, чем Opera и Firefox) – это явное навязывание. Конечно, использованию браузера не мешают, но меня, как любителя порядка и чистоты (ярого), раздражал факт их присутствия. Под катом — легкий и простой способ избавления от них, а также легкая практика работы с SQLite.
Для начала, нужно было найти, где хранятся закладки браузера, ну и вообще данные приложений. Конечно, можно было долго бродить по директориям файловой системы гаджета с помощью Root Explorer, но, будучи уверенным пользователем Linux, я поставил эмулятор терминала с Market'a и набил “ls -R /”. 5 минут от поездки метро было достаточно, чтобы найти то, что нужно, а именно /data/data/. Конкретно от браузера требовалась БД /data/data/com.android.browser/databases/browser.db. Просмотрев базу встроенным в Root Explorer средством, сразу обнаружилась таблица bookmarks (в ней вообще вся история хранится, а «закладковость» записи флажком меняется). Просмотрев саму таблицу, дальнейший порядок действий я понял:

(ненавистными блокированными закладками были погода, расписания электричек, новости и т. п. от Яндекса, для статьи же восстановил примерную картину)
Такая картина в таблице давала следующую картину в браузере:

На Market'e присутствуют редакторы SQLite баз, но авторы просят денег. Заглядываю на сайт SQLite и нахожу то, что мне нужно.
Качаем уже собранный бинарник консоли, распаковываем в рабочую папку. В нее же скидываем browser.db (я перекидывал из файловой системы смартфона на флешку, потом с нее на ПК).
После загрузки базы из файла она доступна под именем main:
Для верности:
Формируем запрос (справка на сайте SQLite). Смотрим id залоченной закладки и подставляем:
Сохраняем базу в файл. По умолчанию будет сохранена база main, при работе с несколькими можно указать другую (см. .help):
Хлопаем дверью:
Вот и все. Закидываем базу данных на свое место, перезагружаем браузер и радуемся чистоте и порядку.
Избавившись от не дающих спокойно жить навязанных закладок, получил базовый навык формирования SQL-запросов и опыт работы с консолью SQLite. Приятно, полезно. Ну и просто just for fun :)
Использовались материалы:
Об Android на Wiki (не знал же с рождения, что в Android используется SQLite)
Справочник SQLite по синтаксису SQL
И, собственно, примерное представление того, как оно внутри устроено
Являюсь счастливым обладателем LG Optimus One. Счастливым потому, что андроидофон дешевый и все мои потребности удовлетворяет на ура. Но есть и неприятный момент. Был.
Довольно частая (если не постоянная) практика у производителей гаджетов напичкивать заводскую прошивку сторонними сервисами, широко использующимися в регионе. С технической точки зрения все вполне вменяемо: производитель закидывает .apk в прошивку наряду с родными для Android в r/o папку. Виджеты и приложения еще можно удалить либо с помощью uninstaller'ов, коих полно в Market, либо руками с помощью Root Explorer и т. п. Но вот залоченные на удаление закладки в стандартном браузере (а он мне нравится больше, чем Opera и Firefox) – это явное навязывание. Конечно, использованию браузера не мешают, но меня, как любителя порядка и чистоты (ярого), раздражал факт их присутствия. Под катом — легкий и простой способ избавления от них, а также легкая практика работы с SQLite.
Для начала, нужно было найти, где хранятся закладки браузера, ну и вообще данные приложений. Конечно, можно было долго бродить по директориям файловой системы гаджета с помощью Root Explorer, но, будучи уверенным пользователем Linux, я поставил эмулятор терминала с Market'a и набил “ls -R /”. 5 минут от поездки метро было достаточно, чтобы найти то, что нужно, а именно /data/data/. Конкретно от браузера требовалась БД /data/data/com.android.browser/databases/browser.db. Просмотрев базу встроенным в Root Explorer средством, сразу обнаружилась таблица bookmarks (в ней вообще вся история хранится, а «закладковость» записи флажком меняется). Просмотрев саму таблицу, дальнейший порядок действий я понял:

(ненавистными блокированными закладками были погода, расписания электричек, новости и т. п. от Яндекса, для статьи же восстановил примерную картину)
Такая картина в таблице давала следующую картину в браузере:


Режем
На Market'e присутствуют редакторы SQLite баз, но авторы просят денег. Заглядываю на сайт SQLite и нахожу то, что мне нужно.
Качаем уже собранный бинарник консоли, распаковываем в рабочую папку. В нее же скидываем browser.db (я перекидывал из файловой системы смартфона на флешку, потом с нее на ПК).
Работаем с базой:
D:\Downloads>sqlite3.exe browser.db.old
SQLite version 3.7.6.3
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
После загрузки базы из файла она доступна под именем main:
sqlite> .databases
seq name file
----------------------------------------------------------------------
0 main D:\Downloads\browser.db.old
1 temp
Для верности:
sqlite> .tables
android_metadata bookmarks delete_bookmarks searches
Формируем запрос (справка на сайте SQLite). Смотрим id залоченной закладки и подставляем:
sqlite> delete from `bookmarks` where `_id`=1;
Сохраняем базу в файл. По умолчанию будет сохранена база main, при работе с несколькими можно указать другую (см. .help):
sqlite> .backup browser.db
Хлопаем дверью:
sqlite> .quit
Вот и все. Закидываем базу данных на свое место, перезагружаем браузер и радуемся чистоте и порядку.
Послесловие
Избавившись от не дающих спокойно жить навязанных закладок, получил базовый навык формирования SQL-запросов и опыт работы с консолью SQLite. Приятно, полезно. Ну и просто just for fun :)
Использовались материалы:
Об Android на Wiki (не знал же с рождения, что в Android используется SQLite)
Справочник SQLite по синтаксису SQL
И, собственно, примерное представление того, как оно внутри устроено