如何开发具有插件的应用程序?

8
你是否需要一个关于如何开发带“插件”的应用程序的概述或基础知识?
例如,如何为应用程序开发一种添加“主题”的框架?
有一个基本的应用程序和两个主题。用户应该能够下载另一个应用程序来获取某个主题。
原始应用程序和新下载的应用程序如何相互通信?
如何开发原始应用程序以仅从第二个主题应用程序中获取主题信息和图形资源?
我的理解是应用程序是完全独立的,因此我不清楚如何实现这一点。
2个回答

6
原始应用和新下载的应用之间如何进行通信?
对于一个主题来说,谁说它们必须进行通信?
如何开发原始应用程序以仅从第二个主题应用程序获取主题信息和图形资产?
步骤1:为您的软件包选择命名约定。例如,如果您的基本应用程序是com.abc.app,则其主题可以是com.abc.app.theme.*。
步骤2:当用户选择主题时,请使用PackageManager和getInstalledApplications()通过检查其包名称来查找您的主题。
步骤3:当使用主题时,请在PackageManager上调用getResourcesForApplication(),以获取主题应用程序的资源,以便您可以访问自己的内容。
我确信有一些策略(例如,主题大多是传送机,将其东西部署在外部存储器上的目录中,从中您的主应用程序读取信息),但这是我开始使用的策略,因为它应该要求最少的用户干预。

关于:使用PackageManager的“getResourcesForApplication()”方法获取主题应用程序的资源...您可以对自己以外的应用程序执行此操作吗?是否需要实现某些安全功能,以确保只有我的应用程序可以访问这些资源,而没有其他第三方应用程序可以访问?我认为这可能是我开始工作所需的缺失部分。 - Camille Sévigny
1
@CamilleSévigny:“你可以对自己之外的应用程序这样做吗?”--是的。“是否需要实现某些安全功能,以确保只有我的应用程序可以访问这些资源,而没有其他第三方应用程序可以访问?”--所有应用程序的所有资源都可以被所有应用程序读取,无论你喜不喜欢。 - CommonsWare
所有应用程序的所有资源都可以被所有应用程序读取,无论你是否喜欢。真没开玩笑。我一点都不知道。感谢你们的回复。 - Camille Sévigny
@CamilleSévigny:是的,当我第一次意识到这一点时,它真的让我震惊。 - CommonsWare
我已经测试过了(创建一个包含资源图片等的包),然后从主应用程序中读取包资源。这非常好! :) - Camille Sévigny
有没有使用这种方法来设置主题的示例应用程序? - Mohammad Reza Norouzi

0

我认为在这种情况下最干净的设计是在市场上只有一个应用程序,并且将主题可用于您自己的服务器上。然后用户可以从市场仅下载一次应用程序,然后应用您服务器上提供的主题。

但是,如果您喜欢将它们作为单独的市场条目,则可以在清单上设置android:sharedUserId标志,使它们全部在同一用户ID下运行,这将允许您之间共享文件(位图等)。记住他们都必须使用相同的证书签名。

可能会使用户感到困惑的是,他们将能够在下载主应用程序之前下载附加组件...在这种情况下,您必须显示错误消息要求他们下载主应用程序。


我同意“在自己的服务器上提供主题”的方法 - 我假设 OP 已经考虑过并因某些原因放弃了这种方法。然而,sharedUserId 是有风险的,因为任何更改都意味着您的应用程序无法再读取自己的文件。 - CommonsWare
sharedUserId也适用于创建一个“完整”版本应用程序,该应用程序仅充当主应用程序的密钥,以启用功能吗? - Izkata
没有“服务器”哈哈。我同意从外部来源下载会很好,但这不是一个选项。我试图模拟市场上其他应用程序,你会看到“主题XXX适用于应用程序YYY”。这些不是完整的应用程序,而是它们的附加组件。 - Camille Sévigny
SharedUserID选项看起来不错。我会尽快研究并接受答案。 - Camille Sévigny

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接