1

我有一个使用私有 Android binder api(特别是 IWindowManager)的 Android 服务。当我将其构建为 Android 平台源代码的一部分并将其安装在设备上(我有 Uboot 访问权限等)时,它工作正常。
我不喜欢 GIT,所以我将 GIT 之外的服务移到了不同​​的版本控制中,我无法访问 android 源,但我可以使用 Android sdk 构建工具来构建它。
由于 IWindowManager 是隐藏的 api,sdk 构建系统使我的构建失败。我创建了一个单独的 android.jar,其中包含来自 sdk 的 android.jar 以及来自平台构建的 framework.jar。我为此使用了 dj-dex2jar。
我使用了一个自定义的 Ant 任务(即支持 Java ant 代码的 Ant taskdef)来更改 sdk 构建系统使用的引导类路径。现在我的服务使用 Android 构建工具构建,但使用的是我创建的自定义 android.jar。
当我在我们的设备上安装这个 apk 时,我在 IWindowManager 服务上调用 injectKeyEvent() 时发现它失败了。该服务拒绝来电,说我的应用没有 INJECT_INPUT 权限。这是预期的行为,因为我的应用不再是平台应用。
我可以访问平台密钥。一种选择是使用平台密钥对应用程序进行签名并开始执行。但这里有一个警告。我的应用程序还需要从一个内部应用程序访问 Binder 服务,该应用程序需要我们的发布密钥签名的应用程序。

我该如何解决这个问题?我喜欢我的服务能够调用要求它由平台密钥签名的绑定器调用,并且能够调用需要它由我们自己的发布密钥签名的绑定器调用。

有任何想法吗?

谢谢

4

1 回答 1

0

在我的 ROM 中,我只使用平台密钥进行访问检查。所以我建议你让内部APP接受使用平台密钥的调用进程。

以我的经验,一个应用程序只能由一个密钥签名。如果您需要更多的安全检查,您应该为此添加其他策略,例如包名检查。

于 2014-04-12T16:27:43.480 回答