使用 Android 应用程序 (.apk) 安装键盘布局文件 (.kl)

问题描述 投票:0回答:3

我已经尝试和搜索了好几天,但无法为我的问题找到任何解决方案:

我正在尝试在 /system/usr/keylayout 中安装 .kl 文件,以重新映射我的应用程序的一些键盘按键。我有正确格式的正确 .kl 文件:Vender_XXXX_Product_XXXX.kl,如果我使用根资源管理器复制它,它就可以工作。

但我希望通过安装我的应用程序来安装它(无需root)。这意味着它必须包含在 .apk 文件中并在安装过程中复制!?

到目前为止,我的方法是使用接收器和 QUERY_KEYBOARD_LAYOUTS 意图。 为此,需要 .kcm 文件。这不适用于我的手机(Galaxy S3)。我不知道为什么,但它没有在设置中显示 PHYSICAL_KEYBOARD 设置项:(

无论如何,我认为/希望更好的方法是 NDK: 我尝试使用 ndk 并能够将一些本机 c 集成到我的应用程序中,但没有像我的 .kl 文件这样的“源”文件。 我希望 device.mk 文件能够以某种方式将我的 .kl 文件复制到 /system ,如下所示: 设备.mk 产品_复制_文件 += $(LOCAL_PATH)/Vendor_XXXX_Product_XXXX.kl:system/usr/keylayout/Vendor_XXXX_Product_XXXX.kl

这可能吗?在安装实际的 apk 时使用 NDK 自动将文件“安装”到 /system 吗? 如果是这样,你该怎么做?我对整个 makefile 和 NDK 感到困惑。以前从来没有用过它,我对 c 很不好。

如果你们中有人知道如何做我所要求的事情......请告诉我。我们将不胜感激!

android android-ndk keyboard
3个回答
4
投票

用apk包安装.kcm文件也不是不可能。事实上,布局应用程序就是这样做的。您的 QUERY_KEYBOARD_LAYOUT 走在正确的轨道上。

我想安装一个 .kl 文件,就像你一样,但我找不到任何关于它的好信息。因此,我只是在 .kcm 文件中使用了 map 关键字,它具有完全相同的效果。

在这里查看我的源代码,其中我允许用户在不root手机的情况下添加se_sv_dvorak布局kcm:https://github.com/innsmouthrain/se_sv_dvorak


2
投票

但我希望通过安装我的应用程序来安装它(无需root)。

那是不可能的。应用程序没有对

/system/usr/
的写访问权限,除非它们以 root 身份运行。

在安装实际的 apk 时使用 NDK 自动将文件“安装”到 /system 吗?

这是双重不可能的:

  • 您的应用程序在安装时无法获得控制权

  • 使用 NDK 编写的代码不会获得任何额外的操作系统权限,因此此类代码无法写入

    /system/usr/
    ,除非以 root 身份运行


0
投票

Android系统默认是只读的。只有重新挂载为读写才能写入系统。重新安装仅是 root 命令。这些键盘布局 *.kl 文件随智能手机一起提供,适用于蓝牙耳机、索尼 Playstation 3 等操纵杆、微软 Xbox 360 游戏控制器、任天堂 Wiimote、汽车音响系统。它们将设备特定信号转换为 Android 可理解的预设按键事件,它们在每个活动窗口/应用程序中的行为都不同。它们是由智能手机制造商预设的,就像每部新智能手机开箱即用的这些应用程序一样。它是商业性的,除非你向智能手机制造商付费,否则他们不会为竞争对手或开发人员、日常用户提供按键布局。 未知设备使用 Android generic.kl 键布局,并在每个活动应用程序/窗口和启动器中提供非常不同的按键。

解决方案一:root Android 操作系统并将您的 *.kl 文件推送到系统。

解决方案二:对您的应用程序进行编码,使其在发生按键事件时按照您想要的方式运行。让用户在应用程序选项中手动设置输入设备。因此,按键 A 和输入选项“操纵杆”会触发应用程序的自定义响应。 解决方案三:向您的应用目标智能手机制造商付款,他们会使用您的自定义 *.kl 文件更新 Android 操作系统。非常昂贵且商业级别的应用程序制作。

© www.soinside.com 2019 - 2024. All rights reserved.