无法从android平台应用程序绑定到Windows_服务

无法从android平台应用程序绑定到Windows_服务,android,android-ndk,platform,android-build,Android,Android Ndk,Platform,Android Build,我有一个类似于input命令的android平台应用程序,它绑定到IWindowManager并注入关键输入 我将此代码放在外部/vncantt文件夹下。我能够构建它,并且我有一个shell脚本,可以像am脚本那样调用主类 我运行它时遇到以下异常。输入中的相同代码(即frameworks/base/cmds/input)似乎可以正常工作 我得到的例外是: android.os.RemoteException: Unknown binder error code. 0xfffffff7

我有一个类似于input命令的android平台应用程序,它绑定到IWindowManager并注入关键输入

我将此代码放在外部/vncantt文件夹下。我能够构建它,并且我有一个shell脚本,可以像am脚本那样调用主类

我运行它时遇到以下异常。输入中的相同代码(即frameworks/base/cmds/input)似乎可以正常工作

我得到的例外是:

android.os.RemoteException: Unknown binder error code. 0xfffffff7 at android.os.BinderProxy.transact(Native Method) at android.os.ServiceManagerProxy.getService(ServiceManagerNative.java:120) at android.os.ServiceManager.getService(ServiceManager.java:55) at mycom.service.vncapp.VNCController.getWinManager(VNCController.java:109) at mycom.service.vncapp.VNCController.sendKeyEvent(VNCController.java:120) at mycom.service.vncapp.VNCController.processCmd(VNCController.java:148) at mycom.service.vncapp.VNCController.access$200(VNCController.java:29) at mycom.service.vncapp.VNCController$InjectInput.run(VNCController.java:237) at java.lang.Thread.run(Thread.java:856) android.os.RemoteException:未知的绑定器错误代码。0xFFFFF7 在android.os.BinderProxy.transact(本机方法) 位于android.os.ServiceManagerProxy.getService(ServiceManagerActive.java:120) 在android.os.ServiceManager.getService(ServiceManager.java:55) 在mycom.service.vncap.VNCController.getWinManager(VNCController.java:109)上 位于mycom.service.vncap.VNCController.sendKeyEvent(VNCController.java:120) 位于mycom.service.vncap.VNCController.processCmd(VNCController.java:148) 在mycom.service.vncap.vncontroller.access$200(vncontroller.java:29) 位于mycom.service.vncap.VNCController$InjectInput.run(VNCController.java:237) 运行(Thread.java:856) 这是调用它的代码

private synchronized IWindowManager getWinManager() { if (null == m_winManager) { try { m_winManager = IWindowManager.Stub.asInterface(ServiceManager.getService(Context.WINDOW_SERVICE)); } catch(Throwable exp) { } } return m_winManager; } 专用同步iWindows管理器getWinManager() { if(null==m_winManager) { 尝试 { m_winManager=IWindowManager.Stub.asInterface(ServiceManager.getService(Context.WINDOW_SERVICE)); } 捕获(可丢弃经验) { } } 返回m_winManager; } 在谷歌搜索之后,我想我需要用平台证书签署我的应用程序。我将本地证书添加到我的Android.mk文件中。那没什么区别

我的应用程序遵循与标准平台输入命令相同的模型,并作为平台的一部分进行构建。我的应用程序仍然无法访问iWindows Manager

下面是我的Android.mk文件

# Copyright 2008 The Android Open Source Project # LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_SRC_FILES := $(call all-subdir-java-files) LOCAL_MODULE := vncagent LOCAL_MODULE_TAGS := optional LOCAL_CERTIFICATE := platform include $(BUILD_JAVA_LIBRARY) #ALL_PREBUILT += $(TARGET_OUT)/bin/vncagent $(TARGET_OUT)/bin/vncagent : $(LOCAL_PATH)/vncagent | $(ACP) $(transform-prebuilt-to-target) #版权所有2008安卓开源项目 # 本地路径:=$(调用我的目录) 包括$(清除变量) 本地\u SRC\u文件:=$(调用所有子目录java文件) 本地_模块:=vncagent 本地模块标记:=可选 本地证书:=平台 包括$(构建JAVA库) #所有预构建+=$(目标输出)/bin/vncage $(目标输出)/bin/vncagent:$(本地路径)/vncagent$(ACP) $(将预构建转换为目标) 构建jar后,我将jar和shell脚本推送到targetboards/data/mycom/vnc文件夹,并从adb shell启动它

2013年4月30日编辑:
我放弃了这种方法(即构建J2SE类型的jar并调用主类)。代码已编译,但无法绑定到远程绑定器。相反,我创建了一个Android服务,并包装了这个可以通过intent调用的逻辑。我必须将其构建为Android平台源代码的一部分,因为我使用的是来自私有API的类。这样我取得了很大的进步


谢谢

您是否尝试过像普通应用程序那样获取此令牌?(即通过getSystemService(Context.WINDOW_服务))。我认为出于某种原因,您在访问ServiceManager时遇到了问题,并且在您的情况下,您可能不需要访问上下文才能正常工作。这是带有main()方法的J2SE样式的类。我的应用既不是活动也不是服务。