В Android Framework есть небольшой инструмент 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 для всех файлов конфигурации, прежде чем устанавливать их на устройство.
Этот процесс можно легко автоматизировать в рамках системы сборки с помощью скрипта или файла makefile.
Приведенный ниже файл makefile создан на основе содержимого файла 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)