يحتوي إطار عمل 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
على كافة ملفات التكوين قبل تثبيتها على الجهاز.
يمكن بسهولة أتمتة العملية كجزء من نظام الإنشاء باستخدام برنامج نصي أو ملف تعريفي.
يعتمد نموذج 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)