Инструмент проверки раскладок

Платформа 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)