2013-06-19 62 views
116

Android Studio使用modules的概念,而Eclipse等其他IDE使用projects。 但是,AS File菜單可以選擇創建一個New Module以及一個new ProjectAndroid studio:新項目vs新模塊

這兩者之間有什麼區別?

哪一個被推薦使用?

回答

88

the documentation(安卓Studio是基於IntelliJ IDEA的):

無論你在IntelliJ IDEA的做,你做的是在 項目的環境中。項目是代表 完整軟件解決方案的組織單位。

您的成品可能會分解成一系列離散的模塊,但它是一個項目定義,它們將它們連接在一起並將它們連接成一個更大的整體。

對於Android,它表示每個應用一個項目,每個庫和每個測試應用一個模塊。

如果您嘗試在同一個項目中構建多個應用程序,則存在多個問題。這是可能的,但是如果你嘗試(像我一樣),你會發現幾乎所有的東西都可以用於每個項目的單個應用程序。

例如,可以選擇「重建項目」,這對多個應用程序沒有意義,許多其他項目設置將毫無用處,而且當您擁有多個存儲庫時內置的VCS系統並不好。

+1

「這意味着每個應用程序一個項目,每個庫和每個測試應用程序一個模塊」...這是什麼意思?如果「測試應用程序」是一個應用程序,那麼每個項目只能有兩個模塊,一個用於應用程序(常規應用程序或測試應用程序),另一個用於庫。 – LarsH

+2

@LarsH,我會把它改爲:「每個主應用程序的項目」 – Nico

161

KISS答案:

模塊Android Studio中就像是一個項目Eclipse中

Android Studio中項目就像Eclipse中工作區

+7

我一直在努力解決這個問題,雖然這似乎是概念案例,但我很困惑。當我在Android Studio中創建一個新的「項目」時,我會看到一個嚮導,向我詢問諸如主題,使用ActionBar,網格佈局等內容。我原以爲這些東西會留給模塊。如果這些問題恰好如此,相應的支持庫被添加到'項目',那麼我明白,但我也看到創建一個新的模塊時這些相同的東西。非常混亂。 –

+5

我相信這是因爲你給了第一個新模塊的設置... –

+16

這與接受的答案相矛盾,不是嗎? –

1

IntelliJ IDEA爲您使用的整個代碼庫和每個單獨組件的模塊創建一個項目。因此,IntelliJ IDEA模塊更像Eclipse項目,項目與Eclipse工作區大致相似。 Eclipse的工作空間並不完全等同於您的工作空間,但您可以同時在多個框架中打開多個項目。

這裏是Android Studio中代表一個完整的Android應用程序的IntelliJ IDEA的Q &用於Eclipse用戶頁面級

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

28

一個項目Android Studio項目包含一個或多個模塊

A 模塊是您的應用程序的一個組件,您可以獨立構建,測試或調試。

模塊包含您的應用程序的源代碼和資源。

-4

參考@Oded Breiner答案我想說的是:

模塊Android Studio中就像是一個項目Eclipse中

項目Android Studio中就像工作集 in 個的Eclipse

+1

不是。在Eclipse中的恕我直言「工作集」只是當前工作空間的「過濾器」。 Eclipse中不能有兩個工作空間,也不能在Android Studio的同一實例中打開兩個項目(實際上,當您打開另一個項目時,您必須替換前者,或者在後者中打開後者一個新窗口) – ocramot

+1

不,這是不正確的 – PeerNet

+1

你可以建議編輯,而不是指一下原來的答案,只需稍作改動! – kokabi

1

模塊就像apkLibs即它有自己的資源,清單,測試等,但主要的應用程序通常使用各種apklibs /模塊,以幫助把它一起在一個解決方案

3

updated docs [2017年] :

模塊爲您的應用程序的源代碼,資源 文件和應用程序級別設置,例如模塊級構建文件和 Android清單文件的容器。每個模塊可以獨立構建,測試, 並調試。

Android Studio使用模塊可以輕鬆地將新設備添加到您的 項目中。通過遵循Android Studio中的幾個簡單步驟,,您可以創建一個模塊以包含特定於設備類型的代碼,例如Android Wear或Android TV的 。 Android Studio會自動創建 模塊目錄,例如源和資源目錄,以及適合設備類型的默認build.gradle文件。另外, Android Studio使用建議的內部版本 配置創建設備模塊,例如使用Android TV的Leanback庫 模塊。

例:

  • 電話&平板模塊
  • Android Wear模塊
  • 的Android電視模塊
  • 玻璃模塊

除了這些,你還可以有一個「本地圖書館模塊「。比如說,你開發一個賬戶管理框架作爲一個庫模塊,最終在你的應用程序中使用,你可以在同一個項目中作爲一個單獨的模塊來完成。要包含在你的應用程序,你會寫類似,

compile project(':mylibrary') 

文件說,

這聲明瞭一個名爲 一個Android庫模塊的依賴關係「在MyLibrary」(此名稱必須匹配定義爲 的庫名稱包含在settings.gradle文件中)。它需要構建系統以 編譯庫模塊與您的應用程序模塊,並在您的APK中包含 產生的AAR文件。

最後,Intellij mentions約模塊配置文件的一些細節:

配置信息的模塊存儲在.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>