该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
最近玩一些全键盘游戏,比如elona,nethack等等这类游戏,模拟器的键盘就很不够用,那个 游戏键盘 软件用起来体验也很不好,今天自己就琢磨着为这些游戏专门写一个键盘.
1.首先尝试了写一个简单的键盘,发现无法实现跨进程用(也就是说只能在自己编写的软件中使用)
这个问题是重点,就算在本应用写了个悬浮窗,浮在其他应用上面,但按钮输入的物理按键事件(A,B,shift等按键)必须要有系统应用权限才能收到,所以,这个方法没法实现
附:发送物理按键事件的代码
Instrumentation inst =new Instrumentation();
inst.sendKeyDownUpSync(KeyEvent.KEYCODE_A) //发送A按键的事件(注:需要在子线程中执行,当然,我觉得可能没几个人会看我这个教程)
2.既然没法实现跨进程,那就换种思路,我就干脆不跨进程了
3.怎么才能不跨进程,那就是把Exagear和自己写的键盘放在同一个进程里运行,有了这个思路就好办了
首先在清单文件中的父标签中添加android:sharedUserId="com.xxx.xxx"
然后用反编译工具(这里推荐APK编辑器),找到Exagear的清单文件,将上面代码也添加到其中
之后在自己的键盘和Exagear清单文件中的application标签中添加android:process="com.xxx.xxx"
这样就把他们放在同一个进程中了.经过测试,已经可以实现键盘输入了.
4.这其中设计到几个麻烦的问题,第一个就是签名问题,因为设置了android:sharedUserId,他们的签名必须一致,这里就需要创建一个文件,在APK编辑器中设置好打包的签名,自己软件打包时也要使用该签名才行
5.最后就是编辑专用软键盘布局的时候了,已经做到这种程度了,那键盘想成为什么样就完全随心所欲了
(要将键盘写成悬浮窗,从服务中启动,之后因为和Exagear运行在同一个进程里,只要Exagear不被杀死,键盘就一直存在)
6.专属键盘还有一个好处就是不影响本身键盘的使用,因为我经常需要玩游戏的时候切到QQ聊天,如果用 游戏键盘
我还需要把键盘切换成输入法才行,很不爽啊
注:等我把键盘写好了再放图