A project in Android Studio for Platform (ASfP) contains everything that defines
your workspace for your AOSP codebase, from source code and assets to test code
and build configurations.

When you start a new project, ASfP creates the necessary structure for all your
files and makes them visible in the **Project** window. To open the window,
select
**View \> Tool Windows \> Project**.

This page provides an overview of the key components inside your project
configuration.

## Project configuration (`.asfp-project`)

The ASfP project configuration is controlled by the `.asfp-project` file,
located in the root of your project directory. This YAML file is essential for
controlling what goes into your project and how critical features operate. You
can open it through the main menu using **ASfP \> Project \> Open Config** or by
finding it in the project view.

Upon project creation, a config is constructed based on user-provided specs. All
parameters in the config can be edited at any time to modify the project specs,
for example to update project directories or modules, after which a sync is
required for changes to be reflected.

### Configuration parameters

Here are the key parameters you can configure in the `.asfp-project` file:

#### `repo`

*Required*

An absolute path to your Android platform repository root.  

    repo: /path/to/aosp

#### `lunch`

*Required*

The lunch target that will be coupled with your project. This is used for all
Soong build actions, including sync and relevant run configurations.  

    lunch: your-product-variant-userdebug

#### `directories`

*Optional*

Directories to either include in or exclude from your project. These should be
relative paths with respect to the `repo` root.  

    directories:
      include:
        -   frameworks/base
        -   packages/apps/Settings
      exclude:
        -   vendor
        -   out/soong

#### `modules`

*Optional*

Modules to either include in or exclude from your project. These work in
conjunction with the previously specified `directories`. Both full and abridged
names are supported.  

    modules:
      include:
        -   SystemUIGoogle
        -   frameworks/base/services/core/java:services
      exclude:
        -   UnusedModule

#### `test_sources`

*Optional*

ASfP attempts to differentiate between production and test sources, but in some
cases, you might need to explicitly denote test sources. Provide these as
relative paths with respect to the `repo` root. Any source roots that are
subdirectories of the specified path(s) will be marked as test.  

    test_sources:
      -   cts/tests/tests/example
      -   tests/mytests

#### `other_languages`

*Optional*

Java support is included by default. You can add support for other languages.
ASfP also supports C/C++ (`cpp`) and Rust (`rust`).  

    other_languages:
      -   cpp
      -   rust

#### `build_config`

*Optional*

This parameter lets you add custom flags or environment variables to Soong build
events. This configuration applies to all actions in the IDE that result in a
Soong build, including sync and run configurations.  

    build_config:
      flags:
        -   -j64
      env:
        SOONG_ALLOW_MISSING_DEPENDENCIES: true
        MY_CUSTOM_VAR: value