Android Studio-Projektstruktur (vs Eclipse-Projektstruktur)


109

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.


3
Ich habe versucht, Bilder in dieser Frage zu posten, aber ich brauche mindestens 10 Ruf. Ich werde den Beitrag so bearbeiten, dass er die Bilder enthält, sobald ich mich qualifiziert habe.
Jesse

9
Warum verwenden Sie Eclipse nicht, um nur die Android-spezifischen Probleme und nicht die IDE-Probleme zu lösen (insbesondere, da sich Android Studio in der Vorschau für den frühen Zugriff befindet )?
Luksprog

3
Einverstanden. Wenn Sie nicht mindestens ein Jahr Erfahrung in der Android-Entwicklung haben, sollten Sie meiner Meinung nach nicht mit Android Studio herumspielen, bis der Modus "Vorschau für frühen Zugriff" verlassen wird.
CommonsWare

2
Ich würde hinzufügen, dass Sie stattdessen IntelliJ IDEA verwenden können, da es sehr stabil ist. Sobald Android Studio stabiler ist, ist der Wechsel sehr einfach, da es sich um dieselbe IDE handelt (wobei AS nur eine verbesserte Android-Integration bietet).
free3dom

3
Ich habe 3 Jahre Erfahrung in der Android-Entwicklung mit Eclipse und finde es ernsthaft schwierig, A.Studio zu verwenden. Ich wünschte, jemand hätte eine klare Antwort gegeben, da es Zeit ist, dass Menschen umziehen. Ich bin umgezogen. Ich möchte während der Entwicklung nicht an Ahnungen arbeiten.
Dheeraj Bhaskar

Antworten:


203

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, Flavorsund 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

Android Studio-Projektstruktur

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: HelloWorldProjectWenn 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: HelloWorldWenn 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 makeProzesses, 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 javaund resOrdner welche den srcOrdner und resOrdner 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 releasesind buildTypesstandardmäßig für alle Projekte verfügbar. Sie sind für den Bau / die Kompilierung SAME CODE verschiedenen APKs zu erzeugen. Zum Beispiel releasemö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.productfür releaseund com.company.product.debugfür debug), usw. Wir verwenden auch ein Debug-Flag ( BuildConfig.DEBUG), um die Protokollierung in logcat (da dies die App verlangsamt) bei releaseBuilds zu deaktivieren . Dies sorgt für einen schnelleren debugBuild während der Entwicklung, aber auch für einen optimierten releaseBuild für den Play Store.

Produktaroma: Es sind keine Standardaromen verfügbar (oder genauer gesagt, das Standardaroma ist leer / namenlos). Flavorskönnte eine kostenlose Version oder eine kostenpflichtige Version sein, bei der sie einen anderen Code haben . Sie verwenden denselben MainCode, jedoch unterschiedliche Versionen (oder keine Versionen) einiger Quellcodedateien oder -ressourcen.

BuildVariant: A buildVariantist 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 freeund paidals 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 buildVariantsVarianten ) 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:

Snapshot der Intellij-Projektstruktur

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.


3
Vielen Dank für den Vergleich der Projektstrukturen von Eclipse und Android Studio! Und ja, die Dokumentation zu dieser Projektstruktur und wie sie in der täglichen Entwicklung verwendet werden könnte, existiert nicht.
kpsfoo

1
"3. src Hier sehen Sie nur den Ordner java und res ..." Genauer gesagt, javaund ressind unter src/main.
Code-Apprentice

Hier ist eine Dokumentation über die Android Studio-Ordnerstruktur: developer.android.com/sdk/installing/studio-build.html
David d C e Freitas

31

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.

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 ):

Make it easy to create several variants of an application, 
either for multi-apk distribution or for different flavors of an application

Da Eclipse / ADT eine R.javaDatei generieren kann, unterstützt Android Studio mehrere. Das generierte R.javabefindet sich im debugOrdner, da das neue Build-System standardmäßig Typen von Anfang an unterstützt debugund erstellt release. Wenn Sie Ihre Build-Variante (Schaltfläche, untere linke Ecke von AS) geändert haben, um AS freizugeben, wird AS R.javaim releaseVerzeichnis 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.javaDatei in vorhanden build/source/<flavor>/r/<build type>/package/R.java. Wenn unser CI-Server die APK-Dateien erstellt, verwendet er jede dieser R.javaDateien, um separate Pakete zu generieren.


0

Google Die Unterstützung für die Android Developer Tools (ADT) in Eclipse wird gemäß unserer Ankündigung eingestellt. Sie sollten Ihre App-Entwicklungsprojekte so schnell wie möglich auf Android Studio migrieren. Weitere Informationen zum Übergang zu Android Studio finden Sie unter Migrieren zu Android Studio.

Also am besten für Android-Entwicklungstool für Android Studio nur für alle zukünftige Unterstützung von Android M ---


Eclipse für Android-Entwickler - eclipse.org/downloads/packages/…
Yousha Aleayoub

-2

Für Android Studio 3.0.1 und alle Funktionen ausgewählt:

  • Android O spätestens
  • Android Auto
  • Android Dinge
  • Android tragen
  • Android TV
  • C ++ Unterstützung
  • Kotlin Unterstützung

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:

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.