Das Rätsel: Die Projektstruktur und das Build-System von Android Studio
Ich weiß nicht, ob dies am Gradle Build System liegt (ich würde wetten, dass es so ist), aber ich werde Ihnen sagen, was ich bisher verstanden habe.
Update 4: 2014.09.11 Added Spickzettel für BuildTypes
, Flavors
und Variants
(ich endlich das Gefühl zuversichtlich , diese zu schreiben: D)
Update 3: 2014.09.11 die Vergleichsarbeitsbereiche und Projekte aktualisieren genau sein
2 Update: 2014.04.17 Weitere Details zur AS-Projektstruktur hinzugefügt
Update 1: 29.07.2013 IntelliJ-Projektstruktur hinzugefügt
Die Projektstruktur des IntelliJ (am Ende gezeigt) ist für IntelliJ mit dem Android-Plugin. Das Android Studio hat jedoch eine Projektstruktur, die wie folgt unterteilt ist:
Struktur: Projekte und Module
Modul in Android Studio ist wie ein Projekt in Eclipse
Ein Projekt in Android Studio ist wie ein Arbeitsbereich in Eclipse (genauer gesagt ein Arbeitsbereich mit voneinander abhängigen Projekten).
Aus der Dokumentation (Android Studio basiert auf Intellij IDEA):
Was auch immer Sie in IntelliJ IDEA tun, Sie tun dies im Rahmen eines Projekts. Ein Projekt ist eine Organisationseinheit, die eine vollständige Softwarelösung darstellt.
Ihr fertiges Produkt kann in eine Reihe von diskreten, isolierten Modulen zerlegt werden, aber es ist eine Projektdefinition, die sie zusammenführt und zu einem größeren Ganzen zusammenfügt.
Für Android bedeutet dies ein Projekt pro App und ein Modul pro Bibliothek und pro Test-App.
Es gibt mehrere Probleme, wenn Sie versuchen, mehrere Apps innerhalb desselben Projekts zu erstellen. Es ist möglich, aber wenn Sie es versuchen (wie ich), werden Sie feststellen, dass fast alles so konzipiert ist, dass es mit einer einzigen App pro Projekt funktioniert.
Zum Beispiel gibt es eine Option zum "Neuerstellen des Projekts", die bei mehreren Apps keinen Sinn macht, viele andere Projekteinstellungen wären nutzlos und das integrierte VCS-System ist nicht besonders gut, wenn Sie mehrere Repositorys haben.
Struktur: Ordnerstruktur
Ordner der obersten Ebene
1. Hauptprojekt
Dies wäre der gesamte Projektkontext ( Eclipse Land: Wie Ihr Arbeitsbereich, jedoch auf das beschränkt, was für Ihr Projekt relevant ist). Beispiel: HelloWorldProject
Wenn der Name der von Ihnen angegebenen Bewerbung lauteteHelloWorld
2. .idea
Hier werden projektspezifische Metadaten von Android Studio (AS) gespeichert. ( Eclipse Land: project.properties
Datei)
3. Projektmodul
Dies ist das eigentliche Projekt. Beispiel: HelloWorld
Wenn Ihr Anwendungsname HelloWorld war
4. gradle
Hier befindet sich der JAR-Wrapper des Gradle-Build-Systems, dh in diesem JAR kommuniziert AS mit Gradle, das unter Windows installiert ist (in meinem Fall das Betriebssystem).
5. Externe Bibliotheken
Dies ist eigentlich kein Ordner, sondern ein Ort, an dem referenzierte Bibliotheken ( Eclipse Land: referenzierte Bibliotheken) angezeigt werden. Hier wird die Zielplattform usw. angezeigt.
[ Randnotiz: Hier haben viele von uns in Eclipse Land die referenzierten Bibliotheken gelöscht und Projekteigenschaften korrigiert, um Referenzfehler zu beheben.]
Projektordner im Detail
Dies ist Nummer 3 in der obigen Liste. Hat die folgenden Unterverzeichnisse
1. bauen
Dies hat die gesamte Ausgabe des make
Prozesses, dh classes.dex, kompilierte Klassen und Ressourcen usw.
In der Android Studio-Benutzeroberfläche werden nur wenige Ordner angezeigt. Der wichtige Teil ist, dass Ihr R.java hier unter zu finden istbuild/source/<flavor>/r/<build type(optional)>/<package>/R.java
2. libs
Dies ist die Standard - libs Ordner, den Sie in sehen Eclipse Land zu
3. src
Hier sehen Sie nur die java
und res
Ordner welche den src
Ordner und res
Ordner in Eclipse - Land . Dies ist meiner Meinung nach eine sehr begrüßenswerte Vereinfachung.
Hinweis zu Modulen:
Module sind wie Eclipse Land- Projekte. Hier besteht die Idee darin, dass Sie ein Anwendungsprojekt (Modul Nr. 3 in der obigen Liste) und mehrere Bibliotheksprojekte (als separate Module im globalen Projektordner (Nr. 1 in der obigen Liste)) haben, von denen das Anwendungsprojekt abhängt. Wie diese Bibliotheksprojekte in anderen Anwendungen wiederverwendet werden können, habe ich noch nicht herausgefunden.
[ Randnotiz: Die gesamte Neuorganisation hat einige Vorteile wie Vereinfachungen im src-Ordner, aber so viele Komplikationen. Die Komplikationen sind hauptsächlich auf SEHR SEHR dünne Dokumentation zu diesem neuen Projektlayout zurückzuführen.]
Das neue Build-System
Benutzerhandbuch für das neue Build-System
Erklärung der Aromen und BuildTypes usw. - Worum geht es im Hullabaloo?
CheatSheet für Aromen und BuildTypes
BuildType: debug
und release
sind buildTypes
standardmäßig für alle Projekte verfügbar. Sie sind für den Bau / die Kompilierung SAME CODE verschiedenen APKs zu erzeugen. Zum Beispiel release
möchten Sie auf APKs Proguard ausführen (zur Verschleierung), es mit Ihrem Schlüssel signieren (im Gegensatz zum Debug-Schlüssel), Optimierungen ausführen (möglicherweise über Proguard oder andere Tools), etwas anders verwenden packageNames
(wir verwenden com.company.product
für release
und com.company.product.debug
für debug
), usw. Wir verwenden auch ein Debug-Flag ( BuildConfig.DEBUG
), um die Protokollierung in logcat (da dies die App verlangsamt) bei release
Builds zu deaktivieren . Dies sorgt für einen schnelleren debug
Build während der Entwicklung, aber auch für einen optimierten release
Build für den Play Store.
Produktaroma: Es sind keine Standardaromen verfügbar (oder genauer gesagt, das Standardaroma ist leer / namenlos). Flavors
könnte eine kostenlose Version oder eine kostenpflichtige Version sein, bei der sie einen anderen Code haben . Sie verwenden denselben Main
Code, jedoch unterschiedliche Versionen (oder keine Versionen) einiger Quellcodedateien oder -ressourcen.
BuildVariant: A buildVariant
ist das, was eine generierte APK tatsächlich entspricht. Sie werden wie folgt benannt (in der Reihenfolge) Product Flavor
+ Build Type
=Build Variant
.
Beispiel 1: Wenn Sie free
und paid
als zwei Geschmacksrichtungen haben. Die Build-Varianten, die Sie erhalten würden, sind:
Free - Debug
Free - Release
Paid - Debug
Paid - Release
Das sind also 4 mögliche APK-Konfigurationen. Einige Konfigurationen können keinen Sinn in einem bestimmten Projekt machen, aber sie sind vorhanden.
Beispiel 2: (für neue Projekte / keine buildVariants
Varianten ) Sie haben 2 oder APKs verfügbar, da die Standardversion namenlos / leer ist:
Debug-
Version
Der Ordner .idea (1) enthält eine Reihe von Unterordnern, hauptsächlich mit internen Informationen zu IntelliJ IDEA.
Der Ordner src (2) enthält den Quellcode der Datei MyActivity.java (3) , der die Funktionalität Ihrer Anwendung implementiert. Die Datei gehört zum Paket com.example.
Der Ordner res (4) enthält verschiedene visuelle Ressourcen.
Die Datei layout / main.xml (5) definiert das Erscheinungsbild der Anwendung, die aus Ressourcen verschiedener Typen besteht.
Der Werteordner (6) dient zum Speichern von XML-Dateien, die Ressourcen verschiedener Typen beschreiben. Derzeit enthält der Ordner eine Datei strings.xml mit Definitionen der Zeichenfolgenressourcen. Wie Sie im Abschnitt Hinzufügen einer Farbe sehen werden, kann der Layoutordner beispielsweise auch einen Deskriptor für Farben enthalten.
Der Zeichenordner (7) enthält Bilder.
Der Ordner gen (8) enthält die Datei R.java (9) , die die visuellen Ressourcen und den Java-Quellcode verknüpft. Wie Sie in den folgenden Abschnitten sehen werden, unterstützt IntelliJ IDEA eine enge Integration zwischen statischen Ressourcen und R.java. Sobald Ressourcen hinzugefügt oder entfernt werden, werden die entsprechenden Klassen und Klassenfelder in R.java automatisch entsprechend generiert oder entfernt. Die R.java-Datei gehört auch zum Paket com.example.