Android Studio:新しいプロジェクトと新しいモジュール


141

Android Studio modulesはの概念を使用しますが、Eclipseなどの他のIDEはを使用しますprojects。ただし、AS Fileメニューには、New Moduleおよびを作成するオプションがありますnew Project

これら2つの違いがあるとすれば何ですか?

どちらを使用することをお勧めしますか?

回答:


102

ドキュメントから(Android StudioはIntellij IDEAに基づいています):

IntelliJ IDEAで行うことは何でも、プロジェクトのコンテキストで行います。プロジェクトは、完全なソフトウェアソリューションを表す組織単位です。

完成した製品は、一連の個別の独立したモジュールに分解される可能性がありますが、それらをまとめてより大きな全体に結びつけるのはプロジェクト定義です。

Androidの場合、アプリごとに1つのプロジェクト、ライブラリごと、およびテストアプリごとに1つのモジュールを意味します。

同じプロジェクト内で複数のアプリをビルドしようとすると、複数の問題があります。それは可能ですが、試してみると(私のように)、ほぼすべてがプロジェクトごとに1つのアプリで動作するように設計されていることがわかります。

たとえば、「プロジェクトを再構築」するオプションがあります。これは、複数のアプリでは意味がなく、他の多くのプロジェクト設定は役に立たず、複数のリポジトリがある場合、組み込みのVCSシステムは適切ではありません。


1
「アプリごとに1つのプロジェクト、ライブラリごと、およびテストアプリごとに1つのモジュールを意味します」...これはどういう意味ですか?「テストアプリ」がアプリの場合、プロジェクトごとに2つのモジュールしか存在できません。1つはアプリ(通常またはテストアプリ)用で、もう1つはライブラリ用です。
LarsH

2
@LarsH、私はそれを次のように言い換えます。「メインアプリごとのプロジェクト」
ニコニコ

4
これは答えではありません。不正解
メティス2018年

169

キスの答え:

モジュールのAndroid Studioは似ているプロジェクトのEclipse

プロジェクトのAndroid Studioは、のようなものである、ワークスペースのEclipse


8
私自身もこの問題に取り組んでおり、これは概念的なケースのようですが、混乱しています。Android Studioで新しい「プロジェクト」を作成すると、テーマ、ActionBarの使用、グリッドレイアウトなどについて尋ねるウィザードが表示されます。これらはモジュールに任せると思いました。これらの質問が適切なサポートライブラリが「プロジェクト」に追加されただけの場合、私は理解しますが、新しいモジュールを作成するときにも同じことを確認します。かなり混乱しています。
Scott Naef 2014年

2
あなたはポイントを持っていますが、受け入れられた答えはそれが日食であるかのようにアンドロイドスタジオで作業しようとすることの問題を指摘しているだけです。この質問を探しているほとんどの人は、たとえが何であるかを知る必要があるだけです。
Oded Breiner 2014

Androidで新しいプロジェクトを作成することは、「ワークスペース」に配置されたマニフェスト/ res /およびsrcを持つアプリのようには見えません。モジュールを作成するときに提供されるタイプは、1)アプリケーションモジュールと2)androidライブラリモジュールの2つです。#1は「新しいプロジェクト」に冗長であり、#1と#2は同じように見えます。
user1679130

oOは本当にそれほど多くのモジュールですか?
Martin Pfeffer、2015年

1
@MartinPfeffer-いいえ、ただし、これは最も近いアナロジーです。詳しくは、こちらをご覧ください。jetbrains.org
Oded

35

プロジェクトのAndroid Studioは、完全なAndroidアプリを表します。Android Studioプロジェクトは、1つ以上の モジュールで構成されています

モジュールは、あなたが独立して、テスト、またはデバッグを構築できることをあなたのアプリケーションのコンポーネントです。

モジュールには、アプリのソースコードとリソースが含まれています。


10

以下からの更新ドキュメント [2019]:

モジュールは、アプリのソースコード、リソースファイル、アプリレベルの設定(モジュールレベルのビルドファイルやAndroidマニフェストファイルなど)のコンテナーを提供します。各モジュールは、個別に構築、テスト、およびデバッグできます。

Android Studioでは、モジュールを使用して、プロジェクトに新しいデバイスを簡単に追加できます。Android Studioでいくつかの簡単な手順に従うことで、Wear OSやAndroid TVなどのデバイスタイプに固有のコードを含むモジュールを作成できます。Android Studioは、ソースディレクトリやリソースディレクトリなどのモジュールディレクトリと、デバイスタイプに適したデフォルトのbuild.gradleファイルを自動的に作成します。また、Android Studioは、Android TVモジュールのLeanbackライブラリを使用するなど、推奨されるビルド構成でデバイスモジュールを作成します。

例:

  • 電話およびタブレットモジュール
  • Android Wearモジュール
  • Android TVモジュール
  • ガラスモジュール

これらに加えて、「ローカルライブラリモジュール」を持つこともできます。たとえば、アカウント管理フレームワークを、最終的にアプリで使用されるライブラリモジュールとして開発し、同じプロジェクトの個別のモジュールとして実行できるとします。これをアプリに含めるには、次のように記述する必要があります。

compile project(':mylibrary')

ドキュメントは言う、

これは、「mylibrary」という名前のAndroidライブラリモジュールへの依存関係を宣言します(この名前は、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ますか?)。これはもっと理にかなっています。
Scott Biggs

1

IntelliJ IDEAは、使用するコードベース全体のプロジェクトと、個々のコンポーネントごとのモジュールを作成します。したがって、IntelliJ IDEAモジュールはEclipseプロジェクトに似ており、プロジェクトはEclipseワークスペースにほぼ似ています。すべての作業を含むEclipseのワークスペースに完全に相当するものはありませんが、複数のフレームで複数のプロジェクトを同時に開くことができます。

これは、Eclipseユーザー向けのIntelliJ IDEA Q&Aページです。

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


1

モジュールはapkLibsに似ています。つまり、独自の解像度、マニフェスト、テストなどがありますが、メインのアプリは通常、さまざまなapklibs /モジュールを使用して、すべてを1つのソリューションにまとめます。


-5

@Oded Breinerの回答を参照すると、次のようになります。

モジュールのAndroid Studioは似ているプロジェクトのEclipse

プロジェクトのAndroid Studioは、のようなものであるワーキングセットのEclipse


1
あんまり。EclipseのIMHOの「ワーキングセット」は、現在のワークスペースの単なる「フィルター」です。Eclipseで2つのワークスペースを作成することはできません。また、Android Studioの同じインスタンスで2つのプロジェクトを開くこともできません(実際には、別のプロジェクトを開く場合は、前者を置き換えるか、後者で後者を開く必要があります。新しいウィンドウ)
ocramot 2015

1
少しの変更で元の回答を参照する代わりに編集を提案できます!
kokabi
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.