【技术探讨】关于坚果root之后键值修改的讨论’

【技术探讨】关于坚果root之后键值修改的讨论’

本帖最后由 老兵猫族 于 2017-5-16 12:25 编辑 锤子论坛里,真正玩机器的帖子太少了,这与M系列不开放root有很大关系。而对于坚果,如何发挥左侧键的更多功能,大家来讨论一下。例如(我只是举个例子,还有很多种应用),把左侧键修改为 Left 和 right ,这样可以移动光标等等。其他厂商的修改键值主要是:

第一步:

首先修改按键映射文件。gingerbread/sdk/emulator/keymaps/qwerty.kl。该文件确定了linux键值与Android键值的对应关系。

注意事项:linux键值的选择不是没有限制的。选择不当,可能会导致上层不能获取到键值。

第二步:

修改framework下的文件:

gingerbread/frameworks/base/core/Java/android/view/KeyEvent.java gingerbread/frameworks/base/include/ui/KeycodeLabels.h gingerbread/frameworks/base/core/res/res/values/attrs.xml gingerbread/frameworks/base/libs/ui/Input.cpp gingerbread/frameworks/base/native/include/android/keycodes.h gingerbread/frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java

修改内容:增加按键支持,对原生按键采用input.h中对应宏定义,对非标准按键采用input.h中功能键宏定义。

在KeyEvent.java文件中,对新增加的按键需要添加类似如下注释:

[java] view plaincopy
/**{@hide}*/  public static final int KEYCODE_F1    = 135;
或者在terminal下运行:make update-api

否则会报错。

此外,还需要将 private static final int LAST_KEYCODE的值进行修改,改为android键值的最大值。

PhoneWindowManager.java主要是对一些特殊按键的处理,比如HOME,POWER等。

在android中,上层可使用的键值默认情况下是92个,从0-91;一般情况下,这些键值是够用的,但是如果想扩充的话,还是需要添加新的键值的,那么如何将一个新的键值从驱动的设置映射到上层,使应用可以对我们自定义的键值进行相应的处理呢? 对keypad来说,涉及到的文件有以下几个: 1,/vendor/qcom/7k_ffa_keypad.kl 首先在此文件中,添加新的键值信息:Example: key 123 WLS flag 注意:新加的键值不要与已有的重复。 2.kernel/arch/arm/mach-msm/keypad_surf_ffa.c 在keypad对应的键位添加自定义的键码如 :123 3. frameworks/base/include/ui/keycodeLabels.h 在数组keycodes 中添加 新定义的信息 { "MUTE", 91 },{ "WLS" , 92 } 枚举类型 KeyCode 中添加 kKeyCodeMute = 91 kKeyCodeWLS= 92 4.frameworks/base/core/res/res/values/attrs.xml 5. frameworks/base/core/java/android/view/KeyEvent.java public static final int KEYCODE_MUTE = 91; public static final int KEYCODE_WLS = 92; 注意: private static final int LAST_KEYCODE = KEYCODE_MUTE; 应改为: private static final int LAST_KEYCODE = KEYCODE_WLS; 在函数 public final boolean isSystem() 中,同样需要添加:

case KEYCODE_SEARCH: case KEYCODE_WLS:

//注意:现在(Android 2.3)这个函数调用的是frameworks\base\libs\ui\Input.cpp中的bool KeyEvent::isSystemKey(int32_t keyCode) //这里使用的按键定义在./development/ndk/platforms/android-9/include/android/keycodes.h 通过以上的更改,新的键值就添加上去了,由于更改了 KeyEvent,影响到了API, 所以需要make update-api 如果对新键值进行处理,可以通过获取相应的keycode,对它进行处理; 对于按键事件的处理一般如下文件中 6. frameworks/policies/base/phone/com/android/internal/policy/impl/PhoneWindowManager.java 综上可知,我们可以根据需求定义自己的键值,并对键值所对应的事件信息进行合理化处理。注:7k_ffa_keypad.kl是专门给7k_ffa_keypad输入设备使用的keylayout文件,所以修改7k_ffa_keypad.kl 文件只是给键盘输入增加键值。如果是其他设备的输入,如x_input,而且当没有x_iput.kl存在的时候,那么默认的kl文件就是 qwerty.kl(android-root/development/emulator/keymaps/qwerty.kl)这个很重要。也就是说需要实现明白添加的键值是否是7k_ffa_keypad的input event

我的理解:看了一下key character map的处理,是通过读取kcm文件然后使用驱动程序提供的ioctl函数去修改来自输入设备的扫描码和系统预定义的keycode的映射关系。 kl文件应该也可以这么理解。这样的话,对于硬件扫描码,只需要修改这个kl文件。上层得到的都是系统预定义的keycode。

重要补充:

映射关系:ir硬件扫描码在驱动里面被 映射为 kernel/include/linux/input.h里面定义的某个键值。但是这个键值只在linux系统中使用。

Android通过源码目录下的device/xxx/xxx.kl( keylayout )文件完成linux键值到Android系统要使用的键值的映射

根据两个源码的对比:KeycodeLabels.hattrs.xmlkeycodes.h三个文件有改动特别注意:在文件device/xxx/xxx/xxx.kl(即键值对)文件中,重新建立按键扫描码与系统自定义的按键名称的映射关系按键扫描码可以通过串口中输入getevent,然后点击按钮时看打印信息获得扫描码不能重复,否则该文件失效
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~·简单说,大部分标准实体按键,是修改*.kl文件。坚果应该也类似。
君莫笑dai回复:技术贴,支持一个。
YQ601好热好耗电回复:我就服你,真的,很少看到这么有技术的贴
xfmiao回复:刚用大爆炸,搜索了下关键字,。。复制粘贴?
老兵猫族回复: 本帖最后由 老兵猫族 于 2017-5-16 13:43 编辑
xfmiao 发表于 2017-5-16 12:56刚用大爆炸,搜索了下关键字,。。复制粘贴?
你可以 打开qwerty.kl看一下,里面是键值还有几个kl文件,现在需要知道坚果哪个是决定左侧键的键值文件,另外不知道是否可以向其他安卓手机一样直接修改。
老兵猫族回复:希望 尽快提供 M1L的 root
sam哥哥回复:来自D板带着爱
老兵猫族回复:
sam哥哥 发表于 2017-5-17 15:33来自D板带着爱
哈哈哈哈
飞雨如丝回复:
老兵猫族 发表于 2017-5-16 13:36你可以 打开qwerty.kl看一下,里面是键值
不能root 改了有什么用????改了又替换不了系统文件
老兵猫族回复:
飞雨如丝 发表于 2017-5-17 17:25不能root 改了有什么用????改了又替换不了系统文件
坚果可以root,坚果pro和M1L不能root
飞雨如丝回复:
老兵猫族 发表于 2017-5-17 17:27坚果可以root,坚果pro和M1L不能root
哦哦
  • 姓名:
  • 专业:
  • 层次:
  • 电话:
  • 微信:
  • 备注:
文章标题:【技术探讨】关于坚果root之后键值修改的讨论’
本文地址:http://www.55jiaoyu.com/show-687382.html
本文由合作方发布,不代表展全思梦立场,转载联系作者并注明出处:展全思梦

热门文档

推荐文档