В платформе Android есть небольшой инструмент под названием validatekeymaps
для проверки синтаксиса файлов конфигурации устройств ввода, файлов раскладки клавиш, файлов карт символов клавиш и файлов определений виртуальных клавиш.
Сборник
Чтобы скомпилировать validatekeymaps
, настройте среду разработки, загрузите дерево исходного кода Android, скомпилируйте его и запустите:
mmm frameworks/base/tools/validatekeymaps
Эта команда должна скомпилировать инструмент хоста под названием validatekeymaps в каталог out/host/<os>/bin
.
Использование
Если вы запустили envsetup.sh
для настройки среды разработки, то инструмент validatekeymaps
уже должен быть на вашем пути. Вы можете убедиться в этом, запустив validatekeymaps
.
validatekeymaps
Вы должны увидеть следующий вывод:
Keymap Validation Tool Usage: validatekeymaps [*.kl] [*.kcm] [*.idc] [virtualkeys.*] [...] Validates the specified key layouts, key character maps, input device configurations, or virtual key definitions.
Затем все, что вам нужно сделать, это запустить validatekeymaps
и указать путь к одному или нескольким файлам для проверки.
validatekeymaps frameworks/base/data/keyboards/Generic.kl
Пример:
Validating file 'frameworks/base/data/keyboards/Generic.kl'... No errors. Success.
А если ошибка...
validatekeymaps Bad.kl
Пример:
Validating file 'Bad.kl'... E/KeyLayoutMap(87688): Bad.kl:24: Expected keyword, got 'ke'. Error -22 parsing key layout file. Failed!
Автоматизация
Очень хорошая идея — запустить validatekeymaps
для всех файлов конфигурации перед их установкой на устройство.
Этот процесс можно легко автоматизировать как часть системы сборки с помощью сценария или make-файла.
Следующий пример make-файла основан на содержимом 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)