Khung Android có một công cụ nhỏ có tên là validatekeymaps
để xác thực cú pháp của các tệp cấu hình thiết bị đầu vào, tệp bố cục phím, tệp bản đồ ký tự phím và tệp định nghĩa phím ảo.
Biên dịch
Để biên dịch validatekeymaps
, hãy thiết lập môi trường phát triển, tải xuống cây nguồn Android, biên dịch rồi chạy:
mmm frameworks/base/tools/validatekeymaps
Lệnh này sẽ biên dịch một công cụ lưu trữ có tên validatekeymaps vào thư mục out/host/<os>/bin
.
Cách sử dụng
Nếu bạn đã chạy envsetup.sh
để thiết lập môi trường phát triển, thì công cụ validatekeymaps
sẽ nằm trên đường dẫn của bạn. Bạn có thể xác minh điều này bằng cách chạy validatekeymaps
.
validatekeymaps
Bạn sẽ thấy kết quả sau đây:
Keymap Validation Tool Usage: validatekeymaps [*.kl] [*.kcm] [*.idc] [virtualkeys.*] [...] Validates the specified key layouts, key character maps, input device configurations, or virtual key definitions.
Sau đó, bạn chỉ cần chạy validatekeymaps
và cung cấp đường dẫn của một hoặc nhiều tệp để xác thực.
validatekeymaps frameworks/base/data/keyboards/Generic.kl
Ví dụ:
Validating file 'frameworks/base/data/keyboards/Generic.kl'... No errors. Success.
Và nếu có lỗi...
validatekeymaps Bad.kl
Ví dụ:
Validating file 'Bad.kl'... E/KeyLayoutMap(87688): Bad.kl:24: Expected keyword, got 'ke'. Error -22 parsing key layout file. Failed!
Tự động hóa
Bạn nên rất chạy validatekeymaps
trên tất cả tệp cấu hình trước khi cài đặt các tệp đó trên thiết bị.
Bạn có thể dễ dàng tự động hoá quy trình này trong hệ thống xây dựng bằng cách sử dụng tập lệnh hoặc tệp makefile.
Tệp makefile mẫu sau đây dựa trên nội dung của 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)