Структура проекта Android Studio (по сравнению со структурой проекта Eclipse)


109

Я пытаюсь изучить разработку для Android, и меня сначала смущают разные структуры проектов между Eclipse и Android Studio. Это затрудняет выполнение руководств, разработанных для Eclipse. Может ли кто-нибудь сообщить мне, почему существуют эти различия? Должны ли они существовать?

Например, если бы я нашел файл R.java в двух разных IDE, пути выглядели бы следующим образом:

Затмение: приложение \ gen \ com.example.app \ R.java

Android Studio: приложение \ сборка \ источник \ r \ отладка \ com.example.app \ R.java

Почему эти пути разные? Почему мой R.java находится в папке отладки в Android Studio? Это привело к некоторым ошибкам на раннем этапе, и если кто-нибудь сможет понять эти различия, я был бы признателен.


3
Я пробовал размещать изображения в этом вопросе, но мне нужно как минимум 10 репутации. Я отредактирую сообщение, чтобы включить изображения, как только я получу право.
Джесси

9
Почему бы вам не использовать Eclipse, чтобы решать только проблемы, связанные с Android, а не элементы IDE (тем более, что Android Studio находится в предварительной версии )?
Luksprog 02

3
Согласовано. Если у вас нет хотя бы года опыта разработки Android, IMHO вам не следует возиться с Android Studio, пока он не выйдет из режима предварительного просмотра в раннем доступе.
CommonsWare 02

2
Я бы добавил, что вместо этого вы можете использовать IntelliJ IDEA, поскольку он очень стабилен. Кроме того, когда Android Studio станет более стабильной, перейти на нее будет очень просто, поскольку они представляют собой одну и ту же среду IDE (с AS, обеспечивающим только расширенную интеграцию с Android).
free3dom

3
У меня был 3-летний опыт разработки Android с использованием Eclipse, и мне очень трудно использовать A.Studio. Я хочу, чтобы кто-нибудь дал прямой ответ, раз уж пора людей переезжать; Я переехал. Я не хочу работать над интуицией во время разработки.
Дирадж Бхаскар

Ответы:


203

Тайна: структура проекта и система сборки Android Studio

Я не знаю, из-за ли это системы сборки Gradle (держу пари), но я скажу вам то, что я понял до сих пор.

Обновление 4: 2014/09/11 Добавлено Шпаргалка для BuildTypes, Flavorsи Variants(я , наконец , чувствовать себя уверенно , чтобы написать это: D)
Update 3: 2014/09/11 Обновлены сравнения рабочих областей и проектов , чтобы быть точным
Update 2: 2014/04/17 Добавлены дополнительные сведения в структуру проекта AS.
Обновление 1: 2013/07/29 Добавлена ​​структура проекта IntelliJ.

Структура проекта IntelliJ (показанная в конце) предназначена для IntelliJ с подключаемым модулем Android. Однако в Android Studio структура проекта разделена следующим образом:

Структура: проекты и модули

модуль в Android Studio похож на проект в Eclipse

проект в Android Studio похож на рабочее пространство в Eclipse (точнее, рабочее пространство с взаимозависимыми проектами)

Из документации (Android Studio основана на Intellij IDEA):

Что бы вы ни делали в IntelliJ IDEA, вы делаете это в контексте проекта. Проект - это организационная единица, которая представляет собой законченное программное решение.

Готовый продукт может быть разбит на серию дискретных, изолированных модулей, но это определение проекта, которое объединяет их и связывает в единое целое.

Для Android это означает один проект на приложение и один модуль на библиотеку и каждое тестовое приложение.

Если вы попытаетесь создать несколько приложений в одном проекте, возникнет несколько проблем. Это возможно, но если вы попробуете (как я), вы увидите, что почти все предназначено для работы с одним приложением для каждого проекта.

Например, есть возможность «перестроить проект», что не имеет смысла для нескольких приложений, многие другие настройки проекта будут бесполезны, а встроенная система VCS не очень хороша, когда у вас есть несколько репозиториев.

Структура: структура папки

Структура проекта Android Studio

Папки верхнего уровня

1. Основной проект

Это будет весь контекст проекта ( Eclipse Land: как ваше рабочее пространство, но ограничено тем, что имеет отношение к вашему проекту). Пример: HelloWorldProjectесли имя приложения, которое вы указали, былоHelloWorld

2. .idea

Здесь Android Studio (AS) хранит метаданные конкретного проекта. ( Eclipse Land: project.properties файл)

3. Модуль проекта

Это реальный проект. пример: HelloWorldесли имя вашего приложения, которое вы указали, было HelloWorld

4. градиент

Это то место, где находится оболочка jar системы сборки gradle, т.е. эта jar - это то, как AS взаимодействует с gradle, установленным в Windows (ОС в моем случае).

5. Внешние библиотеки

На самом деле это не папка, а место, где отображаются ссылки на библиотеки ( Eclipse Land: Ссылки на библиотеки). Здесь показана целевая платформа и т. Д.

[ Боковое примечание: здесь многие из нас в Eclipse Land использовали для удаления ссылочных библиотек и исправления свойств проекта, чтобы исправить ошибки ссылок, помните?]

Папка проекта в деталях

Это номер 3 в приведенном выше списке. Имеет следующие поддиректории

1. построить

Здесь есть все выходные данные makeпроцесса, то есть classes.dex, скомпилированные классы и ресурсы и т. Д.

В графическом интерфейсе Android Studio отображается только несколько папок. Важная часть заключается в том, что ваш R.java находится здесь, вbuild/source/<flavor>/r/<build type(optional)>/<package>/R.java

2. библиотеки

Это стандартные библиотеки папки , которые вы видите в затмении земле тоже

3. src

Здесь вы видите только javaи resпапки , которые соответствуют в srcпапку и resпапку в Eclipse , Земля . Это очень приветствуемое упрощение ИМХО.

Примечание по модулям:

Модули похожи на проекты Eclipse Land . Здесь идея состоит в том, что у вас есть один проект приложения (модуль № 3 в списке выше) и несколько проектов библиотеки (как отдельные модули в папке глобального проекта (№ 1 в списке выше)), от которых зависит проект приложения. Как эти библиотечные проекты можно повторно использовать в других приложениях, я до сих пор не выяснил.

[ Примечание: вся реорганизация имеет некоторые преимущества, такие как упрощение папки src, но так много сложностей. Сложности в основном связаны с ОЧЕНЬ тонкой документацией по этому новому макету проекта.]

Новая система сборки

Руководство пользователя новой системы сборки

Объяснение ароматов, типов сборки и т. Д. - О чем такой шум?

CheatSheet для ароматов и типов сборки

BuildType: debug и releaseявляются buildTypesдоступны по умолчанию на всех проектах. Они предназначены для строительства / компиляции того же кода для генерации различных файлов APK. Например, в releaseAPK-файлах вы захотите запустить proguard (для обфускации), подписать его своим ключом (в отличие от ключа отладки), запустить оптимизацию (возможно, с помощью proguard или других инструментов), использовать немного другое packageNames(мы используем com.company.productдля releaseи com.company.product.debugдля debug), и т. д. Мы также используем флаг отладки ( BuildConfig.DEBUG), чтобы отключить запись в logcat (поскольку это замедляет работу приложения) при releaseсборках. Это обеспечивает более быструю debugсборку во время разработки, а также оптимизирует releaseсборку для размещения в игровом магазине.

Вкус продукта: нет доступных по умолчанию ароматов (или, если быть точным, вкус по умолчанию пустой / безымянный). Flavorsможет быть бесплатная версия или платная версия, где у них ДРУГОЙ КОД . Они используют один и тот же Mainкод, но разные версии (или не версии) нескольких файлов или ресурсов исходного кода.

BuildVariant: A buildVariant- это то, чему фактически соответствует сгенерированный APK. Называются они так (по порядку) Product Flavor+ Build Type=Build Variant .
Пример 1: если у вас есть freeи paidкак два вкуса. Вы можете получить следующие варианты сборки:
Бесплатная - отладка
Бесплатная -
Платная версия -
Платная отладка - выпуск
Итак, это 4 возможные конфигурации APK. Несколько конфигураций не могут иметь смысл в конкретном проекте, но они являются доступны.

Пример 2: (для новых проектов / без вариантов) У вас есть 2 buildVariantsили APK, так как вариант по умолчанию безымянный / пустой:
отладочная
версия

Сравните это со структурой проекта Intellij, если это помогает:

Снимок структуры проекта Intellij

Папка .idea (1) содержит несколько подпапок, в основном с внутренней информацией IntelliJ IDEA.

Папка src (2) содержит исходный код файла MyActivity.java (3), который реализует функциональность вашего приложения. Файл принадлежит пакету com.example.

Папка res (4) содержит различные визуальные ресурсы.

Файл layout / main.xml (5) определяет внешний вид приложения, состоящего из ресурсов различных типов.

Папка значений (6) предназначена для хранения файлов .xml, описывающих ресурсы разных типов. В настоящее время в папке находится файл strings.xml с определениями ресурсов String. Как вы увидите в разделе «Добавление цвета», папка макета также может содержать, например, дескриптор цветов.

Выдвижная папка (7) содержит изображения.

Папка gen (8) содержит файл R.java (9), который связывает визуальные ресурсы и исходный код Java. Как вы увидите из разделов ниже, IntelliJ IDEA поддерживает тесную интеграцию между статическими ресурсами и R.java. Как только какие-либо ресурсы добавляются или удаляются, соответствующие классы и поля классов в R.java автоматически создаются или удаляются соответственно. Файл R.java также принадлежит пакету com.example.


3
Большое спасибо за сравнение структур проектов Eclipse и Android Studio! И да, документации об этой структуре проекта и о том, как ее можно использовать в повседневной разработке, не существует.
kpsfoo

1
"3. src Здесь вы видите только папку java и res ..." Точнее, javaи resнаходятся под src/main.
Code-Apprentice

Вот некоторая документация о структуре папок Android Studio: developer.android.com/sdk/installing/studio-build.html
Дэвид д'Се Фрейтас

31

Android Studio: приложение \ сборка \ источник \ r \ отладка \ com.example.app \ R.java

Почему эти пути разные? Почему мой R.java находится в папке отладки в Android Studio? Это привело к некоторым ошибкам на раннем этапе, и если кто-нибудь сможет понять эти различия, я был бы признателен.

Проще говоря, Android Studio настроен на создание отладочного типа сборки в вашей системе.

Eclipse / ADT разработан для поддержки одной сборки за раз (насколько я могу судить). Одна из основных целей новой системы сборки ( из руководства пользователя ):

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

Таким образом, если Eclipse / ADT может генерировать один R.javaфайл, Android Studio поддерживает несколько. Сгенерированный файл R.javaнаходится в debugпапке, поскольку по умолчанию новая система сборки поддерживает debugи releaseтипы сборки с места в карьер. Если вы изменили вариант сборки (кнопка в нижнем левом углу AS) на выпуск, AS будет сгенерирован R.javaв releaseкаталоге.

Это может ничего не значить для простых проектов, но поддержка вариантов сборки означает радикальное упрощение процесса сборки для многих разработчиков, включая проект, над которым я работаю.

Наш проект поддерживает 4 разновидности с 2 типами сборки (отладка и выпуск), что позволяет поддерживать в общей сложности 8 различных комбинаций APK. И каждая из этих комбинаций имеет немного разные конфигурации, поэтому эта система сборки действительно сработала для нас. Моя студия Android установлена ​​на другом компьютере, но если память мне не изменяет, R.javaфайл существует в build/source/<flavor>/r/<build type>/package/R.java. Когда наш CI-сервер создает файлы APK, он использует каждый из этих R.javaфайлов для создания отдельных пакетов.


0

Google прекращает поддержку инструментов разработчика Android (ADT) в Eclipse, согласно нашему объявлению. Вам следует как можно скорее перенести свои проекты разработки приложений в Android Studio. Дополнительные сведения о переходе на Android Studio см. В разделе «Переход на Android Studio».

Так что лучший инструмент для разработки Android для Android Studio только для всей будущей поддержки Android M ---


Eclipse для разработчиков Android - eclipse.org/downloads/packages/…
Yousha Aleayoub,

-2

Для Android Studio 3.0.1 и выбраны все функции:

  • Android O последняя
  • Android Auto
  • Android вещи
  • Android износ
  • Android TV
  • Поддержка C ++
  • Kotlin поддержка

Структура в версии 3.0.1 совсем не похожа на все другие ответы.

Последняя структура показана в 2018 году, Android Studio 3.0.1 01/2018.

Новичок как бы нашел что-то похожее на полезное в подпапке функций:

Обновите Android Studio 3.0.1 01_2018:

Подсказка:

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.