A estrutura Android possui uma pequena ferramenta chamada validatekeymaps
para validar a sintaxe dos arquivos de configuração do dispositivo de entrada, arquivos de layout de chave, arquivos de mapas de caracteres principais e arquivos de definição de chave virtual.
Compilação
Para compilar validatekeymaps
, configure o ambiente de desenvolvimento, baixe a árvore de origem do Android, compile-a e execute:
mmm frameworks/base/tools/validatekeymaps
Este comando deve compilar uma ferramenta de host chamada validkeymaps no diretório out/host/<os>/bin
.
Uso
Se você executou envsetup.sh
para configurar seu ambiente de desenvolvimento, a ferramenta validatekeymaps
já deverá estar em seu caminho. Você pode verificar isso executando validatekeymaps
.
validatekeymaps
Você deverá ver a seguinte saída:
Keymap Validation Tool Usage: validatekeymaps [*.kl] [*.kcm] [*.idc] [virtualkeys.*] [...] Validates the specified key layouts, key character maps, input device configurations, or virtual key definitions.
Então tudo o que você precisa fazer é executar validatekeymaps
e fornecer o caminho de um ou mais arquivos para validar.
validatekeymaps frameworks/base/data/keyboards/Generic.kl
Exemplo:
Validating file 'frameworks/base/data/keyboards/Generic.kl'... No errors. Success.
E se houver um erro...
validatekeymaps Bad.kl
Exemplo:
Validating file 'Bad.kl'... E/KeyLayoutMap(87688): Bad.kl:24: Expected keyword, got 'ke'. Error -22 parsing key layout file. Failed!
Automação
É uma boa ideia executar validatekeymaps
em todos os arquivos de configuração antes de instalá-los em um dispositivo.
O processo pode ser facilmente automatizado como parte do sistema de construção usando um script ou makefile.
O makefile de exemplo a seguir é baseado no conteúdo de frameworks/base/data/keyboards/Android.mk
.
# This makefile performs build time validation of framework keymap files. LOCAL_PATH := $(call my-dir) # Validate all key maps. include $(CLEAR_VARS) validatekeymaps := $(HOST_OUT_EXECUTABLES)/validatekeymaps$(HOST_EXECUTABLE_SUFFIX) files := MyKeyboard.kl MyKeyboard.kcm MyTouchScreen.idc LOCAL_MODULE := validate_framework_keymaps LOCAL_MODULE_TAGS := optional LOCAL_REQUIRED_MODULES := validatekeymaps validate_framework_keymaps: $(files) $(hide) $(validatekeymaps) $(files) include $(BUILD_PHONY_PACKAGE)