Android工作室:新项目vs新模块

Android Studio使用modules的概念,而Eclipse等其他IDE使用projects 。 但是,“ File菜单可以select创buildNew Module以及new Project

这两者之间有什么区别?

哪一个被推荐使用?

从文档 (Android Studio基于Intellij IDEA):

无论您在IntelliJ IDEA中做什么,都可以在项目的上下文中进行。 项目是代表完整软件解决scheme的组织单位。

您的成品可能会被分解成一系列离散的,孤立的模块,但这是一个项目定义,它们将它们组合在一起并将它们连接成一个更大的整体。

对于Android,这意味着每个应用程序一个项目,每个库和每个testing应用程序一个模块。

如果您尝试在同一个项目中构build多个应用程序,则会出现多个问题。 这是可能的,但如果你尝试(像我一样),你会看到几乎所有的东西都被devise为每个项目的一个应用程序。

例如,有一个“重build项目”的选项,这对多个应用程序没有意义,许多其他项目设置将是无用的,并且当您拥有多个存储库时,内置的VCS系统不是很好。

KISS回答:

Android Studio中的 模块就像Eclipse中的一个项目

Android Studio中的 项目就像Eclipse中工作区

Android Studio中项目代表一个完整的Android应用程序。 Android Studio项目由一个或多个 模块组成

模块是您的应用程序的一个组件,您可以独立构build,testing或debugging。

模块包含您的应用程序的源代码和资源。

IntelliJ IDEA为您使用的整个代码库创build一个项目,并为每个单独的组件创build一个模块。 所以,IntelliJ IDEA模块更像Eclipse项目,项目大致类似于Eclipse工作区。 Eclipse的工作空间并不完全等同于包含所有工作的Eclipse工作空间,但是您可以同时在多个框架中打开多个项目。

这里是Eclipse用户的IntelliJ IDEA问答页面 –

http://www.jetbrains.com/idea/documentation/migration_faq.html

模块就像apkLibs,即它有自己的资源,清单,testing等,但主要的应用程序通常使用各种apklib /模块来帮助把它们放在一个解决scheme

从更新的文档 [2017]:

模块为应用程序的源代码,资源文件和应用程序级别设置(如模块级构build文件和Android清单文件)提供了一个容器。 每个模块都可以独立构build,testing和debugging。

Android Studio使用模块来轻松地将新设备添加到您的项目中。 通过遵循Android Studio中的几个简单步骤, 您可以创build一个模块来包含特定于设备types的代码,例如Android Wear或Android TV。 Android Studio会自动创build模块目录,例如源和资源目录,以及适用于设备types的默认build.gradle文件。 此外,Android Studio会使用推荐的构buildconfiguration创build设备模块,例如使用Android TV模块的Leanback库。

例如:

  • 手机和平板电脑模块
  • Android Wear模块
  • Android TV模块
  • 玻璃模块

除此之外,您还可以拥有“本地图书馆模块”。 比方说,你开发一个账户pipe理框架作为一个库模块,最终在你的应用程序中使用,你可以在同一个项目中作为一个单独的模块。 要包括在你的应用程序,你将不得不写一些像,

 compile project(':mylibrary') 

Docs说,

这声明了一个名为“mylibrary”的Android库模块的依赖关系(这个名字必须与在你的settings.gradle文件中被定义为include的库名相匹配)。 它需要构build系统与您的应用程序模块编译库模块,并将生成的AAR文件包含在您的APK中。

最后, Intellij提到了关于模块configuration文件的更多细节:

模块的configuration信息存储在.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> 

提到@Oded Breiner答案我会说:

Android Studio中的 模块就像Eclipse中的一个项目

Android Studio中的 项目就像Eclipse中工作集