Estudio de Android: nuevo proyecto vs nuevo módulo

Android Studio utiliza el concepto de modules , mientras que otros IDE como Eclipse utilizan projects . Sin embargo, el menú File AS tiene la opción de crear un New Module , así como un new Project .

¿Cuáles son las diferencias entre estos dos si los hay?

¿Cuál se recomienda usar?

De la documentación (Android Studio se basa en Intellij IDEA):

Lo que hagas en IntelliJ IDEA, lo haces en el contexto de un proyecto. Un proyecto es una unidad organizativa que representa una solución completa de software.

Su producto terminado se puede descomponer en una serie de módulos discretos y aislados, pero es una definición de proyecto que los reúne y los une en un todo mayor.

Para Android, significa un proyecto por aplicación y un módulo por biblioteca y por aplicación de prueba.

Hay varios problemas si intenta crear varias aplicaciones dentro del mismo proyecto. Es posible, pero si lo intentas (como lo hice), verás que casi todo está diseñado para trabajar con una sola aplicación por proyecto.

Por ejemplo, hay una opción para "reconstruir el proyecto", que no tiene sentido con múltiples aplicaciones, muchos otros ajustes del proyecto sería inútil, y el sistema VCS incorporado no es genial cuando se tienen múltiples repositorios.

KISS respuesta:

Módulo en Android Studio es como un proyecto en Eclipse

Proyecto en Android Studio es como un espacio de trabajo en Eclipse

Un proyecto de Android Studio representa una aplicación completa de Android. Los proyectos de Android Studio consisten en uno o más módulos .

Un módulo es un componente de su aplicación que puede crear, probar o depurar independientemente.

Los módulos contienen el código fuente y los recursos de la aplicación.

IntelliJ IDEA crea un proyecto para toda la base de código con la que trabaja y un módulo para cada uno de sus componentes individuales. Por lo tanto, IntelliJ IDEA módulo es más como un proyecto Eclipse, y el proyecto es más o menos similar a Eclipse espacio de trabajo. No hay un equivalente exacto al espacio de trabajo de Eclipse que contiene todo su trabajo, pero puede abrir varios proyectos en varios marcos al mismo tiempo.

Aquí está el IntelliJ IDEA Q & A para usuarios de Eclipse página-

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

Los módulos son como apkLibs es decir, tiene su propio res, manifiesto, etc pruebas, pero la aplicación principal por lo general utiliza varios apklibs / módulos para ayudar a poner todo en una solución

De documentos actualizados [2017]:

Los módulos proporcionan un contenedor para el código fuente de la aplicación, los archivos de recursos y la configuración del nivel de la aplicación, como el archivo de compilación a nivel de módulo y el archivo de manifiesto de Android. Cada módulo puede ser independientemente construido, probado y depurado.

Android Studio utiliza módulos para facilitar la adición de nuevos dispositivos al proyecto. Siguiendo algunos sencillos pasos en Android Studio, puede crear un módulo que contenga código específico para un tipo de dispositivo, como Android Wear o Android TV. Android Studio crea automáticamente directorios de módulos, como directorios de fuentes y recursos, y un archivo predeterminado build.gradle apropiado para el tipo de dispositivo. Además, Android Studio crea módulos de dispositivo con configuraciones de compilación recomendadas, como el uso de la biblioteca Leanback para módulos de Android TV.

Ex:

  • Módulo de teléfono y tableta
  • Módulo Android Wear
  • Módulo de Android TV
  • Módulo de vidrio

Además de estos, también puede tener un "módulo de biblioteca local". Por ejemplo, si desarrolla un Marco de administración de cuentas como un módulo de biblioteca que se utilizará en última instancia en su aplicación, puede hacerlo como un módulo independiente en el mismo proyecto. Para incluir eso en tu aplicación, tendrías que escribir algo como:

 compile project(':mylibrary') 

Docs decir,

Esto declara una dependencia en un módulo de biblioteca de Android denominado "mylibrary" (este nombre debe coincidir con el nombre de biblioteca definido como un include en su archivo settings.gradle). Requiere que el sistema de compilación compile el módulo de biblioteca con el módulo de la aplicación e incluya el archivo AAR resultante en su APK.

Por último, Intellij menciona algunos detalles más acerca de los archivos de configuración del módulo:

La información de configuración de un módulo se almacena en un archivo de módulo .iml . De forma predeterminada, dicho archivo se encuentra en la carpeta raíz de contenido del módulo.

Normalmente, los equipos de desarrollo comparten los archivos del módulo .iml mediante el control de versiones.

Este archivo .iml es un poco de miedo de mirar. He aquí un ejemplo de mi proyecto:

 <?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> 

Haciendo referencia a la respuesta de @Oded Breiner, diría que:

Módulo en Android Studio es como un proyecto en Eclipse

Proyecto en Android Studio es como un conjunto de trabajo en Eclipse

  • No se puede subir la aplicación de Android al dispositivo (frascos de dexed rancio)
  • La muestra Hello-jni no funciona en Android Studio 2.0 Vista previa
  • Android Studio. No se puede incluir correctamente la biblioteca externa
  • ¿Cómo puedo incluir cadenas de otro módulo en Android Studio
  • Estudio Android atascado en el proyecto Refreshing Gradle
  • El emulador de Android Studio no se ejecuta durante horas
  • Cuando una conexión a Internet está presente y hago clic en "comprobar actualización" en Android Studio, me sale "Error de conexión"
  • Problema con Android Studio ndk.dir
  • Adición de twitter-kit al proyecto de estudio de Android
  • Android Studio no puede importar mis proyectos de Eclipse, ya sea directamente o como proyecto Gradle
  • Error
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.