将多个应用打包成一个应用程序

6
我正在开发一款使用多个第三方应用程序的Android应用程序,这些应用程序通过意图调用,例如第三方日历、网络广播等。因此,为了正确启动这些意图,这些应用程序需要被安装。是否可能将这些apk包含在我的应用程序中,以便在设置我的应用程序时它们也会自动安装? 手动让用户安装这些应用程序似乎是一种相当糟糕的方式... 有什么建议吗?
谢谢 Peter
1个回答

8
我的应用程序是否可以将这些 APK 文件包含在内,以便在安装我的应用程序时也自动安装它们?
这可能不是一个好主意。首先,除非您获得了这些开发人员的明确许可来捆绑这些文件,否则这可能构成版权侵犯。
其次,还需要考虑这些开发人员是否实际上公开了一组 API,使您能够按照此方式使用,并且该 API 是否是他们的专利或是通用系统的一部分(例如 ACTION_SEND)。用户应该能够安装任何满足通用 Intent 请求(例如 ACTION_SEND)的应用程序,而不必强制使用您指定的某个应用程序。您也不应当集成那些未公开文档和支持 API 或者未表达出有兴趣进行此类集成的应用程序。
然后,问题就变成了这些应用程序是否可以在以后进行更新,如果它们不是通过某个标准发布服务(例如 Android Market)原始安装的。
最后,这些 APK 文件会使您自己的 APK 文件变得更大,在设备上占用更多的空间。
如果您能解决这些问题,这应该是可能的。将 APK 文件打包为 assets,在第一次运行时将其复制到外部存储器中,然后使用正确的 MIME 类型通过 startActivity() 启动 ACTION_VIEW Intent 来查看它们。
但是,再次强调,这可能不是一个好主意。
最好的方式是,你的应用程序不应该依赖这些其他应用程序,所以用户是否有这些应用程序并不重要。您可以通过 PackageManagerqueryIntentActivities() 检测这些应用程序是否存在,然后使用它来确定是否要禁用应用程序的某些部分或引导用户安装额外的应用程序等。

这是一个不错的使用案例:假设我的应用程序依赖于ZXing条形码扫描器(http://code.google.com/p/zxing/)。他们似乎鼓励其他应用程序通过Intents(http://code.google.com/p/zxing/wiki/ScanningViaIntent)依赖于他们。如果我怀疑用户在首次使用时可能没有网络连接,将扫描仪与我的应用程序捆绑在一起会很不错。您认为这是否符合捆绑的条件,尽管您所描述的困难? - Jan Żankowski
@Jan Zankowski: 在我看来,这是不合理的绑定的典型例子。ZXing希望通过APK集成Barcode Scanner,正是为了能够更新应用程序。这就是为什么他们费心给出了具有自动检测逻辑和市场支持的集成JAR的原因。如果你一定要避免用户自己安装Barcode Scanner,那么至少直接将ZXing集成到你自己的代码中,因为它是开源的,这样你就不会浪费额外的空间。最终,无论Barcode Scanner是否可以按照你的要求发货,都是由ZXing决定的问题。 - CommonsWare
我有一个类似的情况。我想避免在C#中编写太多共享代码,所以我考虑用C#编写一些代码,其余部分使用JAVA,并使用意图使它们相互通信。因此,将两个apk文件捆绑在一起是有意义的。 - slott

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