Das Android-Framework bietet ein kleines Tool namens validatekeymaps
, mit dem die Syntax von Konfigurationsdateien für Eingabegeräte, Tastenlayoutdateien, Tastenbelegungsdateien und Dateien mit virtuellen Tastendefinitionen validiert werden kann.
Compilation
Um validatekeymaps
zu kompilieren, richten Sie die Entwicklungsumgebung ein, laden Sie den Android-Quellcode herunter, kompilieren Sie ihn und führen Sie dann Folgendes aus:
mmm frameworks/base/tools/validatekeymaps
Mit diesem Befehl sollte ein Hosttool namens validatekeymaps im Verzeichnis out/host/<os>/bin
kompiliert werden.
Nutzung
Wenn Sie envsetup.sh
zum Einrichten Ihrer Entwicklungsumgebung ausgeführt haben, sollte das validatekeymaps
-Tool bereits in Ihrem Pfad enthalten sein. Sie können dies überprüfen, indem Sie validatekeymaps
ausführen.
validatekeymaps
Sie sollten die folgende Ausgabe sehen:
Keymap Validation Tool Usage: validatekeymaps [*.kl] [*.kcm] [*.idc] [virtualkeys.*] [...] Validates the specified key layouts, key character maps, input device configurations, or virtual key definitions.
Anschließend müssen Sie nur noch validatekeymaps
ausführen und den Pfad zu einer oder mehreren Dateien angeben, die validiert werden sollen.
validatekeymaps frameworks/base/data/keyboards/Generic.kl
Beispiel:
Validating file 'frameworks/base/data/keyboards/Generic.kl'... No errors. Success.
Und wenn ein Fehler auftritt…
validatekeymaps Bad.kl
Beispiel:
Validating file 'Bad.kl'... E/KeyLayoutMap(87688): Bad.kl:24: Expected keyword, got 'ke'. Error -22 parsing key layout file. Failed!
Automatisierung
Es ist sehr empfehlenswert, validatekeymaps
auf allen Konfigurationsdateien auszuführen, bevor Sie sie auf einem Gerät installieren.
Der Prozess kann mit einem Script oder einem Makefile einfach als Teil des Build-Systems automatisiert werden.
Das folgende Beispiel-Makefile basiert auf dem Inhalt von 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)