В статье Кастомизируем раскладку внешней клавиатуры на Android без root мы выяснили, что Android-приложение может предоставлять дополнительные раскладки клавиатуры, и научились собирать такое приложение. Но простому (и даже не простому) пользователю лень собирать приложение. Хочется, чтобы это происходило автоматически, и в этом нам поможет ExKeyMo.

Об ExKeyMo

ExKeyMo - это web-сервис, который позволяет получить готовое Android-приложение со встроенными раскладками. KCM на входе - APK на выходе. О том, что такое KCM и как его готовить, лучше почитать в предыдущей статье или в официальной документации.

Как пользоваться

  1. Введите содержимое вашего KCM-файла в поле формы.

  2. Нажмите Download.

  3. Загрузите приложение и установите его. Приложение самоподписанное, поэтому Android может предупреждать о небезопасном источнике. Внимание: если при установке возникает ошибка, удалите предыдущую версию при её наличии.

  4. В Settings -> Language & input -> Physical keyboard (конкретный путь на вашем устройстве может отличаться) выберите клавиатуру, которую хотите кастомизировать и выберите раскладку ExKeyMo Layout.

Кастомизация

Раскладка клавиатуры кастомизируется с помощью Key Character Map файлов. Чтобы переназначить клавишу, используйте синтаксис map key KEY_CODE ANDROID_KEY, где KEY_CODE - это код, который производит физическая клавиша на вашей клавиатуре, а ANDROID_KEY - это клавиша Android, такая как ENTER, BRIGHTNESS_UP или просто символы как 1 или A. Раскладку по-умолчанию можно посмотреть в Generic.kl файле, в формате key KEY_CODE ANDROID_KEY.

Например, вы хотите поменять местами клавиши Caps Lock и Esc. Для этого нужно переопределить Caps Lock на Esc и наоборот. Откройте Generic.kl и найдите соответствующие KEY_CODE (второй столбец) и ANDROID_KEY (третий столбец). Это 1 для ESCAPE и 58 для CAPS_LOCK по-умолчанию. Добавьте соответствующие правила в формате map key KEY_CODE ANDROID_KEY. И не забудьте добавить type OVERLAY самой первой строкой. В результате получится:

type OVERLAY

map key 58 ESCAPE
map key 1 CAPS_LOCK

Некоторые клавиатуры имеют медиа-клавиши или другие клавиши, которые работают не так как ожидается. Для того чтобы их переопределить нужно узнать их коды. Для этого есть несколько Android-приложений. Например, Gamepad tester (интересующий нас код клавиши там показан как 'scan code').

Возможны и более сложные кастомизации: комбинации с клавишами-модификаторами Ctrl/Alt/Shift или вывод символов различных языков. Больше можно узнать в официальной документации.

Вторая раскладка

Вторая раскладка полезна, если вы используете несколько языков (например английский и русский). Кликните на Add Second Layout чекбокс, чтобы добавить вторую раскладку. Введите её в появившееся поле ввода.

Например, вы всё ещё хотите поменять местами Caps Lock и Esc, но нужно чтобы это работало и для русской раскладки. Возьмите KCM-файл для русской раскладки (KCM-файлы для других языков можно найти тут). Добавьте необходимые правила. В результате получится:

# Несколько сотен строк
# русской раскладки
# взятой из KCM-файла
# по адресу https://android.googlesource.com/platform/frameworks/base/+/master/packages/InputDevices/res/raw/keyboard_layout_russian.kcm

map key 58 ESCAPE
map key 1 CAPS_LOCK

Ограничения

Пока что поддерживаются только две раскладки. Если вам нужно больше, то обратите внимание на проект Custom Keyboard Layout и предыдущую статью.

Что под капотом

Это простой web-сервер, написанный на Java, который:

  1. Принимает запрос с нужными пользователю раскладками.

  2. Подменяет KCM-файл(ы) внутри уже готового APK.

  3. Подписывает получившийся APK.

  4. Отдаёт его пользователю.

Исходники сервиса доступны на GitHub.

Сами APK (а их два - для одной и для двух раскладок), созданы с помощью этого Android-проекта.

Комментарии (0)