công cụ validatekeymaps

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)