Android 打包与其他应用共享的多个组件

Android 打包与其他应用共享的多个组件,android,Android,我计划部署几个应用程序,这些应用程序将共享一个“核心功能助手”组件,并希望避免要求用户安装两个“应用程序”(例如“核心”+“插件组件X”)来开始。我还希望在安装两个或更多组件时,避免在用户设备上重复“帮助器”组件代码 因此,将有许多有效的安装。例如,设备上的一些有效安装可能是—— 磁芯+插头A 核心+插件B 铁芯+插头A+插头B 磁芯+插头A+插头B+插头C 所有组件都有用户界面,核心将包括至少一个小部件,其他组件将从用户的角度“插入”到其中 在市场上,我想单独提供“插件A”、“插件B”等,而不

我计划部署几个应用程序,这些应用程序将共享一个“核心功能助手”组件,并希望避免要求用户安装两个“应用程序”(例如“核心”+“插件组件X”)来开始。我还希望在安装两个或更多组件时,避免在用户设备上重复“帮助器”组件代码

因此,将有许多有效的安装。例如,设备上的一些有效安装可能是——

  • 磁芯+插头A
  • 核心+插件B
  • 铁芯+插头A+插头B
  • 磁芯+插头A+插头B+插头C
  • 所有组件都有用户界面,核心将包括至少一个小部件,其他组件将从用户的角度“插入”到其中

    在市场上,我想单独提供“插件A”、“插件B”等,而不是强迫用户独立安装“核心应用”。虽然这看起来很傻,但我认为这会让用户在第一次想要获得一个插件所提供的功能时就不得不安装两个应用程序

    由于目前市场上不可能将应用程序动态有条件地打包到单个apk中,我的问题是-

    有没有一种优雅而高效的方法来完成这种模块化UI设计,而不必要求用户第一次安装(并最终更新)两个应用程序?(当然,我们不希望在设备上有太多的代码重复。)



    编辑:我对上面的问题进行了广泛的编辑,以使其更加清晰。我最初使用的术语“组件”是不幸的,因为它们不一定是Android代码组件(即活动、提供商、服务等)。我在上面的编辑中使用了术语“插件”,以明确这是为了方便用户在安装时使用,并避免在用户设备上重复代码

    经过进一步的研究,我得出结论,从用户的角度来看,这是不可能优雅地完成的

    实现这一目标最合适的方法是单独打包核心应用程序,当用户安装其中一个插件时,使用意图测试核心是否存在。如果没有,则将用户引导到市场,在那里他们可以安装核心应用程序。
    将此标记为已关闭,但如果出现更好的答案,我将更新。

    经过进一步研究,我得出结论,从用户的角度来看,这无法优雅地完成

    实现这一目标最合适的方法是单独打包核心应用程序,当用户安装其中一个插件时,使用意图测试核心是否存在。如果没有,则将用户引导到市场,在那里他们可以安装核心应用程序。
    将此标记为关闭,但如果出现更好的答案,我将更新。

    这是我自己处理的问题。Android并不是为了在应用程序之间实现这种共享而设计的——出于安全考虑,这实际上是Android的设计原则。尽管您可能很难“删除”已安装应用程序的一部分,但您可能希望了解:a)服务、b)内容提供商,以及c)自定义类加载器。相反,Android非常适合这种共享。整个意图体系结构就是为此而设计的。问题是如何以一种降低复杂性和用户困惑的方式打包组件以供分发。。。。以及应用程序如何管理其他应用程序已安装的组件、取消发布有利于其自身的“国外”服务、验证其他应用程序组件的真实性等-这与Android的安全架构没有太大关系。-也许还可以看看,例如,并注意Android的sharedUserId。谢谢Hanno。我认为,您关于使用sharedUserId的建议,与ICS中添加的ACTION_UNINSTALL_软件包相结合,确实让我达到了我的目的。你能发布一个答案让我检查一下吗?还是我应该?这是我自己处理过的问题。Android并不是为了在应用程序之间实现这种共享而设计的——出于安全考虑,这实际上是Android的设计原则。尽管您可能很难“删除”已安装应用程序的一部分,但您可能希望了解:a)服务、b)内容提供商,以及c)自定义类加载器。相反,Android非常适合这种共享。整个意图体系结构就是为此而设计的。问题是如何以一种降低复杂性和用户困惑的方式打包组件以供分发。。。。以及应用程序如何管理其他应用程序已安装的组件、取消发布有利于其自身的“国外”服务、验证其他应用程序组件的真实性等-这与Android的安全架构没有太大关系。-也许还可以看看,例如,并注意Android的sharedUserId。谢谢Hanno。我认为,您关于使用sharedUserId的建议,与ICS中添加的ACTION_UNINSTALL_软件包相结合,确实让我达到了我的目的。你能发布一个答案让我检查一下吗,还是我应该?