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

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

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

Eclipse: app \ gen \ com.example.app \ R.java

Android Studio: app \ build \ source \ r \ debug \ com.example.app \ R.java

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

4 ответа

Решение

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

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

Обновление 4: 2014/09/11 Добавлена шпаргалка для BuildTypes, Flavors а также Variants(Я наконец-то уверен в себе, чтобы написать это:D)
Обновление 3: 2014/09/11 Обновлены рабочие области сравнения и проекты, чтобы быть точным
Обновление 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). (Затмение Земли: project.properties файл)

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

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

4. Gradle

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

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

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

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

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

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

1. построить

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

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

2. libs

Это стандартная папка libs, которую вы видите и в Eclipse Land.

3. SRC

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

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

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

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

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

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

Объяснение ароматов, buildTypes и т. Д. - О чем идет речь?

CheatSheet для вкусов и buildTypes

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

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

Вариант сборки: 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.

Android Studio: app\build\source\r\debug\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 файлы для генерации отдельных пакетов.

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

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

Для 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:

ToolTip:

Другие вопросы по тегам