在不同的APK中扩展我的Android应用程序

时间:2011-11-18 13:15:36

标签: android

我正在开发一个应该可扩展的应用程序 我希望用户安装基础应用程序,然后通过安装扩展包(不同的APK)或插件(如go启动器和主题包或附加小部件)来扩展它。

我唯一能找到的就是使用库项目来共享代码,但这并不符合我的需求。有人可以解释它是如何完成的吗

[编辑] 更具体地说,这就是我想要做的: 我有一组动画场景,效果和过渡 动画场景是代码和资源的组合 用户可以选择第一个场景,第二个场景等。

我希望能够添加更多场景,但我不想将它们全部包含在一个APK中 我想让用户下载他选择的场景。

2 个答案:

答案 0 :(得分:4)

要构建此类互动,ContentProvider将是您的朋友。我可以考虑构建这种类型的系统有两种选择,具体取决于您希望信息流向哪个方向。

选项1:主应用程序中的单个ContentProvider

在主应用程序中定义ContentProvider,为其他应用程序创建外部接口,以便将数据读/写到公共位置。该提供程序可以访问您的应用程序所需的场景数据文件/数据库。

每个后续插件应用程序访问主ContentProvider(如果用户运行插件但尚未安装主应用程序,也会警告用户)并通过将其写入ContentProvider来安装其特定内容。通过这种方式,每个插件都可以充当“安装程序”,这意味着用户必须从Market下载并运行插件才能安装场景内容。

选项2:每个“插件”应用都有自己的ContentProvider

此选项与上述相反。在每个插件应用程序中定义一个具有一致接口的ContentProvider,并从主应用程序中获取一个扫描系统以获取新插件的方法(这可以通过PackageManager完成)并将每个提供程序的数据读入它的主要本地商店。

这里的区别在于用户不必运行每个插件包,因为主应用程序将负责获取数据。但是,定义多个提供程序的复杂性更高。例如,您必须确保即使每个提供程序具有相同的基本接口,它们也不能具有单个公共权限,因此您必须扫描系统以查找您自己的程序包名称,并根据该信息解析提供程序

<强>编辑

话虽如此,我觉得我应该提一下,我不相信这是向用户提供内容的好方法。我个人对这个问题的感觉就是这种方法会污染用户的设备,使用的应用程序图标对他们没有好处,并且很难在移动设备上隐藏这种东西。一种更简单,更清晰的方法是将您的“附加”内容存储在服务器上(如S3和SimpleDB等AWS服务几乎是免费的)并使用Google的应用程序内结算等服务让您的用户购买新内容并将其直接下载到单个应用程序中,而不是让它们返回市场并购买更多应用程序。

希望有帮助!

答案 1 :(得分:0)

  

我有一组动画场景,效果和过渡动画场景是代码和资源的组合用户可以选择第一个场景,第二个场景等。

如果“动画场景”是活动。您的加载项APK只是发布自己的活动集,并使用PackageManager来确定您的插件安装方式以及如何使用它们。