0

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

我将此代码放在 external/vncagent 文件夹下。我能够构建它,并且我有一个 shell 脚本,它像 am script 一样调用主类。

运行它时出现以下异常。输入中的相同代码(即框架/基础/cmds/输入)似乎工作正常。

我得到的例外是:

android.os.RemoteException:未知的活页夹错误代码。0xffffff7
        在 android.os.BinderProxy.transact(本机方法)
        在 android.os.ServiceManagerProxy.getService(ServiceManagerNative.java:120)
        在 android.os.ServiceManager.getService(ServiceManager.java:55)
        在 mycom.service.vncapp.VNCController.getWinManager(VNCController.java:109)
        在 mycom.service.vncapp.VNCController.sendKeyEvent(VNCController.java:120)
        在 mycom.service.vncapp.VNCController.processCmd(VNCController.java:148)
        在 mycom.service.vncapp.VNCController.access$200(VNCController.java:29)
        在 mycom.service.vncapp.VNCController$InjectInput.run(VNCController.java:237)
        在 java.lang.Thread.run(Thread.java:856)

这是调用它的代码。

    私有同步 IWindowManager getWinManager()
    {
        if (null == m_winManager)
        {
            尝试
            {
                m_winManager = IWindowManager.Stub.asInterface(ServiceManager.getService(Context.WINDOW_SERVICE));
            }
            捕捉(可投掷的经验)
            {

            }
        }
        返回 m_winManager;
    }

谷歌搜索后,我想我需要用平台证书签署我的应用程序。我将 LOCAL_CERTIFICATE 添加到我的 Android.mk 文件中。那没有任何区别。

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

下面是我的 Android.mk 文件

# 版权所有 2008 Android 开源项目
#
LOCAL_PATH:= $(调用我的目录)
包括 $(CLEAR_VARS)

LOCAL_SRC_FILES := $(调用 all-subdir-java-files)
LOCAL_MODULE := vncagent
LOCAL_MODULE_TAGS := 可选
LOCAL_CERTIFICATE := 平台
包括 $(BUILD_JAVA_LIBRARY)

#ALL_PREBUILT += $(TARGET_OUT)/bin/vncagent
$(TARGET_OUT)/bin/vncagent : $(LOCAL_PATH)/vncagent | $(ACP)
    $(转换预建到目标)

构建 jar 后,我将 jar 和 shell 脚本推送到目标板 /data/mycom/vnc 文件夹并从 adb shell 启动它。

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

谢谢

4

0 回答 0