Alterar definições pela linha de comandos

De androidPT Wiki
Ir para: navegação, pesquisa

O Android guarda as definições do telemóvel numa base de dados ( /data/data/com.android.providers.settings/databases/settings.db ), a qual é possível manusear via linha de comandos, tanto no dispositivo ou via ADB. Uma das vantagens desta aproximação prende-se ao facto de existirem algumas configurações ocultas, por ocultas deve-se entender que não existe opção nos menus ou outra ferramenta visual que vem com o Android que permita alterar estas configurações, sendo que usando este método é possível alterar essas definições escondidas.

ATENÇÃO: O manuseamento da base de dados das definições pode "quebrar" algumas funcionalidades, caso se altere uma definição para um valor incorrecto, dito isto, é aconselhada prudência ao manusear as entradas da Base de Dados, e é desaconselhado este processo a utilizadores menos experientes.

Aceder à Base de Dados

$sqlite3 /data/data/com.android.providers.settings/databases/settings.db

> No fim da execução deste comando, se tudo correu como suposto deverão ficar com uma prompt do sqlite ( deste género : sqlite> )

Todas as base de dados usadas pelo Android são SQLite.


Ver que tabelas existem na BD

sqlite> .tables

Exemplo de output :

android_metadata bookmarks secure

bluetooth_devices gservices system


Ver conteúdo de uma tabela

Uma maneira de se ver todos o conteúdo de uma tabela é criando um "dump" da mesma. A informação será de como recriar aquela tabela com os campos e valores actuais, mas o que queremos estar atentos à aos nomes dos campos e aos seus valores.

Exemplo :

sqlite>.dump system

> Faz uma dump da tabela de nome "system" ( esta tabela existe sempre na BD referida! )


Alterar valores da tabela

Peguemos no dump obtido no tópico anterior a título de exemplo. Uma linha seria por exemplo INSERT INTO "system" VALUES(32,'install_non_market_apps','1');

Ora, para alterar o valor desta entrada, que é obviamente booleana ( mais uma vez, se não sabe o que está a fazer, é melhor parar! ), e coloca-la a 0, faríamos:

UPDATE "system" SET value='0' WHERE name='install_non_market_apps';


Ora saí então que a sintaxe genérica para isto é da forma:

UPDATE "[nome da tabela]" SET value=[VALOR NOVO] name="[NOME DO CAMPO]";


Nota : Não esquecer o ";" no final do comando, senão a shell do sqlite ficará à espera da continuação do comando escrito. Isto aplica-se a todos os comandos SQL executados!


Dicas

Ver todas as bases de dados do sistema : $find data -name "*.db" -print


Apagar histórico do Google Maps : Aceder à BD "data/data/com.google.android.apps.maps/databases/search_history.db", e apagar as entradas respectivas das tabelas, suggestions e history.

Referências Externas

Documentação do oficial do SQLite [1]