49 votes

Plusieurs fichiers .apk du package d'application Android à partir d'un code source unique

Je voudrais un Androïde de système de construction de procédure, la ligne de commande ou Eclipse, pour générer plusieurs .les fichiers apk à partir d'une seule base de code source. Certaines des raisons communes pour ce - avoir des versions spécifiques pour les marchés avec des exigences différentes ou une version gratuite et payante.

Cette question n'EST PAS à PROPOS de:

Google dit "vous avez probablement besoin de créer des Android des projets pour chaque APK vous avez l'intention de publier, de sorte que vous pouvez de manière appropriée développer séparément. Vous pouvez le faire par simple duplication de votre projet et lui donner un nouveau nom." Ensuite, ils ont gentiment suggérer l'utilisation de bibliothèques, que je comprends. Ensuite, ils mentionnent en passant exactement ce que je veux: "un système de construction qui peut générer des ressources différentes selon la configuration de build"

  • Je sais que pour accomplir la compilation conditionnelle en JAVA on peut key off 'public static final variable. Il y a un exemple de peaufiner une telle valeur dans build.xml. Tout exemple plus complet de un Android Ant de configuration ou un lien vers un OSS projet de le faire maintenant, s'il vous plaît? BTW, build.xml est auto-généré, mais j'ai vu des gens, il le piratage, comment cela fonctionne?

  • Avec le nom du package déclaré dans Manifest.xml en tant que package="com.exemple.appname", si l'on a besoin d'émettre plusieurs .apk qui varient que de nom, est un coincé avec un projet distinct pour chaque?

12voto

barmaley Points 7307

Je suis de la génération 2 APK (démonstration et de production), à partir d'une seule source d'arbre avec 3 petites modifications:

1) j'ai public static final DEMO=true; //false; mon Application de la classe et, selon que la valeur que j'ai utilisé pour passer de code entre démo/caractéristiques de production

2) Il y a 2 principales activités, comme:

package mypackage;
public class MyProduction extends Activity 
{
    //blah-blah
}

package mypackage.demo;
public class MyDemoActivity extends mypackage.MyProductionActivity
{
    //blah-blah
}

3) Et à la fin séparer les 2 AndroidManifest.xml fichiers différents lanceur d'activités en fonction de démonstration et de production de l'interrupteur

Je suis passer entre 2 APK de la main, mais ne vois rien de difficile dans l'écriture petite tâche ANT pour basculer entre eux automatiquement

11voto

Emmanuel Points 6262

Une façon de le faire serait de maintenir deux fichiers AndroidManifest.xml distincts, un pour chaque configuration. Vous pouvez basculer entre les deux manuellement ou (copie) ou automatiquement (script de construction).

[edit] Cette personne a un système pour faire ce genre de chose: http://blog.elsdoerfer.name/2010/04/29/android-build-multiple-versions-of-a-project/

6voto

Devin Crane Points 115

J'ai eu cette même question. Peut-être que vous avez trouvé la réponse à ce point, mais quelques recherches, enfin, m'a conduit à ce site, ce qui explique Gradle.

Cela semble expliquer toutes les notions de base vraiment bien. Pour la réponse à votre question spécifique, recherchez la section Product Flavors sous Build Variants, où il décrit la spécification de différentes saveurs. C'est ce que je vais essayer, j'ai juste à convertir plus de Gradle.

Le site explique, le but de ce modèle était de la rendre plus dynamique et plus facilement permettre à plusieurs Apk être créé avec essentiellement le même code, qui sonne exactement comme ce que vous faites.

J'ai probablement ne l'explique pas le meilleur, mais ce site fait un assez bon travail.

4voto

kabuko Points 23166

Malgré votre insistance que ce n'est pas à propos de l'emballage code partagé dans Android les bibliothèques, c'est. Vous avez déclaré que les marchés peuvent avoir des exigences différentes ou ayant une gratuite et une version payante. Dans chacun de ces exemples, vos deux sortie finale Apk ont des comportements différents et/ou des ressources. Vous pouvez mettre de la grande majorité de votre code dans un projet commun d'Android bibliothèque, et puis de maintenir des différences dans vos projets.

Par exemple, j'ai travaillé sur des applications où ils doivent être libérés à la fois à l'Android Market et l'Amazon AppStore. L'Amazon AppStore est que, si vous vous reliez à un marché de la page de l'application, elle doit être d'Amazon (par opposition à l'Android Market page). Vous pouvez stocker une URL dans une ressource de la bibliothèque et de l'utiliser dans votre code, mais alors remplacer cette ressource dans le projet Amazone à point approprié URL Amazon.

Si vous la structure de ce droit, vous pouvez faire des choses similaires dans le code parce que votre point de départ est votre objet Application que vous pouvez sous-classe et de faire des choses différentes.

Cela dit, si vous souhaitez ajouter une Fourmi pas qui change le nom du package dans le manifeste, c' est juste du XML. Il ne devrait pas être difficile à modifier qu'une précompilation étape.

3voto

Graham Borland Points 27556

Cet article présente une bonne explication avec des exemples sur la façon de modifier des fichiers de configuration au moment de la construction. voir en particulier les sections Personnalisation de la construction et Utilisation d'un fichier de configuration Java . Notez que certaines informations sur build.xml et ant sont un peu obsolètes maintenant.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X