Відповіді:
З документації (Android Studio базується на Intellij IDEA):
Що б ви не робили в IntelliJ IDEA, ви робите це в контексті проекту. Проект - це організаційний підрозділ, який представляє повне програмне рішення.
Ваш готовий продукт може бути розкладений на серію дискретних, ізольованих модулів, але це визначення проекту, яке об'єднує їх і з’єднує їх у більше ціле.
Для Android це означає один проект на додаток та один модуль на бібліотеку та на тестовий додаток.
Якщо ви намагаєтеся створити декілька додатків у межах одного проекту, існує декілька проблем. Це можливо, але якщо ви спробуєте (як я), ви побачите, що майже все створено для роботи з одним додатком на проект.
Наприклад, є можливість "відновити проект", що не має сенсу для декількох додатків, багато інших параметрів проекту були б марними, а вбудована система VCS не велика, коли у вас є кілька сховищ.
Відповідь KISS:
модуль в Android Studio - це як проект у Eclipse
Проект в Android Studio схожий на робочу область в Eclipse
Проект в Android Studio представляє собою повне додаток для Android. Проекти Android Studio складаються з одного або декількох модулів .
Модуль є складовою частиною вашої програми, ви можете створювати, тестувати і налагоджувати незалежно один від одного.
Модулі містять вихідний код та ресурси для вашої програми.
Модулі надають контейнер для вихідного коду програми, файлів ресурсів та налаштувань рівня додатків, таких як файл збірки на рівні модуля та файл маніфесту Android. Кожен модуль може бути самостійно побудований, протестований та налагоджений.
Android Studio використовує модулі для спрощення додавання нових пристроїв до вашого проекту. Виконуючи кілька простих кроків в Android Studio, ви можете створити модуль, який містить код, специфічний для типу пристрою, наприклад, Wear OS або Android TV. Android Studio автоматично створює каталоги модулів, такі як каталоги джерел і ресурсів, і файл build.gradle за замовчуванням, відповідний типу пристрою. Також Android Studio створює модулі пристроїв з рекомендованими конфігураціями збірки, наприклад, використовуючи бібліотеку Leanback для модулів Android TV.
Наприклад:
Крім них, ви також можете мати "модуль локальної бібліотеки". Скажімо, ви розробляєте Рамку управління обліковими записами як модуль бібліотеки, який використовується в кінцевому рахунку у вашій програмі, ви можете робити це як окремий модуль в одному проекті. Щоб включити це у свій додаток, вам доведеться написати щось на зразок,
compile project(':mylibrary')
Документи кажуть:
Це оголошує залежність від модуля бібліотеки Android під назвою "mylibrary" (це ім'я повинно відповідати імені бібліотеки, визначеному як включення у ваш файл settings.gradle). Потрібна система збирання, щоб зібрати модуль бібліотеки з вашим модулем програми та включити отриманий файл AAR у свій APK.
Нарешті, Intellij згадує ще кілька деталей про файли конфігурації модуля:
Інформація про конфігурацію модуля зберігається у файлі модуля .iml . За замовчуванням такий файл знаходиться в кореневій папці вмісту модуля.
Команди розробників, як правило, діляться
.iml
файлами модулів за допомогою контролю версій.
Цей .iml
файл трохи страшно дивитись. Ось приклад з мого проекту:
<?xml version="1.0" encoding="UTF-8"?>
<module external.linked.project.id=":app" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/.." external.system.id="GRADLE" external.system.module.group="LearnCity" external.system.module.version="unspecified" type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="android-gradle" name="Android-Gradle">
<configuration>
<option name="GRADLE_PROJECT_PATH" value=":app" />
</configuration>
</facet>
<facet type="android" name="Android">
<configuration>
<option name="SELECTED_BUILD_VARIANT" value="debug" />
<option name="ASSEMBLE_TASK_NAME" value="assembleDebug" />
<option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" />
<afterSyncTasks>
<task>generateDebugSources</task>
</afterSyncTasks>
<option name="ALLOW_USER_CONFIGURATION" value="false" />
<option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" />
<option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res/layouts/common/layout/ver3/layout" />
<option name="RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/src/main/res/layouts/common/layout/ver3/layout;file://$MODULE_DIR$/src/main/res/layouts/common/layout/ver3;file://$MODULE_DIR$/src/main/res/layouts/common/layout/ver2/layout;file://$MODULE_DIR$/src/main/res/layouts/common/layout/ver2;file://$MODULE_DIR$/src/main/res/layouts/common/layout/ver1/layout;file://$MODULE_DIR$/src/main/res/layouts/common/layout/ver1;file://$MODULE_DIR$/src/main/res/layouts/common/layout/ver0/layout;file://$MODULE_DIR$/src/main/res/layouts/common/layout/ver0;file://$MODULE_DIR$/src/main/res/layouts/common/layout;file://$MODULE_DIR$/src/main/res/layouts/learner/layout;file://$MODULE_DIR$/src/main/res/layouts/tutor/layout;file://$MODULE_DIR$/src/main/res/layouts/obsolete/layout;file://$MODULE_DIR$/src/main/res/layouts/common;file://$MODULE_DIR$/src/main/res/layouts/learner;file://$MODULE_DIR$/src/main/res/layouts/tutor;file://$MODULE_DIR$/src/main/res/layouts/obsolete;file://$MODULE_DIR$/src/main/res/layouts;file://$MODULE_DIR$/src/main/res;file://$MODULE_DIR$/src/debug/res" />
<option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" />
</configuration>
</facet>
</component>
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7" inherit-compiler-output="false">
<output url="file://$MODULE_DIR$/build/intermediates/classes/debug" />
<output-test url="file://$MODULE_DIR$/build/intermediates/classes/test/debug" />
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/google-services/debug" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/debug" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/debug" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/androidTest/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/androidTest/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/androidTest/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/androidTest/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/debug" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/androidTest/debug" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/res" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/assets" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/aidl" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/shaders" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/shaders" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/main/res/layouts/common/layout/ver3/layout" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/res/layouts/common/layout/ver3" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/res/layouts/common/layout/ver2/layout" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/res/layouts/common/layout/ver2" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/res/layouts/common/layout/ver1/layout" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/res/layouts/common/layout/ver1" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/res/layouts/common/layout/ver0/layout" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/res/layouts/common/layout/ver0" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/res/layouts/common/layout" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/res/layouts/learner/layout" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/res/layouts/tutor/layout" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/res/layouts/obsolete/layout" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/res/layouts/common" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/res/layouts/learner" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/res/layouts/tutor" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/res/layouts/obsolete" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/res/layouts" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/assets" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/aidl" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/builds" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-classes" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-runtime-classes" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-safeguard" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-verifier" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant-run-resources" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant-run-support" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/jniLibs" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/multi-dex" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/pre-dexed" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/reload-dex" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/restart-dex" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/shaders" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/split-apk" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/transforms" />
<excludeFolder url="file://$MODULE_DIR$/build/outputs" />
<excludeFolder url="file://$MODULE_DIR$/build/tmp" />
</content>
<orderEntry type="jdk" jdkName="Android API 25 Platform" jdkType="Android SDK" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" exported="" name="google-http-client-android-1.22.0" level="project" />
<orderEntry type="library" exported="" name="firebase-analytics-10.2.0" level="project" />
<orderEntry type="library" exported="" name="firebase-core-10.2.0" level="project" />
<orderEntry type="library" exported="" name="play-services-auth-base-10.2.0" level="project" />
<orderEntry type="library" exported="" name="gson-2.8.0" level="project" />
<orderEntry type="library" exported="" name="play-services-tasks-10.2.0" level="project" />
<orderEntry type="library" exported="" name="constraint-layout-1.0.2" level="project" />
<orderEntry type="library" exported="" name="appengine-api-1.0-sdk-1.9.50" level="project" />
<orderEntry type="library" exported="" name="design-25.3.0" level="project" />
<orderEntry type="library" exported="" name="android-job-1.1.8" level="project" />
<orderEntry type="library" exported="" name="transition-25.3.0" level="project" />
<orderEntry type="library" exported="" name="play-services-base-10.2.0" level="project" />
<orderEntry type="library" exported="" name="multispinner-0.1.1" level="project" />
<orderEntry type="library" exported="" name="play-services-auth-10.2.0" level="project" />
<orderEntry type="library" exported="" name="support-core-ui-25.3.0" level="project" />
<orderEntry type="library" exported="" name="simpleratingbar-0.1.5" level="project" />
<orderEntry type="library" exported="" name="play-services-maps-10.2.0" level="project" />
<orderEntry type="library" exported="" name="play-services-location-10.2.0" level="project" />
<orderEntry type="library" exported="" name="firebase-iid-10.2.0" level="project" />
<orderEntry type="library" exported="" name="support-core-utils-25.3.0" level="project" />
<orderEntry type="library" exported="" name="jsr305-2.0.1" level="project" />
<orderEntry type="library" exported="" name="support-fragment-25.3.0" level="project" />
<orderEntry type="library" exported="" scope="TEST" name="multidex-instrumentation-1.0.1" level="project" />
<orderEntry type="library" exported="" name="constraint-layout-solver-1.0.2" level="project" />
<orderEntry type="library" exported="" name="androidannotations-api-3.2" level="project" />
<orderEntry type="library" exported="" name="java-uuid-generator-3.1.4" level="project" />
<orderEntry type="library" exported="" name="google-http-client-1.22.0" level="project" />
<orderEntry type="library" exported="" name="firebase-messaging-10.2.0" level="project" />
<orderEntry type="library" exported="" name="firebase-analytics-impl-10.2.0" level="project" />
<orderEntry type="library" exported="" name="firebase-common-10.2.0" level="project" />
<orderEntry type="library" exported="" name="eventbus-3.0.0" level="project" />
<orderEntry type="library" exported="" name="cat-1.0.5" level="project" />
<orderEntry type="library" exported="" name="play-services-basement-10.2.0" level="project" />
<orderEntry type="library" exported="" name="support-compat-25.3.0" level="project" />
<orderEntry type="library" exported="" name="support-v4-25.3.0" level="project" />
<orderEntry type="library" exported="" name="multidex-1.0.1" level="project" />
<orderEntry type="library" exported="" scope="TEST" name="hamcrest-core-1.3" level="project" />
<orderEntry type="library" exported="" name="support-media-compat-25.3.0" level="project" />
<orderEntry type="library" exported="" scope="TEST" name="junit-4.12" level="project" />
<orderEntry type="library" exported="" name="recyclerview-v7-25.3.0" level="project" />
<orderEntry type="library" exported="" name="appcompat-v7-25.3.0" level="project" />
<orderEntry type="library" exported="" name="animated-vector-drawable-25.3.0" level="project" />
<orderEntry type="library" exported="" name="support-annotations-25.3.0" level="project" />
<orderEntry type="library" exported="" name="support-vector-drawable-25.3.0" level="project" />
<orderEntry type="module" module-name="backend" exported="" />
<orderEntry type="library" exported="" name="android-android-25" level="project" />
</component>
</module>
@Deprecated
,?). Це має набагато більше сенсу.
IntelliJ IDEA створює проект для всієї бази коду, з якою ви працюєте, і модуля для кожного з його окремих компонентів. Отже, модуль IntelliJ IDEA більше схожий на проект Eclipse, і проект приблизно схожий на робочу область Eclipse. Немає точного еквіваленту робочої області Eclipse, яка містить всю вашу роботу, але ви можете відкривати кілька проектів у декількох кадрах одночасно.
Ось сторінка запитань і запитів IntelliJ IDEA для користувачів Eclipse -
http://www.jetbrains.com/idea/documentation/migration_faq.html
Посилаючись на відповідь @Oded Breiner, я б сказав, що:
модуль в Android Studio - це як проект у Eclipse
Проект в Android Studio - це як робочий набір в Eclipse