Установка файла раскладки клавиатуры (.kl) с помощью приложения для Android (.apk)

Я пытался и искал в течение нескольких дней и не смог найти какое-либо решение для моей проблемы:

Я пытаюсь установить файл.kl в /system/usr/keylayout, чтобы переназначить некоторые клавиши клавиатуры для моего приложения. У меня есть правильный файл.kl в правильном формате: Vender_XXXX_Product_XXXX.kl, и он работает, если я копирую его с помощью root explorer.

Но я хочу, чтобы он был установлен (без рута) путем установки моего приложения. Что означает, что он должен быть включен в файл.apk и скопирован во время установки!?

До сих пор я подходил либо с использованием получателя, либо с намерением QUERY_KEYBOARD_LAYOUTS. Для этого нужен файл.kcm. Это не работает с моим телефоном (Galaxy S3). Я не знаю почему, но он не показывает пункт настроек PHYSICAL_KEYBOARD в настройках:(

В любом случае, я думаю / надеюсь, что лучший способ - NDK: я попытался использовать ndk и смог интегрировать некоторые нативные c в мое приложение, но без "исходных" файлов, таких как мой.kl-файл. Я надеялся, что файл device.mk каким-то образом сможет скопировать мой файл.kl в / system, например так: device.mk PRODUCT_COPY_FILES += $(LOCAL_PATH)/Vendor_XXXX_Product_XXXX.kl:system/usr/keylayout/Vendor_XXXXlk._x

Это вообще возможно? Использовать NDK для автоматической установки файла в / system при установке самого apk? И если так, как ты это делаешь? Я запутался во всем, что касается makefile и NDK. Никогда не используйте это раньше, и я довольно плохо с c.

Если кто-нибудь из вас знает, как сделать то, что я прошу... пожалуйста, дайте мне знать. Это будет с благодарностью!

3 ответа

Не исключено установить файл.kcm с пакетом apk. На самом деле, именно так и делают макетные приложения. Вы находитесь на правильном пути с QUERY_KEYBOARD_LAYOUT.

Я хотел установить файл.kl, как и вы, но не смог найти для него никакой полезной информации. Так что вместо этого я просто использовал ключевое слово map в своем файле.kcm, оно имеет точно такой же эффект.

Проверьте мой источник здесь, где я разрешаю пользователю добавлять макет se_sv_dvorak kcm без рутирования телефона: https://github.com/innsmouthrain/se_sv_dvorak

Но я хочу, чтобы он был установлен (без рута) путем установки моего приложения.

Это невозможно. Приложения не имеют доступа к записи /system/usr/, если они не запущены от имени root.

Использовать NDK для автоматической установки файла в /system при установке самого apk?

Это вдвойне невозможно

  • Ваше приложение не получает контроль при установке

  • Код, написанный с использованием NDK, не получает никаких дополнительных прав ОС, поэтому такой код не может быть записан в /system/usr/, за исключением случаев запуска от имени пользователя root

Система Android по умолчанию доступна только для чтения. Только перемонтирование в режиме чтения-записи позволяет осуществлять запись в систему. Remount — это команда только root. Эти файлы раскладки клавиатуры *.kl поставляются вместе со смартфоном и предназначены для наушников Bluetooth, джойстиков, таких как Sony Playstation 3, игрового контроллера Microsoft Xbox 360, Wiimote Nintendo, автомобильных аудиосистем. Они преобразуют сигналы, специфичные для устройства, в понятные для Android предустановленные события нажатия клавиш и ведут себя по-разному в каждом активном окне/приложении. Они предварительно настроены производителем смартфона, как и эти приложения, которые поставляются сразу с каждым новым смартфоном. Это коммерческое решение, и если вы не заплатите производителю смартфона, он не будет размещать раскладки клавиш для конкурентов или разработчиков, обычных пользователей. Неизвестное устройство использует раскладку клавиатуры Android generic.kl и в каждом активном приложении/окне и средстве запуска выдает разные нажатия клавиш.

Решение первое: рутируйте ОС Android и перенесите файл *.kl в систему.

Решение второе: запрограммируйте свое приложение так, чтобы оно действовало так, как вы хотите, если происходит событие нажатия клавиши. Разрешить пользователю вручную устанавливать устройство ввода в настройках приложения. Таким образом, нажатие клавиши A и опция ввода «джойстик» запускают индивидуальный ответ вашего приложения. Решение третье: заплатите деньги производителю смартфона, предназначенного для вашего приложения, и он обновит ОС Android с помощью вашего собственного файла *.kl. Очень дорогой и бизнес-уровень создания приложений.

Другие вопросы по тегам