175 votes

À l’aide de saveurs Build - structuration build.gradle et dossiers source correctement

Veuillez noter: Réponse édité après la Réponse de Xavier

J'essaie d'utiliser différents Construire des Saveurs pour un même projet d'Application dans Android Studio. Cependant, il me semble avoir un temps terrible de la configuration de fonctionner de manière appropriée.

Étapes:

  1. Créer un nouveau Android Studio de Projet, nommé "Test".
  2. Construction ouverte.gradle* et ajouté les lignes suivantes:

    productFlavors {
    flavor1 {
        packageName 'com.android.studio.test.flavor1'
        }
    flavor2 {
        packageName 'com.android.studio.test.flavor2'
        }
    }
    
  3. Après le redémarrage de Android Studio, je vois maintenant 4 construire des variantes dans le cadre de l'Variantes de la section. Ce qui signifie que nous ont parfaitement réussi à paramétrer le produit saveurs jusqu'à présent. **
  4. Créé un nouveau dossier Source pour flavor1; cependant, je ne suis pas sûr si je suis en train de faire de la bonne façon. Voici comment j'ai fait:

    • Gardez à l'esprit que mon nom de Package pour ce projet est de: com.foo.test
    • Cliquez-droit sur l' src le dossier, pour flavor1, j'ai effectivement créé des dossiers dans l'explorateur, de façon que la structure est - src/flavor1/java/com/foo/test/MainActivity.java.
    • Le ci-dessus a bien fonctionné, puisque le "java" le dossier est en bleu, le sens de l'IDE sait de source active directory. Aussi, le paquet a été créé automatiquement. En dépit de cela, je reçois un avertissement pour dupliquer classe trouvés. Voir la capture d'écran ici.
    • Pour flavor2, j'ai essayé de créer le package manuellement, mais 'src' dossier pour flavor2 ne semble pas être en bleu, et, par conséquent, les options sont différentes lorsque cliqué avec le bouton droit, et le "Nouveau" Paquet n'est pas disponible pour moi de l'utiliser. Voir l'image ici.
    • Notez que pour flavor1, j'ai également créé un 'res' répertoire, qui ne virent au bleu, mais en dépit de cela, n'offre pas la possibilité de créer un Android fichier de Ressources, ou Andorid répertoire des ressources, dans le cas où j'ai voulu utiliser différents resoruces pour les différentes saveurs.

Suis-je en train de faire quelque chose de mal? Ou ai-je raté quelque chose? Laissez-moi savoir si vous avez besoin de plus d'infos.

*Mon Projet semble avoir deux construire.gradle fichiers. On trouve à la racine du dossier du projet (\GradleTest), celle-ci est vide. Le second, situé sur la racine d'un sous-dossier \GradleTest, également intitulé "GradleTest' (GradleTest-GradleTest), c'est le seul qui avaient déjà de code lors de l'ouverture; par conséquent, c'est celui que j'ai édité.

** J'ai vérifié gradle paramètres et apparemment Utiliser la fonction d'importation automatique a été activé. En dépit de cela, de faire des changements pour le construire.gradle fichier n'est pas automatiquement mise à jour le construire variantes. Note: j'ai aussi essayé d'utiliser Construire - Projet de Reconstruction et/ou de créer un Projet, no-go. J'ai encore de fermer le projet, et de le ré-ouvrir pour que les modifications prennent effet.

230voto

Xavier Ducrohet Points 10342

Si vous avez obtenu dans le Studio préférences, sous la Gradle section, vous pouvez activer l'importation automatique de votre projet (nous allons activer cette fonction par défaut plus tard). Cela vous permettra de Studio de ré-importer votre build.gradle chaque fois que vous modifiez.

La création de saveurs ne signifie pas que vous allez utiliser le code personnalisé pour eux, afin de ne pas créer les dossiers. Vous avez besoin de créer vous-même.

Si vous regardez mon IO parler vous allez voir comment on mélange ensemble les valeurs de l'saveurs et de type de construction pour créer la variante.

Pour la source de Java:

src/main/java
src/flavor1/java
src/debug/java

sont tous les 3 utilisé pour créer une seule sortie. Cela signifie qu'ils ne peuvent pas définir de la même classe.

Si vous voulez avoir une version différente de la même classe dans les deux saveur, vous aurez besoin de créer à la fois des saveurs.

src/flavor1/java/com/foo/A.java
src/flavor2/java/com/foo/A.java

Et puis votre code dans src/main/java peut faire

import com.foo.A

selon la saveur sélectionné, la bonne version de com.foo.A est utilisé.

Cela signifie également la version de l'Un doit avoir la même API (au moins quand il s'agit de l'API utilisé par les classes dans src/main/java/...

Modifier pour correspondre révisé question

En outre, il est important de mettre la même classe que dans les dossiers de la source qui sont mutuellement exclusifs. Dans ce cas src/flavor1/java et src/flavor2/java ne sont jamais sélectionnés, mais l'essentiel et flavor1 sont.

Si vous souhaitez fournir une version différente d'une activité à saveur différente, ne la placez pas dans src/main/java.

Notez que si vous aviez 3 saveurs et voulaient seulement un programme personnalisé pour flavor1, tandis que flavor2 et flavor3 partagé la même activité, vous pouvez créer une source commune de dossiers pour les deux autres activités. Vous avez une totale flexibilité dans la création de nouveaux dossiers source et de la configuration de la source à utiliser.

Sur vos autres points:

Il est normal que la 2ème saveur dossier source n'est pas bleu. Vous avez besoin de passer à la 2ème goût pour l'activer, puis vous serez en mesure de créer des packages et de classes à l'intérieur. Jusqu'alors, le Studio n'est pas à la considérer comme un dossier source. Nous espérons améliorer à l'avenir de faire de l'IDE au courant de ces inactives les dossiers de la source.

Je pense que c'est normal aussi que vous ne pouvez pas créer des fichiers de ressources dans le dossier res. Le système de menu n'a pas été mis à jour afin de traiter tous ces dossiers de ressources. Ce sera pour plus tard.

7voto

ben75 Points 11322

Il semble que vous avez besoin de recharger votre projet après l'ajout de nouvelles saveurs, en build.gradle. Après cela, vous verrez 4 construire des Variantes dans la construction des Variantes de vue (vous pouvez y accéder à partir du bord gauche de la fenêtre).

Au sujet de ces répertoires source, il semble que vous devez les créer à la main : src/flavor1/java et src/flavor2/java. Vous verrez que la modification de la saveur dans la section "créer des Variantes de" vue de modifier la actuellement active source répertoires (directory est bleu quand il est une source active directory)

Enfin, "gradle permettra de créer de nouveaux sourceSets pour vos nouvelles saveurs" signifie que gradle permettra de créer les objets android.sourceSets.flavor1 et android.sourceSets.flavor2 et vous pouvez les utiliser dans votre construction.gradle script. Mais ces objets sont créés de manière dynamique, c'est pourquoi vous ne les voyez pas dans l' build.gradle (je vous conseille la lecture de ceci : http://www.gradle.org/docs/current/userguide/tutorial_using_tasks.html en Particulier l'6.6: il expliquer la création de la dynamique de la tâche. Un gradle script est un script groovy, alors je vous suggère de vous familiariser avec groovy trop)

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