2014-07-02 5 views
3

J'ai besoin de créer une application Android qui lance une nouvelle application. la nouvelle application doit fonctionner sur un processus différent de l'application orig, doit avoir un nom de paquet différent, il doit être graphique (donc je pense que cela exclut les services, à moins que je ne me trompe et les services peuvent être graphique) doit être installé avec le même fichier apk que le premier. il ne sera pas arriver au marché android, donc je ne me soucie pas des problèmes de marché.Lancer deux applications Android à partir de 1 fichier apk

J'ai vu aujourd'hui une application qui fait exactement ce dont j'ai besoin, Elle a exécuté un processus sous son nom de paquet, et a ouvert un nouveau processus sous "{orig.app.packgename}: remote". Quelqu'un peut-il me dire comment on peut faire quelque chose comme ça?

Répondre

24

Comme indiqué ci-dessus, un seul fichier APK ne peut contenir qu'une application.

Vous pouvez toujours suggérer à votre utilisateur l'installation d'une autre application, mais je comprendre ce n'est pas ce que vous voulez ici.

Alors, voici une petite astuce qui offrira plus de ce que vous visez (accepter pour différents noms de paquets, aucun moyen de le faire) enveloppé dans les une seule APK:

Première: Ajouter un androïde: tag processus à votre activité autonome:

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

ce informera Android que cette activité doit être exécutée sur un processus distinct dont le nom est « MyNewProcess ». Vous pouvez ajouter des composants supplémentaires (Activités, Services ..) étiquetés comme ": MyNewProcess". Ils seront tous exécutés selon le même processus.


Ensuite: Créer un filtre intention « action.MAIN » pour les DEUX votre activité autonome et l'activité principale de votre application:

<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> 

Ce informera Android qui deux icônes homescreen distinctes besoins à créer pour votre application, une pour chacune des activités MAIN (exécutées maintenant sur des processus séparés).Inutile de dire que les invocations de méthodes standard ne passeront pas d'un processus à un autre. Vous aurez besoin d'utiliser Intents, AIDL interfaces ou quel que soit autre mécanisme IPC votre petit cœur désire

+0

c'est presque exactement ce que je voulais. de la manière hacky que j'utilise pour trouver les noms de paquets des paquets en cours d'exécution, j'ai même obtenu le nom de paquet différent que je voulais, à savoir {my.package.name}: MyNewProcess. Je dis presque parce que j'ai supprimé le deuxième filtre d'intention afin d'empêcher la deuxième activité d'obtenir une icône de lanceur de son propre. –

3

Chaque application doit avoir son propre fichier apk, et chaque application ne peut avoir qu'un seul nom de paquet. La solution consiste à avoir l'autre application apk dans vos fichiers de ressources et à l'installer au moment de l'exécution, ou si elle est déjà installée, lancez-la.

0

Une façon dont je peux penser à Intents (c'est probablement ce que vous voulez dire). De nombreuses applications enregistrent certaines de leurs activités à lancer à partir d'applications différentes. Par exemple, lorsque vous cliquez sur Répondre à un e-mail, l'activité "Répondre" d'une application de messagerie que vous avez éventuellement installée est lancée (par exemple, Gmail). Gardez à l'esprit qu '«une application qui lance une autre application» présente des risques de sécurité, de sorte que certaines exigences pour ce type d'actions doivent être satisfaites.

0

Ilya a raison, vous devez les installer séparément ou inclure l'autre apk dans vos ressources et l'installer lorsque l'application est exécutée pour la première fois.

Ensuite, vous pouvez simplement utiliser une intention pour démarrer l'application.

Questions connexes