【问题标题】:How to provide an api for other developers to use [closed]如何提供 api 供其他开发人员使用 [关闭]
【发布时间】:2014-07-05 21:08:44
【问题描述】:

我如何实现 API,以便其他开发人员可以添加自定义视图、主题、具有新功能的完整模块并访问我的应用程序中的对象?

在我的情况下,Api 用于绘图应用程序。我想支持以下内容:

  • 自定义绘图工具,例如直线,虚线。还应该支持编辑直线的起点和终点。
  • 添加新工具,例如带有菜单条目的刀具
  • 添加对其他文件格式的支持
  • 主题支持
  • 访问所有绘图(内容提供者)
  • 获取当前打开的文档列表
  • 打开文档

【问题讨论】:

  • 这是一个相当广泛的问题。
  • 请添加更多关于您希望完成的内容。如果我理解正确,请告诉我。
  • 的。看起来我和 j__m 描述的技术是正确的方法。我刚刚在我正在开发的应用程序中再次做了类似的事情。幸运的是,android 让这种类型的交互变得非常容易。

标签: android


【解决方案1】:

应用可以广播Intents,其他应用可以接收到。这些意图可以包含您希望在两者之间传递的各种形式的信息。

因此您可以定义一组 Intent 其他应用可以实施的操作。

您的应用可以搜索实现这些操作的任何其他应用,并在需要时调用它们。

这允许其他开发人员为您的应用编写模块,并且您可以控制在您的应用和其他应用之间传递哪些数据。

The answer by j__m 似乎建议采用这种方法。


注意不要通过这样的 API 对外部模块进行过多控制。如果您允许 3rd 方应用程序控制您自己的对象,则会出现明显的安全问题。

查看这些问题以进行相关讨论:


您可能还想查看实现Service 来处理这些请求,具体取决于此 API 的使用方式。

这将使您的应用处于活动状态,但不可见。

接收Intent 广播的API BroadcastReceiver 类可以调用您的Service 以处理命令或请求。

【讨论】:

    【解决方案2】:

    使用PackageManager 查找应被视为您的扩展程序的应用程序。你可以通过各种方式做到这一点。例如,您可以使用PackageManager.queryIntentActivities() 查找所有包含处理特定意图的活动的应用程序。或者,您可以使用PackageManager.getInstalledPackages() 列出设备上的所有应用,然后按包名称、元数据、它们是否拥有您定义的权限等查找扩展。

    找到扩展程序后,您需要决定如何与它们交互。最安全的机制是使用意图调用其他应用提供的活动、接收器或服务。

    根据您要求的类型 - 对对象和视图的任意访问 - 您可能更喜欢使用 DexClassLoader 将其他应用程序的代码直接加载到您的进程中;这可以让其他应用程序做它想做的任何事情,包括创建视图、更改外观等。它还允许其他应用程序使用您的包的所有权限,因此您肯定希望让用户知道其他应用程序有那种访问。正如我之前提到的,您可以定义“充当我的应用程序的插件”之类的权限,并要求其他应用程序列出该权限才能加载。

    【讨论】:

      【解决方案3】:

      如果它只是 java 文件,那么您可以将其打包为 jar 文件以进行分发。

      如果您有包含布局、尺寸和其他资源的 xml 文件,那么最好在 eclipse 中创建一个 android 项目或只是一个简单的 eclipse java 项目并从 Project Properties 中将其标记为 Is Library。您可以在 github 上托管这些文件。

      【讨论】:

        猜你喜欢
        • 2011-09-28
        • 1970-01-01
        • 2016-09-19
        • 1970-01-01
        • 2021-08-28
        • 1970-01-01
        • 2017-06-17
        • 2021-09-11
        • 2016-09-01
        相关资源
        最近更新 更多