В статье Кастомизируем раскладку внешней клавиатуры на Android без root мы выяснили, что Android-приложение может предоставлять дополнительные раскладки клавиатуры, и научились собирать такое приложение. Но простому (и даже не простому) пользователю лень собирать приложение. Хочется, чтобы это происходило автоматически, и в этом нам поможет ExKeyMo.
Об ExKeyMo
ExKeyMo - это web-сервис, который позволяет получить готовое Android-приложение со встроенными раскладками. KCM на входе - APK на выходе. О том, что такое KCM и как его готовить, лучше почитать в предыдущей статье или в официальной документации.
Как пользоваться
Введите содержимое вашего KCM-файла в поле формы.
Нажмите
Download
.Загрузите приложение и установите его. Приложение самоподписанное, поэтому Android может предупреждать о небезопасном источнике. Внимание: если при установке возникает ошибка, удалите предыдущую версию при её наличии.
В
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, который:
Принимает запрос с нужными пользователю раскладками.
Подменяет KCM-файл(ы) внутри уже готового APK.
Подписывает получившийся APK.
Отдаёт его пользователю.
Исходники сервиса доступны на GitHub.
Сами APK (а их два - для одной и для двух раскладок), созданы с помощью этого Android-проекта.