Продвинутые техники в работе с Андроидом

Материал из Toshiba AC100 wiki
Перейти к: навигация, поиск

Полезные заметки

Android properties

Андроид использует для хранения разных переменных окружения так называемые _properties_, смысл их похож на регистри вин32 систем. На работающей системе поменять существующее значение проперти нельзя, чтобы изменения применились нужно перезапускать систему, но можно создать новую ключевую пару.

Проперти хранятся в системе в нескольких файлах, обычно это /system/build.prop и /default.prop, также некторые проперти могут применяться из init файлов системы /init.rc и /init.paz00.rc

Из терминала можно посмотреть целиком список всех текущих значений коммандой getprop, а создать новое временное значение коммандой setprop

Чтобы значение осталось и после перезагрузки его нужно прописать в /system/build.prop предварительно разрешив запись в эту файловую систему

Изменение глобальных параметров системы

При формировании сборки системы Андроид многие глобальные параметры будущей системы задаются через так называемые оверлеи с конфигами в xml формате, о них подробнее тут Overlays

В уже работающей системе их также можно поменять, напрямую поправив значение в базе данных. Ниже рассмотрим как это сделать:

  • Подключаемся к базе из терминала
cd /data/data/com.android.providers.settings/databases/
su -c sqlite3 settings.db
  • Смотрим какие там существуют базы
SQLite version 3.7.4
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .databases
seq  name             file                                                      
---  ---------------  ----------------------------------------------------------
0    main             /data/data/com.android.providers.settings/databases/settin                                                     
sqlite>
  • Смотрим какие есть таблицы в базе
sqlite> .schema
CREATE TABLE android_metadata (locale TEXT);
CREATE TABLE bluetooth_devices (_id INTEGER PRIMARY KEY,name TEXT,addr TEXT,channel INTEGER,type INTEGER);
CREATE TABLE bookmarks (_id INTEGER PRIMARY KEY,title TEXT,folder TEXT,intent TEXT,shortcut INTEGER,ordering INTEGER);
CREATE TABLE secure (_id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT UNIQUE ON CONFLICT REPLACE,value TEXT);
CREATE TABLE system (_id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT UNIQUE ON CONFLICT REPLACE,value TEXT);
CREATE INDEX bookmarksIndex1 ON bookmarks (folder);
CREATE INDEX bookmarksIndex2 ON bookmarks (shortcut);
CREATE INDEX secureIndex1 ON secure (name);
CREATE INDEX systemIndex1 ON system (name);
  • Смотрим содержимое таблицы system
sqlite> select * from system;
2|volume_ring|5
3|volume_system|7
4|volume_voice|4
5|volume_alarm|6
6|volume_notification|5
7|volume_bluetooth_sco|7
8|mode_ringer|2
9|vibrate_on|10
10|mode_ringer_streams_affected|174
11|mute_streams_affected|46
12|dim_screen|1
13|stay_on_while_plugged_in|0
15|emergency_tone|0
16|call_auto_retry|0
...
...
  • Теперь можем менять значения или добавлять новые

Пример добавления записи в таблицу

sqlite3 /data/data/com.android.providers.settings/databases/settings.db "INSERT INTO secure (name, value) VALUES ('wifi_country_code', 'EU');"