权限:INJECT_EVENTS用于指导其他应用程序

blu*_*ile 6 permissions android keyevent code-injection

我知道这不是关于此权限的第一个主题,但是其他主题没有完成或者没有帮助我.

我需要的是使用Instrumentation来扩展KeyEvents.这很有效,并且比shell("input keyevent")方法快得多.但是,如果我想注入其他应用程序,我会捕获一个SecurityException.这并没有让我感到惊讶,所以我加入<uses-permission android:name="android.permission.INJECT_EVENTS" />了我的清单.Eclipse停止调试,告诉我只有系统应用程序才能使用此权限.所以我使用签名的apk工具编译并将该apk推送到/ system/app.重新启动,猜猜是什么

W/PackageManager( 3499): Not granting permission android.permission.INJECT_EVENTS to package com.<....> (protectionLevel=2 flags=0x8be45) 
Run Code Online (Sandbox Code Playgroud)

该应用仅针对一种特殊设备.所以我知道所有的规格,它根深蒂固.但是 su注射命令需要很长时间,并且需要SuperUser.我很乐意使用Instrumentation做到这一点,或者我还应该尝试其他的东西吗?

固件不是我写的,所以我没有平台密钥.

谢谢你的帮助!

编辑:获得平台键(开发人员使用正常的谷歌键),签名和对齐,然后将apk推送到/ system/app.还添加android:sharedUserId="android.uid.system"到我的清单中.在启动时,不再有logcat消息.但是,当我想发送keysync时,我仍然抓住了SecurityException.有任何想法吗?

EDIT2:这是摘录自ps.似乎包没有列为系统

u0_a108   5241  2399  492044 48968 ffffffff 40113ab0 S com.mypackage
Run Code Online (Sandbox Code Playgroud)

blu*_*ile 3

更新

使用此处的签名工具,然后继续阅读我的博客。


好的,我得到了正确的平台密钥,现在它就像一个魅力!我使用http://forum.xda-developers.com/showthread.php?t=1125626进行签名 ,并将signare文件夹中的testkeys替换为(将sign....重命名为testkey....)

signapk-key.platform.x509.pem
signapk-key.platform.pk8
Run Code Online (Sandbox Code Playgroud)

(谷歌为他们)

还要确保 zipalign 然后复制到 /system/app。无法以正常方式安装 .apk,因为它被标记为系统应用程序。