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

我只是好奇 :

有些应用程序(通常是开发人员)允许下载其他示例应用程序,并执行示例应用程序而不安装它们。

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

我的问题是:

这样的应用程序如何工作?

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

这样的事情可能对需要插件和扩展的应用程序很有用,也可能是我想不到的其他想法。

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

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

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

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

我已经和devAppsDirect的开发者(网站在这里 )交谈过了,他写的是:

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

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

这项技术有很多可能性。 你提到插件和扩展,但它也可以用于应用程序发现,广告,订阅服务,A / Btesting,错误修复等等。

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

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

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

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

看来DevAppsDirect使用了一个名为“Launcher”的Android开源项目的一部分,我的猜测是,他们把操作系统的一部分,并调整它,以便他们可以将其包括在自己的应用程序,以启动从库编译的APK作为演示。

启动器负责电话的主屏幕,启动其他应用程序,托pipe小部件等。

你可以在这里获得一个Android开源项目的副本: http : //source.android.com/source/downloading.html ,看看com.android.launcher包。