2014-07-02 67 views
3

我需要创建一个启动新应用程序的android应用程序。新应用程序需要在与原始应用程序不同的进程上运行,需要具有不同的程序包名称,它需要是图形的(所以我认为排除服务,除非我错了,服务可以是图形),它需要安装与第一个相同的apk文件。它不会到达Android市场,所以我不在乎市场问题。从1个apk文件启动两个android应用程序

我今天看到一个应用程序,它完全符合我的需求,它在包名下运行一个进程,并在“{orig.app.packgename}:remote”下打开一个新进程。

任何人都可以告诉我怎么可以这样做?

回答

24

如上所述,一个APK只能容纳一个应用程序。

你总是可以建议你的用户安装另一个应用程序,但我明白这不是你想要的。

所以,这里有一个小窍门,将提供大部分的你的目标是什么 (接受不同的包名,没有办法做到这一点)内 包裹的单个APK:

首先:添加机器人:过程标签到您的独立活动:

<activity android:name=".StandAloneActivity" 
    android:process=":MyNewProcess"> 

这将通知Android的这一活动应在一个单独的进程 ,其名称是“MyNewProcess”执行。您可以添加标记为“:MyNewProcess”的其他组件(活动,服务..)。他们都将在同一个过程中执行。


然后:创建为您的独立活动 的“action.MAIN”意图过滤和应用的主要活动:

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


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

这将通知Android版两个不同的主屏幕图标需求为您的应用程序创建,每个主要活动(现在运行在不同的进程上)。

不用说,标准方法调用不会从一个 过程到另一个穿过。您将需要使用Intents,AIDL interfaces或其他IPC机制您的小心脏欲望

+0

这几乎正是我想要的。以我用来找到正在运行的软件包的软件包名称的黑客方式,我甚至得到了我想要的不同软件包名称,即{my.package.name}:MyNewProcess。 我说几乎是因为我删除了第二个意图过滤器,以防止第二个活动获取它自己的启动器图标。 –

3

每个应用程序必须有它自己的apk文件,每个应用程序只能有一个包名。解决方案是两个在您的资源文件中有其他应用程序apk并在运行时安装它,或者如果它已经安装,只需启动它。

0

我能想到的一种方法是意图(可能这就是你的意思)。许多应用程序注册他们的一些活动以从不同的应用程序启动。例如,当您单击回复电子邮件时,可能已安装的电子邮件应用程序的“回复”活动即会启动(例如Gmail)。请记住,“启动另一个应用程序的应用程序”会带来一些安全风险,因此必须满足这类操作的某些要求。

0

Ilya是对的,您需要分别安装它们或在您的资源中包含其他apk,并在第一次运行应用程序时安装它。

然后你可以简单地使用一个意图来启动应用程序。

相关问题