我想将一个应用程序(让我们称之为 app1)集成到另一个应用程序(app2)中,该应用程序将通过单击按钮调用 app1。在不将 app1 的源代码暴露给 app2 的情况下,有哪些可能的方法来实现这一点。app1 不应该作为单独的应用程序安装,它应该是 app1 的一部分。
我正在考虑以某种方式将 app1 转换为 jar 文件并将其集成到 app2 中,这可能吗?或者建议我一些方法来实现上述要求。
我想将一个应用程序(让我们称之为 app1)集成到另一个应用程序(app2)中,该应用程序将通过单击按钮调用 app1。在不将 app1 的源代码暴露给 app2 的情况下,有哪些可能的方法来实现这一点。app1 不应该作为单独的应用程序安装,它应该是 app1 的一部分。
我正在考虑以某种方式将 app1 转换为 jar 文件并将其集成到 app2 中,这可能吗?或者建议我一些方法来实现上述要求。
如果应用程序 1 具有 android 资源文件(布局、xml 可绘制对象等)和 jar 依赖项,则无法避免暴露它们。
如果您愿意公开您的资源和外部 jar,您可以:
最终结果是一个没有 java 源文件但有资源的库项目,这个库项目可以在应用程序 B 中使用,而不会暴露你的 java 文件。
请注意,可能需要对 app1 进行一些重构。
据我了解,您的问题 app1 不是您的问题,但您想在您的应用程序 (app2) 中使用它的功能。如果是这种情况,那么您必须遵循 Android 的应用程序间通信规则,即 Intent。如果 app1 是一个通用实用程序应用程序(如条形码阅读器或图片编辑器等),那么您(作为开发人员)将熟知它们所需的意图,并且您可以毫无问题地使用它们。
现在,如果用户设备中没有安装 app1,您可以随时检查并提示用户安装它。此外,如果 app1 的许可政策没有问题,您可以将其 apk 与您的应用程序一起分发,并将其安装在用户的设备上。
这是一个检查应用程序是否已安装的代码示例(实际上它检查它是否可以启动,因此已安装):
public static boolean isAppInstalled(Context cx, String packagename) {
PackageManager pm = cx.getPackageManager();
Intent i = pm.getLaunchIntentForPackage(packagename);
return (i != null);
}
至于提示用户下载安装可以从这里开始
如果您从应用程序中分发 apk,您可以在此处查看如何启动它。
最后,关于将 apk 转换为 jar,我不知道这是否可行,但如果可行,那将是某种 hack,这不是创建应用程序的最佳实践。另一方面,有许多免费的 android 库(jar 文件),它们涵盖了非常广泛的功能领域,您可以很容易地将它们集成到您的应用程序中。
希望这可以帮助...
在我看来,意图系统正是您正在寻找的 - android 意图是为应用程序间通信而设计的 - 这是在其他已安装的应用程序中访问各种功能的标准方法(例如,它是您发送图像作为电子邮件或分享到面子书或在安装的图库软件中显示)。
意图系统允许两种方式的数据传递并且是安静的字符串。根据您选择发布此界面的交互的确切性质,以便其他应用程序可以以相同的方式与您交互。
我认为图书馆项目是您寻求的答案。
您应该将 App1 项目设置为库项目:右键单击 Eclipse 中的项目 -> 属性 -> Android -> 检查 isLibrary。
在您的 APp2 项目中执行以下操作:右键单击 Eclipse 中的项目 -> 属性 -> Android -> 添加 -> 选择 App1。
现在您可以使用 App2 项目中 App1 中定义的任何内容。
在阅读了您的原始问题和您提供的答复后,为了进一步了解您的要求,不可能完成您想要的。事实上,这是设计使然。
正如其他人所提到的,Android 提供了一种通过意图进行应用程序间通信的特定方法,这显然不适合您。
我认为它类似于插件。可以为您的应用程序提供插件架构。这些链接应该可以帮助您: