【问题标题】:App integration with another与另一个应用程序集成
【发布时间】:2012-09-20 08:02:17
【问题描述】:

我想将一个应用程序(我们称之为 app1)集成到另一个应用程序 (app2) 中,该应用程序将通过单击按钮调用 app1。在不将 app1 的源代码暴露给 app2 的情况下,有哪些可能的方法来实现这一点。 app1 不应该作为单独的应用程序安装,它应该是 app1 的一部分。

我正在考虑以某种方式将 app1 转换为 jar 文件并将其集成到 app2 中,这可能吗?或者建议我一些方法来实现上述要求。

【问题讨论】:

  • 你不能使用 app2 中的特殊 Intent 来启动 app1 吗?
  • app1 应该嵌入到 app2 中,而不是作为单独的应用程序。
  • 就代码而言,如果您可以按照here 所述访问它,您可以从某个 *.dex 文件中加载类。您想在 app1 的资产中提供整个 app2.apk 吗?
  • "app1 应该嵌入到 app2 中,而不是作为单独的应用程序。" ——你是app1的作者吗?如果没有,您是否拥有允许以任何方式分发的 app1 的许可证,更不用说这个了?
  • @YashwanthKumar Android 目前不支持应用嵌入。你不能偷偷摸摸任何成熟的应用程序,让它在没有用户安装的情况下在 android 系统中运行。这样看来,这是一个很好的安全措施。

标签: android


【解决方案1】:

如果应用程序 1 具有 android 资源文件(布局、xml 可绘制对象等)和 jar 依赖项,则无法避免暴露它们。

如果您愿意公开您的资源和外部 jar,您可以:

  1. 将 app1 更改为 android 库。
  2. 使用与 app1 相同的资源和 jar(不包括源)创建另一个库项目。
  3. 将生成的jar文件从app1库项目bin文件夹复制到秒库项目libs文件夹中。

最终结果是一个没有java源文件但有资源的库项目,这个库项目可以在app B中使用而不暴露你的java文件。

请注意,可能需要对 app1 进行一些重构。

【讨论】:

  • 看起来可行,您能否进一步解释一下如何实现上述每个步骤的答案。
  • 第三步,你指的是哪个jar文件,如何生成?
  • 如果您使用 eclipse 和 ADT 插件,app1 库项目将在 bin 文件夹中自动生成一个名为 app1.jar 的 jar 文件。您应该使用这个文件(现在包含所有 app1 类),并将其用作新库项目(没有源代码的项目)中的外部 jar。
  • 一切正常,直到我访问 app1 项目中的资源,当调用 app1 的代码时,它给出了空指针异常,该代码与资源引用有一行(例如,R.id. some_resource, R 是 com.app1packagename.R)
  • 确保该资源存在于其他库项目中,如果仍然无法使用,请尝试使用 ressources.getIdentifier() 方法,根据此答案:stackoverflow.com/questions/4741510/…
【解决方案2】:

据我了解,您的问题 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);
}

至于提示用户下载安装可以启动here

如果您从应用程序中分发 apk,您可以查看 here 以了解如何启动它。

最后,关于将 apk 转换为 jar,我不知道这是否可行,但如果可行,那将是某种 hack,这不是创建应用程序的最佳实践。另一方面,有许多免费的 android 库(jar 文件)覆盖了非常广泛的功能领域,您可以很容易地将它们集成到您的应用程序中。

希望对你有帮助……

【讨论】:

  • 不是我要找的答案,app1 不应该作为单独的应用程序安装,它应该是 app2 的一部分。
【解决方案3】:

在我看来,意图系统正是您正在寻找的 - android 意图是为应用程序间通信而设计的 - 这是在其他已安装应用程序中访问各种功能的标准方法(例如,这是您的方式会将图像作为电子邮件发送或分享到 Facebook 或在已安装的图库软件中显示)。

intent 系统允许两种方式的数据传递,并且是安静的字符串。根据您选择发布此界面的交互的确切性质,以便其他应用程序可以以相同的方式与您交互。

【讨论】:

  • 这不起作用,因为该应用可能不存在于设备上。
【解决方案4】:

我认为图书馆项目是您寻求的答案。

您应该将 App1 项目设置为库项目:在 Eclipse 中右键单击项目 -> 属性 -> Android -> 检查 isLibrary。

在您的 APp2 项目中:右键单击 Eclipse 中的项目 -> 属性 -> Android -> 添加 -> 选择 App1。

现在您可以从 App2 项目中使用 App1 中定义的任何内容。

【讨论】:

  • 不起作用,因为,我可以在 App2 中看到 App1 的代码,不是吗?主要目的是不暴露 app1 的代码。
【解决方案5】:

阅读您的原始问题和您提供的回复后,为了进一步了解您的要求,您无法完成您想要的。事实上,这是设计使然。

正如其他人提到的,Android 提供了一种通过意图进行应用间通信的特定方法,这显然不适合您。

【讨论】:

    【解决方案6】:

    我认为它类似于插件。可以为您的应用程序提供插件架构。这些链接应该可以帮助您:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-04
      • 2020-01-22
      • 2022-11-23
      • 1970-01-01
      • 1970-01-01
      • 2010-12-19
      • 2012-12-13
      • 2018-11-26
      相关资源
      最近更新 更多