Le mystère : La structure de projet et le système de construction d'Android Studio
Je ne sais pas si cela est dû au système de construction Gradle (je parie que oui), mais je vais vous dire ce que j'ai compris jusqu'à présent.
Mise à jour 4 : 2014/09/11 Ajouté Aide-mémoire pour BuildTypes
, Flavors
et Variants
(Je me sens enfin en confiance pour écrire ceci :D)
Mise à jour 3 : 2014/09/11 Mise à jour des espaces de travail et des projets de comparaison pour être précis.
Mise à jour 2 : 2014/04/17 Ajout de plus de détails sur la structure du projet AS
Mise à jour 1 : 2013/07/29 Ajout de la structure du projet IntelliJ
La structure du projet d'IntelliJ (montrée à la fin) est pour IntelliJ avec le plugin Android. Le Studio Android, lui, a une structure de projet divisée comme suit :
Structure : Projets et modules
module sur Android Studio est comme un projet sur Eclipse
projet sur Android Studio est comme un espace de travail sur Eclipse (pour être précis, un espace de travail avec des projets interdépendants)
De la documentation (Android Studio est basé sur Intellij IDEA) :
Quoi que vous fassiez dans IntelliJ IDEA, vous le faites dans le contexte d'un projet. Un projet est une unité organisationnelle qui représente une solution logicielle complète.
Votre produit fini peut être décomposé en une série de modules discrets, modules isolés, mais c'est une définition de projet qui les rassemble qui les rassemble et les lie en un tout plus grand.
Pour Android, cela signifie un projet par application, et un module par bibliothèque et par application de test.
Il y a plusieurs problèmes si vous essayez de construire plusieurs applications dans le même projet. C'est possible, mais si vous essayez (comme je l'ai fait), vous verrez que presque tout est conçu pour fonctionner avec une seule application par projet.
Par exemple, il existe une option pour "reconstruire le projet", ce qui n'a aucun sens avec plusieurs applications, de nombreux autres paramètres de projet seraient inutiles, et le système VCS intégré n'est pas génial lorsque vous avez plusieurs dépôts.
Structure : Structure des dossiers
Dossiers de niveau supérieur
1. Projet principal
Ce serait l'intégralité contexte du projet ( Eclipse Land : Comme votre espace de travail mais limité à ce qui est pertinent pour votre projet). Ex : HelloWorldProject
si le nom de l'application que vous avez donné était HelloWorld
2. .idée
C'est là que les métadonnées spécifiques au projet sont stockées par Android Studio (AS). ( Eclipse Land : project.properties
fichier)
3. Module de projet
Voici le projet actuel. ex : HelloWorld
si le nom de votre application que vous avez donné était HelloWorld
4. gradle
C'est ici que se trouve le wrapper jar du système de construction gradle, c'est-à-dire que ce jar est la façon dont AS communique avec gradle installé sous Windows (le système d'exploitation dans mon cas).
5. Bibliothèques externes
Il ne s'agit pas réellement d'un dossier mais d'un endroit où les bibliothèques référencées ( Eclipse Land : Bibliothèques référencées) sont indiquées. C'est ici que la plateforme ciblée est indiquée, etc.
[ Note complémentaire : C'est là que beaucoup d'entre nous, au pays d'Eclipse, avaient l'habitude de supprimer les bibliothèques référencées et de fixer les propriétés du projet pour corriger les erreurs de référence, vous vous en souvenez].
Dossier de projet en détail
C'est le numéro 3 de la liste ci-dessus. Il contient les sous-répertoires suivants
1. construire
Il s'agit de toute la production complète de la make
c'est-à-dire classes.dex, classes et ressources compilées, etc.
Dans l'interface graphique d'Android Studio, seuls quelques dossiers sont affichés. Ce qui est important, c'est que votre R.java se trouve ici sous build/source/<flavor>/r/<build type(optional)>/<package>/R.java
2. libs
Il s'agit du dossier standard des librairies que vous voyez dans la section terre d'éclipse trop
3. src
Ici, vous ne voyez que le java
et res
qui correspondent au dossier src
et res
dans le dossier Terre d'éclipse . Il s'agit d'une simplification bienvenue, à mon avis.
Note sur les modules :
Les modules sont comme Terre d'éclipse projets. Ici, l'idée est que vous avez un projet d'application (Module #3 dans la liste ci-dessus) et plusieurs projets de bibliothèque (en tant que modules séparés sous le dossier de projet global (#1 dans la liste ci-dessus)) dont le projet d'application dépend. Comment ces projets de bibliothèque peuvent être réutilisés dans d'autres applications, je n'ai toujours pas trouvé.
[ Note complémentaire : Toute cette réorganisation présente certains avantages, comme la simplification du dossier src, mais aussi de nombreuses complications. Les complications sont principalement dues TRES TRES documentation fine sur cette nouvelle mise en page du projet].
Le nouveau système de construction
Guide d'utilisation du nouveau système de construction
Explication des saveurs et des buildTypes, etc. - Pourquoi ce brouhaha ?
Aide-mémoire pour les saveurs et les buildTypes
BuildType : debug
et release
sont buildTypes
disponibles par défaut sur tous les projets. Ils servent à construire/compiler le MÊME CODE pour générer différents APKs. Par exemple sur release
APK, vous voudrez exécuter proguard (pour l'obscurcissement), le signer avec votre clé (par rapport à la clé de débogage), exécuter des optimisations (peut-être via proguard ou d'autres outils), utiliser des versions légèrement différentes de l packageNames
(nous utilisons com.company.product
pour release
et com.company.product.debug
pour debug
), etc. Nous utilisons également un drapeau de débogage ( BuildConfig.DEBUG
) pour désactiver la journalisation vers logcat (car cela ralentit l'application) sur release
construit. Cela permet d'accélérer debug
pendant le développement, mais aussi une release
construire pour mettre sur play store.
Saveur du produit : Il n'y a pas de saveurs par défaut disponibles (ou pour être précis, la saveur par défaut est vide/non nommée). Flavors
pourrait être version gratuite ou version payante où ils ont CODE DIFFERENT . Ils partagent le même Main
Code mais versions différentes (ou pas de versions) de quelques fichiers ou ressources de code source.
BuildVariant : A buildVariant
est ce à quoi correspond réellement un APK généré. Ils sont nommés comme suit (dans l'ordre) Product Flavor
+ Build Type
= Build Variant
.
Exemple 1 : si vous avez free
et paid
en deux variantes. Les variantes de construction que vous obtiendrez sont :
Gratuit - débogage
Gratuit - sortie
Paid - débogage
Paid - release
Cela fait donc 4 configurations APK possibles. Quelques configurations peuvent ne pas avoir de sens dans un projet particulier, mais elles sont disponible.
Exemple 2 : (pour les nouveaux projets/ sans saveurs) Vous avez 2 buildVariants
ou APKs disponibles, puisque la saveur par défaut est sans nom/blank :
déboguer
libérer
L'idée (1) contient un certain nombre de sous-dossiers, principalement des informations internes à IntelliJ IDEA.
Le src (2) contient le fichier MyActivity.java. (3) code source du fichier qui implémente la fonctionnalité de votre application. Le fichier appartient au paquet com.example.
Les rés (4) Le dossier contient diverses ressources visuelles.
Le fichier layout/main.xml (5) définit l'apparence de l'application constituée de ressources de différents types.
Le dossier des valeurs (6) est destiné à stocker des fichiers .xml qui décrivent des ressources de différents types. Actuellement, le dossier contient un fichier strings.xml avec des définitions de ressources String. Comme vous le verrez dans la section Ajout d'une couleur, le dossier layout peut également contenir, par exemple, un descripteur de couleurs.
Le dossier à dessiner (7) contient des images.
Le dossier gen (8) contient le R.java (9) qui relie les ressources visuelles et le code source Java. Comme vous le verrez dans les sections ci-dessous, IntelliJ IDEA prend en charge une intégration étroite entre les ressources statiques et R.java. Dès qu'une ressource est ajoutée ou supprimée, les classes et les champs de classe correspondants dans R.java sont automatiquement générés ou supprimés en conséquence. Le fichier R.java appartient également au paquet com.example.
3 votes
J'ai essayé de poster des images dans cette question, mais j'ai besoin d'au moins 10 réputation. Je modifierai le message pour inclure les images une fois que je serai qualifié.
3 votes
Approuvé. À moins que vous n'ayez au moins un an d'expérience dans le développement d'Android, je pense que vous ne devriez pas utiliser Android Studio avant qu'il ne quitte le mode "early access preview".
2 votes
J'ajouterais que vous pouvez utiliser IntelliJ IDEA à la place, car il est très stable. De plus, une fois qu'Android Studio sera plus stable, le passage à celui-ci sera très facile, car il s'agit du même IDE (AS ne fournissant qu'une intégration Android améliorée).
3 votes
J'ai eu 3 ans d'expérience dans le développement Android en utilisant Eclipse et je trouve sérieusement difficile d'utiliser A.Studio. J'aimerais que quelqu'un donne une réponse directe car il est temps que les gens bougent ; j'ai bougé. Je ne veux pas travailler sur des intuitions pendant le développement.
0 votes
Ne vous concentrez pas sur ces fichiers générés automatiquement et spécifiés par l'IDE (gen/, bin/, target/, build/, etc.). Les seuls fichiers qui doivent aller dans le SCM sont src/, res/, asset/, libs/, AndroidManifest.xml et project.properties, ce sont des parties de votre projet indépendantes de l'IDE et requises par tout IDE moderne pour reconstruire votre projet.