Инсталиране на файл с клавиатурно оформление (.kl) с приложение за Android (.apk)

Опитвах и търсих дни наред и не успях да намеря никакво решение за моя проблем:

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

Но искам да се инсталира (без root), като инсталирам приложението си. Което означава, че трябва да се включи в .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_XXXX_Product_XXXX.kl

Това изобщо възможно ли е? Да използвате 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 файл, точно като вас, но не можах да намеря добра информация за него. Така че вместо това просто използвах ключовата дума map в моя .kcm файл, има абсолютно същия ефект.

Разгледайте моя източник тук, където позволявам на потребителя да добави kcm оформлението se_sv_dvorak без руутване на телефона: 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

Но искам да се инсталира (без root), като инсталирам приложението си.

Това не е възможно. Приложенията нямат достъп за запис до /system/usr/, освен ако не се изпълняват като root.

Да използвате NDK за автоматично „инсталиране“ на файл в /system, докато инсталирате действителния apk?

Това е двойно невъзможно:

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

  • Кодът, написан с помощта на NDK, не получава никакви допълнителни OS права и така такъв код не може да пише в /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