validatekeymaps tool

The Android framework has a small tool called validatekeymaps to validate the syntax of input device configuration files, key layout files, key character maps files and virtual key definition files.


To compile validatekeymaps, set up the development environment, download the Android source tree, compile it, then run:

mmm frameworks/base/tools/validatekeymaps

This command should compile a host tool called validatekeymaps into the out/host/<os>/bin directory.


If you ran to set up your development environment, then the validatekeymaps tool should already be on your path. You can verify this by running validatekeymaps.


You should see the following output:

Keymap Validation Tool

 validatekeymaps [*.kl] [*.kcm] [*.idc] [virtualkeys.*] [...]
   Validates the specified key layouts, key character maps, 
   input device configurations, or virtual key definitions.

Then all you need to do is run validatekeymaps and give it the path of one or more files to validate.

validatekeymaps frameworks/base/data/keyboards/Generic.kl


Validating file 'frameworks/base/data/keyboards/Generic.kl'...
No errors.


And if there is an error...

validatekeymaps Bad.kl


Validating file 'Bad.kl'...
E/KeyLayoutMap(87688): Bad.kl:24: Expected keyword, got 'ke'.
Error -22 parsing key layout file.



It is a very good idea to run validatekeymaps on all configuration files before installing them on a device.

The process can easily be automated as part of the build system by using a script or a makefile.

The following sample makefile is based on the contents of frameworks/base/data/keyboards/

# 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_REQUIRED_MODULES := validatekeymaps

validate_framework_keymaps: $(files)
    $(hide) $(validatekeymaps) $(files)