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

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

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

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

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

В любом случае, я думаю/надеюсь, что лучший способ - это NDK: я попытался использовать ndk и смог интегрировать некоторые собственные c в свое приложение, но не «исходные» файлы, такие как мой файл .kl. Я надеялся, что файл device.mk каким-то образом сможет скопировать мой файл .kl в /system следующим образом:

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

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


person user3072250    schedule 05.12.2013    source источник
comment
Почему вы пытаетесь установить файл keylayout? Они определяют поведение аппаратного обеспечения, похожего на клавиатуру, и составляются людьми, которые пишут драйверы устройств. Схема именования связана с регистрацией водителя. Чего именно вы пытаетесь достичь?   -  person Dave    schedule 10.12.2013


Ответы (2)


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

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

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

person innsmouth.rain    schedule 05.02.2014
comment
Привет innsmouth.rain, я посмотрю сегодня вечером и попробую ваши предложения. Большое спасибо за ответ... - person user3072250; 06.02.2014
comment
Я пытаюсь использовать .kcm вместо .kl, и это работает. Однако я до сих пор не могу понять, почему .kl не работает. - person NTj; 27.04.2015
comment
Ссылка сейчас не работает. Вилка примера, ссылка на который приведена выше: github.com/abbeyanke/se_sv_dvorak - person micwallace; 05.04.2019

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

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

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

Вдвойне невозможно:

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

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

person CommonsWare    schedule 05.12.2013
comment
Fist of: Большое спасибо за быстрый ответ. Вы, насколько я понял, правы. НО: Почему существуют эти файлы Vendor.kl? Их цель — установить в /system/usr/keylayout/ и записать в виде простого текста, чтобы их было легко создавать. - person user3072250; 06.12.2013
comment
@ user3072250: Почему существуют эти файлы Vendor.kl? -- Понятия не имею, извините. - person CommonsWare; 06.12.2013