O framework do Android tem uma pequena ferramenta chamada validatekeymaps para validar a
sintaxe de arquivos de configuração do dispositivo de entrada, arquivos de layout de teclas, arquivos de
mapeamento de caracteres de teclas e arquivos de definição de teclas virtuais.
Compilação
Para compilar validatekeymaps, configure o ambiente de desenvolvimento, faça o download
da árvore de origem do Android, compile-a e execute:
mmm frameworks/base/tools/validatekeymaps
Esse comando precisa compilar uma ferramenta de host chamada validatekeymaps no
diretório out/host/<os>/bin.
Uso
Se você executou envsetup.sh para configurar seu ambiente de desenvolvimento, a
ferramenta validatekeymaps já estará no caminho. Para verificar
isso, execute validatekeymaps.
validatekeymaps
A saída será esta:
Keymap Validation Tool Usage: validatekeymaps [*.kl] [*.kcm] [*.idc] [virtualkeys.*] [...] Validates the specified key layouts, key character maps, input device configurations, or virtual key definitions.
Depois, basta executar validatekeymaps e fornecer o caminho de
um ou mais arquivos para validação.
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
É muito recomendável 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 build usando um script ou um 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)