הכלי validatekeymaps

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

אפשר לבצע את התהליך באופן אוטומטי בקלות כחלק ממערכת ה-build באמצעות סקריפט או קובץ 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)