Das Android-Framework verfügt über ein kleines Tool namens validatekeymaps
, um die Syntax von Konfigurationsdateien für Eingabegeräte, Tastenlayoutdateien, Tastenzuordnungsdateien und Definitionsdateien für virtuelle Tasten zu validieren.
Zusammenstellung
Um validatekeymaps
zu kompilieren, richten Sie die Entwicklungsumgebung ein, laden Sie den Android-Quellbaum herunter, kompilieren Sie ihn und führen Sie dann Folgendes aus:
mmm frameworks/base/tools/validatekeymaps
Dieser Befehl sollte ein Host-Tool namens „validatekeymaps“ in das Verzeichnis out/host/<os>/bin
kompilieren.
Verwendung
Wenn Sie envsetup.sh
ausgeführt haben, um Ihre Entwicklungsumgebung einzurichten, sollte sich das validatekeymaps
Tool bereits auf Ihrem Weg befinden. 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.
Dann müssen Sie nur noch validatekeymaps
ausführen und den Pfad einer oder mehrerer zu validierender Dateien angeben.
validatekeymaps frameworks/base/data/keyboards/Generic.kl
Beispiel:
Validating file 'frameworks/base/data/keyboards/Generic.kl'... No errors. Success.
Und wenn es einen Fehler gibt...
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 eine sehr gute Idee, validatekeymaps
für alle Konfigurationsdateien auszuführen, bevor Sie sie auf einem Gerät installieren.
Der Prozess kann als Teil des Build-Systems mithilfe eines Skripts oder eines Makefiles problemlos 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)