【问题标题】:Can one access Android API in a Java Application outside Android?可以在 Android 之外的 Java 应用程序中访问 Android API 吗?
【发布时间】:2012-04-09 07:53:06
【问题描述】:

我想在 Android 项目之外访问 Android API 类。例如,是否可以将对象指向连接到机器或正在运行的模拟器的设备的Context

这将允许在 Android 设备外部访问系统服务,例如 PowerManagerActivityManager。如果不是通过Context 对象,有没有其他方法可以访问Android 之外的设备/avd 的系统服务?

【问题讨论】:

  • 这听起来更像是您想要做的是远程控制 Android 设备,对吗?否则你为什么要这个..
  • 那种。还知道设备的状态并据此采取行动。

标签: android android-service


【解决方案1】:

没办法。分布式 android API 类只是足以针对它们进行编译的存根。 即使是最无辜的东西也会被剔除以在调用时抛出 RuntimeException。如果您想了解系统的状态,则必须使用 SDK 工具。或者通过一些远程访问技术编写应用暴露android对象

【讨论】:

  • 好的。 SDK 工具是一种按原样使用的方式,我真的很想根据设备的状态进行一些操作。我想我将不得不在设备上制作一些东西并使其与外部进行远程通信。另一种评估方法是使用 adb。但是不确定是否所有事情都是可能的,例如查找正在运行的进程。
  • 你可以从 adb 得到你可以从 shell 得到的一切。运行 ps 是可能的。而且我认为 ADB 的来源是可用的 - 所以只要看看它使用什么协议。
【解决方案2】:

我非常怀疑这是可能的。分布式 SDK 类不包括内部 API 的许多部分。例如,参见this thread。此外,如果没有系统(或模拟系统)来备份它,像PowerManager 这样的系统服务对象又有什么用呢?

【讨论】:

  • 首先,正在运行的系统需要系统服务对象(连接设备或运行 avd)。其次,它有助于了解实际系统之外的设备/模拟器系统的状态。
  • @wowamit - 我认为您能做的最好的事情就是编写一个将特定功能公开给外部连接的服务(例如,手机上托管的 Web 服务)。您不能编写直接链接到 Android API 中的类的 Java 桌面程序。
  • 谢谢!看起来远程通信是唯一的方法。尽管希望至少使用与 Android 范围之外的系统状态相关的对象。
【解决方案3】:

听起来你想要做的并不是真正访问设备上的东西,而是远程控制设备。在这种情况下,您应该研究一些外部工具。这些工具主要侧重于测试,并且基于应用程序的检测。你可以先看看robotium 和monkeyrunner,因为它们提供了一些功能,可以帮助你完成你想要的。除此之外,您还可以做这些工具所做的事情并编写一个应用程序来侦听来自 adb 的意图,根据这些意图执行操作等......,但您显然会在高层次上进行大量沟通,所以这可能不是最有效的(而且我不确定您将如何传输大量数据,这对于真正的 RPC 来说是必需的,听起来您想要这样做)。

【讨论】:

  • 我在使用 Robotium 和 Monkeyrunner 时遇到的几个问题。一,它是特定于应用程序的。其次,即使是这样,他们也假设可以访问代码,这可能并非每次都如此。尽管确实同意您关于必须进行大量沟通的观点,但这正是我想避免通过设备上选项的原因。
  • 你肯定需要在设备上运行一些东西,因为设备和 Android 操作系统目前不支持这种东西......
  • Guess 必须想办法解决这个问题。无论如何感谢您的指点。
猜你喜欢
  • 1970-01-01
  • 2023-01-19
  • 2013-02-21
  • 1970-01-01
  • 2012-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多