El framework de Android tiene una pequeña herramienta llamada validatekeymaps
para validar la sintaxis de los archivos de configuración de dispositivos de entrada, los archivos de diseño de teclas, los archivos de mapas de caracteres clave y los archivos de definición de teclas virtuales.
Compilación
Para compilar validatekeymaps
, configura el entorno de desarrollo, descarga el árbol de fuentes de Android, compílalo y, luego, ejecuta lo siguiente:
mmm frameworks/base/tools/validatekeymaps
Este comando debe compilar una herramienta de host llamada validatekeymaps en el directorio out/host/<os>/bin
.
Uso
Si ejecutaste envsetup.sh
para configurar tu entorno de desarrollo, la herramienta validatekeymaps
ya debería estar en tu ruta de acceso. Para verificarlo, ejecuta validatekeymaps
.
validatekeymaps
Debería verse el siguiente resultado:
Keymap Validation Tool Usage: validatekeymaps [*.kl] [*.kcm] [*.idc] [virtualkeys.*] [...] Validates the specified key layouts, key character maps, input device configurations, or virtual key definitions.
Luego, todo lo que debes hacer es ejecutar validatekeymaps
y darle la ruta de acceso de uno o más archivos para validar.
validatekeymaps frameworks/base/data/keyboards/Generic.kl
Ejemplo:
Validating file 'frameworks/base/data/keyboards/Generic.kl'... No errors. Success.
Y si hay un error…
validatekeymaps Bad.kl
Ejemplo:
Validating file 'Bad.kl'... E/KeyLayoutMap(87688): Bad.kl:24: Expected keyword, got 'ke'. Error -22 parsing key layout file. Failed!
Automatización
Es muy recomendable ejecutar validatekeymaps
en todos los archivos de configuración antes de instalarlos en un dispositivo.
El proceso se puede automatizar fácilmente como parte del sistema de compilación con una secuencia de comandos o un archivo makefile.
El siguiente archivo makefile de muestra se basa en el contenido 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)