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中的工作集