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


109

Я намагаюся навчитися розробці андроїд, і мене спочатку бентежить різні структури проектів між Eclipse та Android Studio. Це ускладнює дотримання підручників, розроблених для Eclipse. Чи міг би хтось дозволити мені знати, чому існують ці відмінності? Чи повинні вони існувати?

Наприклад, якби я міг знайти файл R.java у двох різних IDE, шляхи виглядали б так:

Затемнення: app \ gen \ com.example.app \ R.java

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

Чому ці шляхи відрізняються? Чому мій R.java розміщений у папці налагодження в Android Studio? Це призводить до деяких помилок на початку, і якщо хтось має якісь уявлення про ці відмінності, я би їх вдячний.


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

9
Чому ви не використовуєте Eclipse, щоб вирішувати лише конкретні проблеми Android, а не речі IDE (тим більше, що Android Studio знаходиться у попередньому перегляді доступу )?
Luksprog

3
Домовились. Якщо у вас є принаймні рік досвіду розробки Android, IMHO вам не слід возитися з Android Studio, поки він не вийде з режиму "попереднього попереднього доступу".
CommonsWare

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

3
У мене був 3-річний досвід роботи в Android Dev за допомогою Eclipse, і мені серйозно важко використовувати A.Studio. Я б хотів, щоб хтось дав пряму відповідь, оскільки прийшов час переїзду; Я переїхав. Я не хочу працювати над приманками під час розробки.
Dheeraj Bhaskar

Відповіді:


203

Таємниця: Система структури та побудови проектів 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 є структура проекту, поділена так:

Структура: Проекти та модулі

модуль в 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 будує систему, тобто ця банка - це те, як AS спілкується з gradle, встановленою в Windows (ОС у моєму випадку).

5. Зовнішні бібліотеки

Це насправді не папка, а місце, де відображаються посилання на бібліотеки ( Eclipse Land: Referenced Libraries). Ось де показана цільова платформа тощо.

[ Побічна примітка. Тут багато хто з нас в Eclipse Land використовували для видалення згаданих бібліотек та виправлення властивостей проекту для виправлення посилань на помилки, пам'ятаєте?]

Детальніше про папку проекту

Це номер №3 у наведеному вище списку. Має наступні підручники

1. будувати

Це має повний вихід makeпроцесу, тобто class.dex, складені класи та ресурси тощо.

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

2. губки

Це стандартні бібліотеки папки , які ви бачите в затемненні землі теж

3. src

Тут ви бачите лише папку javaта resпапки, які відповідають srcпапці та resпапці в Eclipse Land . Це дуже вітається спрощення IMHO.

Примітка до модулів:

Модулі схожі на проекти Eclipse Land . Тут ідея полягає у тому, що у вас є один прикладний проект (Модуль №3 у списку вище) та декілька бібліотечних проектів (як окремі Модулі у глобальній папці проектів (№1 у вищевказаному списку)), від яких залежить проект програми. Як ці бібліотечні проекти можна використовувати повторно в інших додатках, я досі не з'ясував.

[ Побічна примітка: Вся реорганізація має деякі переваги, як спрощення в src папці, але так багато ускладнень. Ускладнення, головним чином, зумовлені ДУЖЕ ДУЖКО тонкою документацією щодо цієї нової верстки проекту.]

Нова система нарощування

Посібник користувача для нової системи збирання

Пояснення ароматів та типів побудови тощо. Про що йде приспів?

CheatSheet для ароматів та типів build

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) містить ряд підпапок, головним чином, з внутрішньою інформацією ID IDI IntelEA .

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

Папка res (4) містить різні візуальні ресурси.

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

Папка значень (6) призначена для зберігання файлів .xml, що описують ресурси різних типів. На даний момент у папці є файл strings.xml з визначенням рядкових ресурсів. Як ви побачите з розділу Додавання кольору, папка макета може містити, наприклад, дескриптор кольорів.

Папка, що пересувається (7), містить зображення.

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


3
Дуже дякую за порівняння структур проекту Eclipse та Android Studio! І так, документації щодо цієї структури проекту та того, як вона може бути використана в повсякденній розробці, не існує.
kpsfoo

1
«3. ЦСМ Тут ви бачите тільки Java і рез папку ...» Щоб бути більш точним, javaі resзнаходяться під src/main.
Код-учень

Ось деяка документація про структуру папок Android Studio: 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

Чому ці шляхи відрізняються? Чому мій 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збирає типи від bat. Якщо ви змінили варіант складання (кнопка, нижній лівий кут AS) для випуску AS, генерується R.javaв releaseкаталозі.

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

Наш проект підтримує 4 аромати з двома типами збірки (налагодження та випуск), щоб підтримати 8 різних комбінацій APK. І кожна з цих комбінацій має дещо різні конфігурації, тому ця система складання нас справді розробила. Моя андроїд-студія встановлена ​​на іншій машині, але якщо пам'ять слугує моє правильно, то 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 ++
  • Підтримка Котліна

Структура у версії 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.