Android – plusieurs versions personnalisées de la même application
Quel est le meilleur moyen de déployer plusieurs versions personnalisées d'une application Android?
Actuellement, j'ai un script pour échanger le dossier de ressources pour obtenir une version personnalisée de mon application. Il fonctionne très bien, mais toutes les versions personnalisées ont toujours le même nom du paquet dans le AndroidManifest.xml. Par conséquent, il n'est pas possible d'installer deux versions personnalisées de l'application en même temps.
C'est une solution pour ce problème, mais ce qui doit être fait à la main
Pouvez-vous penser à un plus de solution facile, ou comment cela pourrait-il être intégré dans un skript?
(btw: il n'est pas pour un porno/spam/quel que soit l'application, pas même un salarié)
- J'ai répondu à la même question ici, peut-être il peut aussi vous aider: stackoverflow.com/questions/16840127/...
- L'on a accepté la réponse est un peu daté. Il y a un posté par tendirent qui est probablement le maintenant de façon correcte de le faire.
- Vous certainement vous voulez utiliser les
Gradle
saveurs qui vient en natif, encouragé même, sur Android Studio.
Vous devez vous connecter pour publier un commentaire.
Peut-être intégré dans Android "bibliothèque" ce concept n'était pas entièrement cuit au four au moment de la post original, mais il est peut-être la méthode préférée de 2011. Suivez ces étapes pour un ant:
De départ à partir d'une application (appelons-le répertoire "myOrigApp", package com.foo.myapp), il suffit d'ajouter cette ligne à "par défaut.les propriétés" pour en faire une bibliothèque:
Maintenant créer une nouvelle application à un frère ou une sœur répertoire de la manière que vous préférez (appelons-le répertoire "frère", package com.foo.myVariant). À l'aide de Intellij Idea, par exemple, créer un projet à partir de zéro " avec le répertoire 'frère' et il va créer tous les fichiers/répertoires dont vous auriez besoin.
Dans cette nouvelle, frère, sœur répertoire modifier "par défaut.propriétés" pour ajouter la dépendance:
Copie sur le Manifeste à partir de l'original dir:
Modifier cette copie du fichier de Manifeste de changer son nom pour votre nouvelle variante, "com.foo.myVarient"; c'est le seul changement.
Si vous venez d'exécuter les scripts ant, vous avez peut-être fait. (J'ai eu un peu de configurer les clés de signature.)
Si vous souhaitez configurer un IDE comme Idée d'avoir le projet de bibliothèque en tant que dépendant de la variante du projet, suivez ces étapes pour ajouter un projet de bibliothèque pour la variante du projet (ce qui suppose que vous avez déjà un projet mis en place pour les deux):
Ce que j'ai fait quelque chose de similaire à cela, il suffit d'utiliser une antlib tâche, puis aller à travers toutes java et les fichiers xml afin de remplacer mon ancien logiciel de chaîne pour le nouveau package de chaîne. Il n'a pas d'importance si les fichiers ne sont pas dans le bon src chemins selon les indications du paquet. Juste faire une regex pour remplacer tous les fichiers en était assez pour moi de faire ce travail...
Par exemple, pour le remplacer dans toutes vos java fichiers sous le répertoire src:
Vous certainement souhaitez utiliser
Gradle
saveurs qui vient en natif, encouragé même, sur Android Studio.Cela semble expliquer toutes les notions de base vraiment bien. Je viens de terminer la conversion à
Gradle
aujourd'hui, et il fonctionne très bien. Application personnalisée, des icônes, des noms, et les chaînes de caractères, etc.Que 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, ce qui semble similaire à ce que vous êtes en train de faire.
J'ai probablement ne l'explique pas le meilleur, mais ce site fait un assez bon travail.
Liés à la solution ne doit pas être fait à la main. Gardez à l'esprit que la
package
attribut dans la<manifest>
élément n'a pas à être là où le code réside, aussi longtemps que vous épeler le complet des classes ailleurs dans le manifeste (par exemple,activity android:name="com.commonsware.android.MyActivity"
plutôt queactivity android:name=".MyActivity"
). Le Script de votre manifeste de changement et d'utiliser Ant pour construire une nouvelle APK. Autant que je sache, cela devrait fonctionner.Soutien De Multiples Partenaires
Préparer config.xml
Projet de construction pour les différents partenaires
Préparer Des Fichiers
$ ant -f config.xml -Dpartner.dir="xxx" -Dpkg.name="xxx" -Dver.code="xxx" -Dver.name="xxx" preparefiles
Créer build.xml
Construire
$ ant debug
ou
$ ant la libération
Je suis en utilisant le maven-android-plugin pour atteindre cet objectif. Spécifiez un AndroidManifest.xml pour le generated-sources but et un autre AndroidManifest.xml pour la finale apk objectif. De cette façon, le code source du projet conserve le code source nom du package lors de la génération de la classe i et la phase de construction, alors que le marché adaptés manifeste nom du package est dans la deuxième AndroidManifest.xml ce qui est inclus dans le fichier apk.
Je me suis retrouvé avec un script que les patches, les sources; rapiécer la source des sons risqué, mais en présence de contrôle de version le risque est acceptable.
J'ai donc fait une version, commis à la source, fait l'autre version, commis à la source, et en regardant le diff a écrit un rapiéçage de script en Python.
Je ne suis pas sûr si c'est la meilleure solution. (Et le code manque quelques os.chemin d'accès.les jointures)
Le cœur du script est la fonction suivante:
Et vous pouvez trouver la suite de l'une d'utilisation:
Il y a aussi une fonction qui copie les actifs de
x-assets-cfgname
àassets
(auparavant, il s'est avéré que pour moi, il est plus commode d'avoir un sous-répertoire dansassets
).Eh bien, vous obtenez l'idée. Maintenant, vous pouvez écrire votre propre script.
Je pense que la meilleure façon est de créer un nouveau projet et copie les choses. étapes,
- créer un nouveau projet android sans classe
- création d'un package (package nom correspondant à celui dans le fichier de manifeste), ou tout simplement copier le nom du package dans le 'gen' dossier
- copier les fichiers java
- copier les dossiers drawable
- copiez les fichiers de mise en page
- copie de n'importe quel autre fichier(s) utilisée dans le projet d'ur
- copie du manifeste du fichier de données
cela a été plus simple pour moi pour la tâche