page.title=Managing Projects from Android Studio

@jd:body

 <div id="qv-wrapper">
    <div id="qv">
      <h2>In this document</h2>

      <ol>
        <li><a href="#CreatingAProject">Creating an Android Project</a></li>
        <ol>
          <li><a href="#Step1CreatingAProject">Create a New Project</a> </li>
          <li><a href="#Step2SelectFormFactor">Select Form Factors and API Level</a> </li>
          <li><a href="#Step3AddActivity">Add an Activity</a> </li>
          <li><a href="#Step4ConfigureActivity">Configure Your App</a> </li>
          <li><a href="#Step5DevelopYourApp">Develop Your App</a> </li>
        </ol>

        <li><a href="#CreatingAModule">Creating an Android Module</a></li>

        <li><a href="#SettingUpLibraryModule">Setting up a Library Module</a></li>

        <li><a href="#ReferencingLibraryModule">Referencing a Library Module</a></li>

        <li><a href="#ReferencingAppEngModule">Setting up an App Eng Module</a></li>

        <li><a href="#ProjectView">Using the Android Project View</a></li>

      </ol>

    </div>
  </div>


<p>Android Studio provides graphical tools for creating and managing Android projects, which
contain everything that define your Android apps, from app source code to build configurations and
test code. Each project contains one or more different types of modules, such as
  application modules, library modules, and test modules.</p>

<p>This guide explains how to create Android projects and different modules using
<a href="{@docRoot}tools/studio/index.html">Android Studio</a>.
For more information about the Android project structure and module types, read <a href=
"{@docRoot}tools/projects/index.html">Managing Projects Overview</a>.</p>



<h2 id="CreatingAProject">Creating an Android Project</h2>

<p>Android Studio makes it easy to create Android apps for several form factors, such as phone,
tablet, TV, Wear, and Google Glass. The <em>New Project</em> wizard lets you choose the form factors
for your app and populates the project structure with everything you need to get started.</p>

<p>Follow the steps in this section to create a project in Android Studio.</p>

<h3 id="Step1CreatingAProject">Step 1: Create a New Project</h2>

<p>If you didn't have a project opened, Android Studio shows the Welcome screen.
To create a new project, click <strong>New Project</strong>.</p>

<p>If you had a project opened, Android Studio shows the development environment.
To create a new project, click <strong>File</strong> > <strong>New Project</strong>.</p>

<p>The next window lets you configure the name of your app, the package name, and the location
of your project.</p>

<img src="{@docRoot}images/tools/wizard2.png" alt="" width="500" height="381">
<p class="img-caption"><strong>Figure 1.</strong> Choose a name for your project.</p>

<p>Enter the values for your project then click <strong>Next</strong>.</p>

<h3 id="Step2SelectFormFactor">Step 2: Select Form Factors and API Level</h2>

<p>The next window lets you select the form factors supported by your app, such as phone, tablet,
TV, Wear, and Google Glass. The selected form factors become the application modules within the
project. For each form factor, you can also select the API Level for that app. To get more information,
click <strong>Help me choose</strong>.</p>

<img src="{@docRoot}images/tools/wizard4.png" alt="" width="750" height="510">
<p class="img-caption"><strong>Figure 2.</strong> Select the API Level.</p>

<p>The API Level window shows the distribution of mobile devices running each version of Android,
as shown in figure 3. Click on an API level to see a list of features introduced in the corresponding
version of Android. This helps you choose the minimum API Level that has all the features that
your apps needs, so you can reach as many devices as possible. Then click <strong>OK</strong>.</p>

<img src="{@docRoot}images/tools/wizard3.png" alt="" width="500" height="480">
<p class="img-caption"><strong>Figure 3.</strong> Choose form factors for your app.</p>

<p>Then, on the Form Factors Window, click <strong>Next</strong>.</p>


<h3 id="Step3AddActivity">Step 3: Add an Activity</h2>

<p>The next screen lets you select an activity type to add to your app, as shown in figure 4.
This screen displays a different set of activities for each of the form factors you selected earlier.</p>

<img src="{@docRoot}images/tools/wizard5.png" alt="" width="720" height="504">
<p class="img-caption"><strong>Figure 4.</strong> Add an activity to your app.</p>

<p>Choose an activity type then click <strong>Next</strong>.</p>

 <p class="note"><strong>Note:</strong> If you choose "Add No Activity", click <strong>Finish</strong>
 to create the project.</p>


<h3 id="Step4ConfigureActivity">Step 4: Configure Your Activity</h2>

<p>The next screen lets you configure the activity to add to your app, as shown in figure 5.</p>

<img src="{@docRoot}images/tools/wizard6.png" alt="" width="450" height="385">
<p class="img-caption"><strong>Figure 5.</strong> Choose a name for your activity.</p>

<p>Enter the activity name, the layout name, and the activity title. Then click
<strong>Finish</strong>.</p>


<h3 id="Step5DevelopYourApp">Step 5: Develop Your App</h2>

<p>Android Studio creates the default structure for your project and opens the development
environment. If your app supports more than one form factor, Android Studio creates a module folder
with complete source files for each of them as shown in figure 6.</p>

<img src="{@docRoot}images/tools/wizard7.png" alt="" width="750" height="509">
<p class="img-caption"><strong>Figure 6.</strong> The default project structure for a mobile app.</p>

<p>Now you are ready to develop your app. For more information, see the following links:</p>

<ul>
<li><a href="{@docRoot}training/">Training Lessons</a></li>
<li><a href="{@docRoot}training/building-wearables.html">Building Apps for Wearables</a></li>
<li><a href="{@docRoot}tv/">Android TV</a></li>
<li><a href="https://developers.google.com/glass/">Google Glass</a></li>
</ul>


  <h2 id="CreatingAModule">Creating an Android Module</h2>

  <p>Android application modules contain the <code>src/main/</code>, <code>AndroidManifest.xml</code>,
  <code>build.gradle</code>, build output and other files you need to generate your app's APK files.
  Android Studio provides a <em>New Module Wizard</em> that you can use to quickly create a new
  Android module (or a module from existing code) based on selected application settings, such as
  minimum SDK level and activity template.</p>

  <p>To create a new module, select <strong>File</strong> &gt; <strong>New</strong> &gt;
  <strong>Module</strong>. Select the desire module type then click Next to enter the basic module
  settings:</p>

      <ul>
        <li>Enter an <strong>Application Name</strong>. This name is used as the title of your
        application launcher icon when it is installed on a device.</li>

        <li>Enter a <strong>Module Name</strong>. This text is used as the name of the folder where
        your Java-based activity files are stored.</li>

        <li>Enter a <strong>Package Name</strong> and <strong>Package Location</strong>. This class
        package namespace creates the initial
        package structure for your applications code files and is added as the
        <a href="{@docRoot}guide/topics/manifest/manifest-element.html#package">{@code package}</a>
        attribute in your application's
        <a href="{@docRoot}guide/topics/manifest/manifest-intro.html">Android manifest file</a>.
        This manifest value serves as the unique identifier for your application app when you
        distribute it to users. The package name must follow the same rules as packages in the Java
        programming language.</li>

        <li>Select the <strong>Minimum required SDK</strong>.
        This setting indicates the lowest version of the Android platform that your application
        supports for the selected form factor. This value sets the
        <code>minSdkVersion</code> attribute in the build.gradle file.</li>

          <p class="note"><strong>Note:</strong> You can manually change the minimum and target SDK
          for your module at any time: Double-click the module's build.gradle in the Project Explorer,
          set the <strong>targetSdkVersion</strong> and  <em>targetSdkVersion</em> in the
          <em>defaultConfig</em> section.</p>


        <li>Select a <strong>Target SDK</strong>. This setting indicates the highest version of
        Android with which you have tested with your application and sets the
        <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code
        targetSdkVersion}</a> attribute in your application's' build.gradle file.


        <li>Select a <strong>Compile With</strong> API version. This setting specifies what version
        of the SDK to compile your project against. We strongly recommend using the most recent
        version of the API.</li>

        <li>Select a <strong>Language Level</strong> API version. This setting specifies what version
        of the SDK to compile your project against. We strongly recommend using the most recent
        version of the API.</li>

        <li>Select a <strong>Theme</strong>. This setting specifies which standard Android
        <a href="{@docRoot}design/style/themes.html">visual style</a> is applied to your
        application. Select activity template. For more information about Android code templates, see
        <a href="{@docRoot}tools/projects/templates.html">Using Code Templates</a>Leave the <strong>
        Create activity</strong> option checked so you can start your
        application with some essential components. </li>

        <li>Click the check box for the required Support Libraries then click <strong>Next</strong>.</li>

        <li>In the <strong>Configure Launcher Icon</strong> page, create an icon and options, then click
        <strong>Next</strong>.</li>

        <li>In the <strong>Create Activity</strong> page, select activity template then click
        <strong>Next</strong>. For more information about Android code templates, see
        <a href="{@docRoot}tools/projects/templates.html">Using Code Templates</a>.
        </li>

        <li>Review the new module settings then click <strong>Finish</strong>.</li>

     </ul>

    <p>The wizard creates a new Android application module according to the options you have chosen.</p>



  <h2 id="SettingUpLibraryModule">Setting up a Library Module</h2>

  <p>A library module is a standard Android module, so you can create a new one in the same way
  as you would a new application module, using the New Module wizard and selecting <em>Android
  Library</em> as the module type. The created library module will appear in your project view
  along with the other modules. </p>

  <p> You can easily change an existing application module to a library module by changing the
  plugin assignment in the <strong>build.gradle</strong> file to <em>com.android.library</em>.</p>

<pre>
apply plugin: 'com.android.application'

android {...}
</pre>

<pre>
apply plugin: 'com.android.library'

android {...}
</pre>


  <h3>Adding a dependency on a library module</h3>

  <p>The library dependency can be declared in the module's manifest file or in the
  <strong<build.gradle</strong> file. </p>

  <p>A library modules's manifest file must declare all of the shared components that it includes,
  just as would a standard Android application. For more information, see the documentation for
  <a href="{@docRoot}guide/topics/manifest/manifest-intro.html">AndroidManifest.xml</a>.</p>

  <p>For example, the <a href=
  "{@docRoot}resources/samples/TicTacToeLib/AndroidManifest.html">TicTacToeLib</a> example library
  project declares the activity <code>GameActivity</code>:</p>
  <pre>
&lt;manifest&gt;
  ...
  &lt;application&gt;
    ...
    &lt;activity android:name="GameActivity" /&gt;
    ...
  &lt;/application&gt;
&lt;/manifest&gt;
</pre>


<p>To add the dependency declaration to the build file, edit the build file for the <code>app</code>
module (<code>app/build.gradle</code>) and add a dependency on the <code>lib</code> module:</p>

<pre>
...
dependencies {
    ...
    compile project(":lib")
}
</pre>

<p>In this example, the <code>lib</code> module can still be built and tested independently, and
the build system creates an AAR package for it that you could reuse in other projects.</p>

<p class="note"><strong>Note:</strong> The library settings in the <code>app/build.gradle</code>
file will override any shared library resources declared in the manifest file.</p>


  <h2 id="ReferencingLibraryModule">Referencing a library module</h2>

  <p>If you are developing an application and want to include the shared code or resources from a
  library module, you can also do so easily by adding a reference to the library module in the
  module's dependency page.</p>

  <p>To add a reference to a library module, follow these steps:</p>

  <ol>
    <li>Make sure that both the module library and the application module that depends on it are
      in your project. If one of the modules is missing, import it into your project.</li>

    <li>In the project view, right-click the dependent module and select
    <strong>Open</strong> > <strong>Module Settings</strong>.</li>

    <li>Right-click the plus icon to add a new dependencies.
    <p>If you are adding references to multiple libraries, you can set their relative
    priority (and merge order) by selecting a library and using the <strong>Up</strong> and
    <strong>Down</strong> controls. The tools merge the referenced libraries with your application
    starting from lowest priority (bottom of the list) to highest (top of the list). If more than one
    library defines the same resource ID, the tools select the resource from the library with higher
    priority. The application itself has highest priority and its resources are always used in
    preference to identical resource IDs defined in libraries.</p>
    </li>

    <li>Use the <strong>Scope</strong> drop-down to select how the dependency will be applied.</li>

    <li>Click <strong>Apply</strong> to create the dependency and <strong>OK</strong> to close the
    <strong>Project Structure</strong> window.</li>
  </ol>

  <p>Android Studio rebuilds the module, including the contents of the library module the next time
  the project or module is built.</p>



  <h3>Declaring library components in the manifest file</h3>

  <p>In the manifest file of the application module, you must add declarations of all components
  that the application will use that are imported from a library module. For example, you must
  declare any <code>&lt;activity&gt;</code>, <code>&lt;service&gt;</code>,
  <code>&lt;receiver&gt;</code>, <code>&lt;provider&gt;</code>, and so on, as well as
  <code>&lt;permission&gt;</code>, <code>&lt;uses-library&gt;</code>, and similar elements.</p>

  <p>Declarations should reference the library components by their fully-qualified package names,
  where appropriate.</p>

  <p>For example, the <a href=
  "{@docRoot}resources/samples/TicTacToeMain/AndroidManifest.html">TicTacToeMain</a> example
  application declares the library activity <code>GameActivity</code> like this:</p>
  <pre>
&lt;manifest&gt;
  ...
  &lt;application&gt;
    ...
    &lt;activity android:name="com.example.android.tictactoe.library.GameActivity" /&gt;
    ...
  &lt;/application&gt;
&lt;/manifest&gt;
</pre>

  <p>For more information about the manifest file, see the documentation for <a href=
  "{@docRoot}guide/topics/manifest/manifest-intro.html">AndroidManifest.xml</a>.</p>


 <h2 id="ProjectView">Using the Android Project View</h2>


<p>The Android project view in Android Studio shows a flattened version of your project's structure
that provides quick access to the key source files of Android projects and helps you work with
the new <a href="{@docRoot}sdk/installing/studio-build.html">Gradle-based build system</a>. The
Android project view:</p>

<ul>
<li>Groups the build files for all modules at the top level of the project hierarchy.</li>
<li>Shows the most important source directories at the top level of the module hierarchy.</li>
<li>Groups all the manifest files for each module.</li>
<li>Shows resource files from all Gradle source sets.</li>
<li>Groups resource files for different locales, orientations, and screen types in a single group
per resource type.</li>
</ul>



<h2 id="enable-view">Use the Android Project View</h2>

<p>The <em>Android</em> project view is enabled by default and shows all the build files at
the top level of the project hierarchy under <strong>Gradle Scripts</strong>. The project module
appears as a folder at the top level of the project hierarchy and contains these three elements
at the top level:</p>

<ul>
<li><code>manifests/</code> - Manifest files for the module.</li>
<li><code>java/</code> - Source files for the module.</li>
<li><code>res/</code> - Resource files for the module.</li>
</ul>

<p>Notice how the Android project view groups all instances of the
<code>ic_launcher.png</code> resource for different screen densities under the same element.</p>

<p class="note"><strong>Note:</strong> The Android project view shows a hierarchy that helps you
work with Android projects by providing a flattened structure that highlights the most commonly
used files while developing Android applications. However, the project structure on disk differs
from this representation and maintains the traditional project structure.</p>

<img src="{@docRoot}images/tools/projectview-p1.png" alt="" style="width:240px" "/>
&nbsp;&nbsp;&nbsp;
<img src="{@docRoot}images/tools/projectview-p2.png" alt="" style="width:240px" " />
<p class="img-caption"><strong>Figure 10:</strong> Android and Traditional project view </p>









