如何实施API,以便其他开发人员可以添加自定义视图,主题,具有新功能的完整模块,并可以访问我的应用中的对象?
就我而言,Api适用于绘图应用程序。我想支持以下内容:
答案 0 :(得分:1)
应用可以广播其他应用可以接收的Intent
。这些意图可以包含您希望在两者之间传递的各种形式的信息。
因此,您可以定义其他应用可以实施的一组Intent
操作。
您的应用可以搜索实施这些操作的其他任何人,并在需要时调用它们。
这允许其他开发人员为您的应用编写模块,并且您可以控制在您的应用和另一个应用之间传递的数据。
The answer by j__m似乎暗示了这种方法。
注意通过这样的API对外部模块进行过多控制。如果您允许第三方应用程序控制您自己的对象,则存在明显的安全问题。
查看这些问题以进行相关讨论:
您可能还希望了解如何实施Service
来处理这些请求,具体取决于此API的使用方式。
这将允许您的应用处于有效状态,但不可见。
接收BroadcastReceiver
广播的API Intent
类可以调用Service
来处理命令或请求。
答案 1 :(得分:1)
使用PackageManager
查找应被视为您的扩展程序的应用程序。你可以用各种方式做到这一点。例如,您可以使用PackageManager.queryIntentActivities()
查找包含处理特定意图的活动的所有应用。或者,您可以使用PackageManager.getInstalledPackages()
列出设备上的所有应用,然后按包名,元数据查找扩展名,是否持有您定义的权限等。
找到您的扩展程序后,您需要决定如何与它们进行互动。最安全的机制是使用意图来调用其他应用程序提供的活动,接收器或服务。
根据您要求的内容 - 对对象和视图的任意访问 - 您可能更愿意使用DexClassLoader
将其他应用的代码直接加载到您的流程中;这让其他应用程序可以随心所欲,包括创建视图,更改外观等等。它还允许其他应用程序使用您的所有程序包权限,因此您肯定希望让用户知道另一个应用程序具有这种访问权限。正如我之前提到的,你可以定义一个权限,例如"充当我的应用程序的插件"并要求其他应用程序列出该权限以便加载。
答案 2 :(得分:0)
如果它只是java文件,那么您可以将其打包为jar
文件以进行分发。
如果你有xml
个包含布局,维度和其他资源的文件,那么最好在eclipse中创建一个android项目,或者只是一个简单的eclipse java项目,并从Project Properties中标记它Is Library
。您可以在github上托管这些文件。