Android,创建“不可见”.apk

时间:2015-05-31 14:43:34

标签: android android-intent plugins

我正在开发一个Android框架,它由一个在前台执行的主.apk和一组“插件”组成,这些插件是.apk,可以静默下载并安装到设备中。 此体系结构的主要目的是只有一个应用程序在运行并且对用户可见,一组插件由主应用程序执行但无法直接执行。

到目前为止,我发现发现设备上安装的可用软件包的一种方法是使用以下代码:

packageManager = getPackageManager();
applications = new ArrayList<>();
Intent intent = new Intent(Intent.ACTION_MAIN, null);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
List<ResolveInfo> availableActivities = packageManager.queryIntentActivities(intent,0);

但是此代码检索所有暴露了CATEGORY_LAUNCHER的包。 我的问题如下:

  • 我可以创建一个安装的apk,用户看不到吗?那么它不能单独发布吗?
  • 如果我创建了一个自定义的INTENT,那么如何让主应用程序知道一个新的包被分组到新的意图中,是否已安装在系统中?一种触发,是否可能?

2 个答案:

答案 0 :(得分:2)

  

可以静默下载并安装到设备中

这是不可能的,除了可能在root设备上或通过特殊的系统应用程序。否则,用户将参与您的插件的安装。

  

我可以创建一个安装的apk,用户看不到吗?那么它不能单独发布吗?

如果这是您的意思,您可以拥有一个没有LAUNCHER <intent-filter>活动的应用。用户仍会在已安装的应用程序列表和设置中的其他位置看到您的插件。

使用此插件时,您还需要使用显式Intent(具有组件集的那个),以将其移出停止状态。在您使用显式Intent与应用程序的某个组件通信之前,插件中的任何内容都不会运行(例如,清单注册的接收器)。

  

如果我创建了一个自定义的INTENT,那么如何让主应用程序知道一个分组到新意图中的新包已安装在系统中?

这不是有效的英语句子。我将把它解释为含义:

  

如何确定用户何时安装插件?

您可以查看ACTION_PACKAGE_ADDED broadcasts以了解安装新应用的时间。此时,您可以通过某种方式确定新安装的应用程序是否是您的插件。

答案 1 :(得分:2)

您可以从Manifest文件中删除以下所需活动。

<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>