Ich versuche, die Android-Entwicklung zu lernen und bin zunächst verwirrt über die unterschiedlichen Projektstrukturen zwischen Eclipse und Android Studio. Dies macht es schwierig, Tutorials zu befolgen, die für Eclipse entwickelt wurden. Könnte mich jemand wissen lassen, warum diese Unterschiede bestehen? Sollten sie existieren?
Wenn ich beispielsweise die R.java-Datei in den beiden verschiedenen IDEs suchen würde, würden die Pfade folgendermaßen aussehen:
Eclipse: app \ gen \ com.example.app \ R.java
Android Studio: app \ build \ source \ r \ debug \ com.example.app \ R.java
Warum unterscheiden sich diese Wege? Warum befindet sich mein R.java in einem Debug-Ordner in Android Studio? Dies führte schon früh zu einigen Fehlern, und wenn jemand einen Einblick in diese Unterschiede hat, würde ich sie begrüßen.
Antworten:
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
undVariants
(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):
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 war4. 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 ist
build/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
undres
Ordner welche densrc
Ordner undres
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
undrelease
sindbuildTypes
standardmäßig für alle Projekte verfügbar. Sie sind für den Bau / die Kompilierung SAME CODE verschiedenen APKs zu erzeugen. Zum Beispielrelease
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 verwendenpackageNames
(wir verwendencom.company.product
fürrelease
undcom.company.product.debug
fürdebug
), usw. Wir verwenden auch ein Debug-Flag (BuildConfig.DEBUG
), um die Protokollierung in logcat (da dies die App verlangsamt) beirelease
Builds zu deaktivieren . Dies sorgt für einen schnellerendebug
Build während der Entwicklung, aber auch für einen optimiertenrelease
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 denselbenMain
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
undpaid
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
Vergleichen Sie dies mit der Projektstruktur von Intellij, wenn dies hilft:
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.
quelle
java
undres
sind untersrc/main
.Einfach ausgedrückt ist Android Studio so konfiguriert, dass ein Debug- Build-Typ auf Ihrem System erstellt wird.
Eclipse / ADT wurde entwickelt, um jeweils einen Build zu unterstützen (soweit ich das beurteilen kann). Eines der Hauptziele des neuen Build-Systems ( aus dem Benutzerhandbuch ):
Da Eclipse / ADT eine
R.java
Datei generieren kann, unterstützt Android Studio mehrere. Das generierteR.java
befindet sich imdebug
Ordner, da das neue Build-System standardmäßig Typen von Anfang an unterstütztdebug
und erstelltrelease
. Wenn Sie Ihre Build-Variante (Schaltfläche, untere linke Ecke von AS) geändert haben, um AS freizugeben, wird ASR.java
imrelease
Verzeichnis generiert .Dies bedeutet für einfache Projekte möglicherweise nichts, aber die Unterstützung von Build-Varianten bedeutet für viele Entwickler, einschließlich des Projekts, an dem ich arbeite, eine drastische Vereinfachung des Build-Prozesses.
Unser Projekt unterstützt 4 Varianten mit 2 Build-Typen (Debug und Release), um insgesamt 8 verschiedene APK-Kombinationen zu unterstützen. Und jede dieser Kombinationen hat leicht unterschiedliche Konfigurationen, so dass dieses Build-System für uns wirklich funktioniert hat. Mein Android Studio ist auf einem anderen Computer installiert, aber wenn der Speicher richtig funktioniert, ist die
R.java
Datei in vorhandenbuild/source/<flavor>/r/<build type>/package/R.java
. Wenn unser CI-Server die APK-Dateien erstellt, verwendet er jede dieserR.java
Dateien, um separate Pakete zu generieren.quelle
Also am besten für Android-Entwicklungstool für Android Studio nur für alle zukünftige Unterstützung von Android M ---
quelle
Für Android Studio 3.0.1 und alle Funktionen ausgewählt:
Die Struktur in Version 3.0.1 sieht überhaupt nicht wie alle anderen Antworten aus.
Die aktuelle Struktur ist wie im Jahr 2018, Android Studio 3.0.1 01/2018 angezeigt.
Der Neuling hat im Feature-Unterordner etwas gefunden, das der Verwendung ähnelt:
Aktualisieren Sie Ihr Android Studio 3.0.1 01_2018:
ToolTip:
quelle