如何在Android上运行外部的,已下载但尚未安装的应用程序?

我只是好奇 :

通常用于开发人员的某些应用程序允许下载其他示例应用程序并执行示例应用程序而无需安装它们。

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

我的问题是:

这些应用程序如何运作?

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

对于需要插件和扩展的应用程序,以及其他我无法想到的想法,这样的事情可能会有用。

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

Related of "如何在Android上运行外部的,已下载但尚未安装的应用程序?"

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

看看例如https://github.com/Rookery/AndroidDynamicLoader ,看看如何实现它。

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

我和devAppsDirect的开发者(网站这里 )进行了交谈,这是他写的:

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

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

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

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

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

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

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

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

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

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