כלי למיפוי מקשים לאימות מקשים

במסגרת Android יש כלי קטן בשם validatekeymaps כדי לאמת תחביר של קובצי תצורה של מכשיר קלט, קובצי פריסת מקשים, תו מפתח של מפות וקבצים בהגדרת מפתח וירטואלי.

קומפילציה

כדי להדר את validatekeymaps, צריך להגדיר את סביבת הפיתוח, להוריד את האפליקציה עץ המקור של Android, להדר אותו ואז להריץ את הפקודה:

mmm frameworks/base/tools/validatekeymaps

הפקודה הזו אמורה להדר כלי מארח שנקרא verificationkeymaps ספריית 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 בכל קובצי התצורה לפני ההתקנה שלהם במכשיר.

אפשר לבצע בקלות אוטומציה של התהליך כחלק ממערכת ה-build באמצעות סקריפט או קובץ Makefile.

קטע ה-createfile לדוגמה הבא מבוסס על התוכן של 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)