验证按键映射工具

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,然后再将这些文件安装到设备中。

通过使用脚本或 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)