15

我只是好奇 :

一些应用程序,通常是为开发人员提供的,允许下载其他示例应用程序并在不安装示例应用程序的情况下执行它们。

这种应用程序的一个例子是很酷的“ DevAppsDirect ”应用程序(强烈推荐它顺便说一句)。

我的问题是:

此类应用程序如何工作?

我的意思是,他们会下载 APK 吗?他们如何跳过安装阶段并以某种方式运行下载的应用程序?它们是否以某种方式与下载的内容合并?它像一个插件吗?

这样的东西对于需要插件和扩展的应用程序可能很有用,也许还有其他我想不到的想法。

我也想知道其他应用程序如何使用插件机制。许多应用程序允许通过 Play 商店下载其他插件应用程序。他们是否以某种方式在其他 apk 文件中运行了一些代码?他们甚至可以访问其他 apk 文件吗?有没有办法告诉android哪些应用可以访问我的apk文件?

4

5 回答 5

8

您可以使用 Android 的类加载器(在这种特殊情况下可能是 PathClassLoader)在运行时动态加载类而无需安装它们。

看看例如https://github.com/Rookery/AndroidDynamicLoader看看这是如何实现的。

插件 apk 甚至可能不需要那么复杂的东西,但可以通过发送到导出活动并回发结果的 Intent 进行通信。您可以使用 PackageManager ( http://developer.android.com/reference/android/content/pm/PackageManager.html ) 来查询注册了哪些意图活动。

于 2013-07-01T21:26:51.097 回答
6

我已经与 devAppsDirect(网站在这里)的开发人员谈过,这是他写的:

DevAppsDirect 背后的技术称为 inAppSquared (www.inAppSquared.com)。简而言之,inAppSquared 允许您将 Android 应用程序转换为插件。这是仅使用公开可用的 Android API 完成的,不涉及疯狂的黑客攻击。

我通过创建一个新的移动平台来做到这一点,就像 Xamarin 和 Titanium 是移动平台一样。不同之处在于 inAppSquared 具有与 Android API 相同的 API,并且一旦将应用程序移植到 inAppSquared,它就可以在不安装的情况下运行。

这项技术有很多可能性。您提到了插件和扩展,但它也可以用于 App Discovery、广告、订阅服务、A/B 测试、错误修复等等。

于 2013-07-21T12:24:13.700 回答
2

很有意思!我认为这是可行的,您自己还没有尝试过。

  • 如果您的服务器中有一个 apk,您可以从您的应用程序下载它
  • 现在您可以使用 zip 实用程序解压缩到您自己的应用程序私有内存中
  • 解析 Manifest 文件以确定主要活动
  • 接下来,您可以使用ClassLoaderDexClassLoader来动态加载活动。

我相信这就是 DevAppsDirect 中发生的事情

于 2013-07-04T13:36:53.213 回答
1

您应该尝试使用Manifest Viewer 查看DevAppsDirect 的 AndroidManifest.xml。遗憾的是,该应用程序没有导出清单的选项。粗略一看,我认为他实际上并没有安装列表中显示的应用程序。你应该看看。

于 2013-07-04T20:26:01.533 回答
1

似乎 DevAppsDirect 使用了名为“Launcher”的 Android 开源项目的一部分,我的猜测是他们采用了操作系统的这一部分并对其进行了调整,以便他们可以将其包含在自己的应用程序中,以从库中启动已编译的 APK 作为演示。

Launcher 负责手机的主屏幕,启动其他应用程序,托管小部件等。

您可以在此处获取 Android 开源项目的副本:http: //source.android.com/source/downloading.html并查看 com.android.launcher 包。

于 2013-07-05T02:43:19.570 回答