The following are new features in Android Studio Flamingo.

## Patch releases

The following is a list of the patch releases in Android Studio Flamingo.

### Android Studio Flamingo \| 2022.2.1 Patch 2 (May 2023)

This minor update includes[these bug fixes](https://developer.android.com/studio/releases/fixed-bugs/studio/2022.2.1#android-studio-flamingo-patch-2-2022.2.1.20).

### Android Studio Flamingo \| 2022.2.1 Patch 1 (May 2023)

This minor update includes[these Android Gradle plugin bug fixes](https://developer.android.com/build/releases/gradle-plugin#agp-8-0-1).

## Themed app icons and dynamic color

With the introductions of[dynamic color](https://m3.material.io/styles/color/dynamic-color/overview)in Material 3 and[themed app icons](https://developer.android.com/about/versions/13/features#themed-app-icons)in Android 13, you can now create layouts or launcher icons that are tinted to inherit the coloring of the user's chosen wallpaper. You can use this feature starting with Android Studio Flamingo Beta 1.

### Themed app icons preview support

For`launcher.xml`files, you can now use the new**System UI Mode** selector on the toolbar to switch wallpapers and see how your[themed app icons](https://developer.android.com/develop/ui/views/launch/icon_design_adaptive#add_your_adaptive_icon_to_your_app)react to different users' chosen wallpaper.
![](https://developer.android.com/static/studio/images/system-ui-mode-selector.png)**System UI Mode**selector.

<br />

![](https://developer.android.com/static/studio/images/preview-themed-app-icons.gif)Preview themed app icons across different wallpapers.

<br />

### Dynamic color preview

For Compose Preview: We've added a new attribute,`wallpaper`, to the[Composable Preview](https://developer.android.com/develop/ui/compose/tooling/previews)annotation. If you've enabled[dynamic color](https://m3.material.io/styles/color/dynamic-color/overview)in your app, you can use this new attribute to switch wallpapers and see how your UI reacts to different users' chosen wallpaper. To use this feature, you must use Compose 1.4.0-alpha03 or higher.
![](https://developer.android.com/static/studio/images/dynamic-color-wallpaper-compose-preview.gif)Dynamic color wallpaper in Compose Preview.

For Android XML: If you've enabled[dynamic color](https://m3.material.io/styles/color/dynamic-color/overview)in your app, you can now use the new**System UI Mode**selector on the toolbar to switch wallpapers and see how your layouts react to different user's chosen wallpaper. Note that you must first select to change the theme to a Material dynamic color theme, then change the wallpaper.
![](https://developer.android.com/static/studio/images/dynamic-color-wallpaper-layout-editor.gif)Dynamic color wallpaper in the Layout Editor.

## Updates to Live Edit

Live Edit now has two modes: manual and automatic. In manual mode, your code changes are applied every time you manually save using`Ctrl`+`S`(`Command`+`S`for macOS). In automatic mode, when you update a composable function, your changes are applied in your device or emulator as you make that change. To choose the mode you want to run Live Edit in, go to**File** \>**Settings** from the menu bar (or**Android Studio** \>**Preferences** on macOS), click on**Editor** \>**Live Edit** , and check the**Push Edits Manually** or**Push Edits Automatically**box.

## Compose Tracing

The[System tracing](https://developer.android.com/topic/performance/tracing)utility is an Android tool that saves device activity to a trace file, which provides an overall picture of your app's system processes for a given period of time. Starting with Android Studio Flamingo, you can view your Compose functions in the[System Trace profiler](https://developer.android.com/studio/profile/record-traces)using Compose Tracing. Compose Tracing gives you the low intrusiveness from System tracing with method tracing levels of detail in composition, helping you understand which Compose functions are actually being recomposed.

![UI preview of Compose Tracing](https://developer.android.com/static/studio/images/composition-tracing-preview.png)

To get started with recomposition tracing, you need to update to at least the following versions:

- Android Studio Flamingo Canary 5
- Compose UI: 1.3.0-beta01
- Compose Compiler: 1.3.0
- The device or emulator you run your trace on must be at least API level 30.

Additionally, you need to add the following dependency on Compose Runtime Tracing:

`implementation("androidx.compose.runtime:runtime-tracing:1.0.0-alpha01")`

To view recomposition tracing,[open the Android Studio Profiler](https://developer.android.com/studio/profile#profile-profileable-app)and select the CPU profiler. Navigate your app to the UI that you want to trace and then select**System Trace** and**Record** . While recording, use your app in order to cause recomposition. Once you stop recording and the trace processes, you can see the Compose functions in the recomposition trace directly in the**Threads** timeline. You can also see the Compose functions in the**Flame Chart** ,**Top Down** ,**Bottom Up** , and**Events** tabs from the**Analysis**pane.

This is an experimental feature in active development, and we welcome you to[provide feedback](https://issuetracker.google.com/issues/new?component=898851&template=1458540). For more details, see[Compose tracing](https://developer.android.com/jetpack/compose/performance/tracing).

## Updates to project templates

Android Studio Flamingo Canary 6 includes new templates for creating a project or module. By default, templates use Compose Material 3 unless they are specified as a Views template. We recommend using the Compose Material 3 templates (for example,**Empty Activity** ) as the best practice for creating an Android app. To learn more, see the[Compose Material 3 reference](https://developer.android.com/jetpack/androidx/releases/compose-material3).

To view the templates, go to open the**New Project** or**Create New Module** wizard by selecting**File** \>**New** \>**New Project** or**New Module**from the main menu.

![New Project wizard](https://developer.android.com/static/studio/preview/features/images/new-project.png)

## Device mirroring

Minimize the number of interruptions when developing by streaming your device display directly to Android Studio. Device mirroring gives you the ability to interact with a physical device using the**Running Devices** window in Studio. To enable this feature, go to**File \> Settings \> Tools \> Device Mirroring** and check the box next to**Enable mirroring of physical Android devices** . Once enabled, connect your device and either deploy your app or open the**Running Devices**window to begin streaming the device's display and interacting with it from the IDE.
| **Note:** If you're using certain devices, for example the Xiaomi Redmi K40, Poco F3, or Mi 11X, with Android 12, you must enable both the**USB debugging** and**USB debugging (Security settings)**settings and then restart the device to enable device mirroring.

To get started, ensure you are connected to a device. All devices that you are connected to are mirrored in tabs in the**Running Devices** window, which you can open by navigating to**View** \>**Tool Windows** \>**Running Devices** . When you deploy an app or test to a connected device, the**Running Devices**window appears automatically and shows the mirrored device.

![Running Devices UI](https://developer.android.com/static/studio/images/device-mirroring.png)

### Privacy notice

If device mirroring is enabled, Android Studio automatically starts device mirroring for any connected and paired device. This might result in information disclosure for devices connected with the`adb tcpip`command because the mirroring information and commands are passed over a non-encrypted channel. In addition, Android Studio uses a non-encrypted channel to communicate with the adb server, so mirroring information can be intercepted by other users on your host machine.

## Network Inspector traffic interception

Starting with Android Studio Flamingo Canary 1, the Network Inspector shows all traffic data for the full timeline by default. You can select a range within the timeline to see only the traffic in that range.

You can also create and manage rules that help test how your app behaves when encountering different responses such as status codes, and response headers and bodies. The rules determine what responses to intercept and how to modify these responses before they reach the app. You can choose which rule to enable or disable by checking the**Active**box next to each rule. Rules are automatically saved every time you modify them.

![Network Inspector Rules and Rule Details panes](https://developer.android.com/static/studio/images/debug/network-inspector-rules.png)

To get started, navigate to the**Rules** tab in the**Network Inspector** and click**+** to create a new rule. In the**Rule Details** panel, name your new rule and include information about the origin of the response you want to intercept under the**Origin** subsection. The URL in the**Rules**table should update based on the changes you made to the origin of the response. All fields in this subsection are optional.

![Origin subsection in the Rules section](https://developer.android.com/static/studio/images/debug/network-inspector-origin.png)

From the**Response**subsection, you can modify the response before it's sent to your app. For example, you can set the rule to execute on responses with a specific status code as well as modify that status code.

![Response subsection in the Rules section](https://developer.android.com/static/studio/images/debug/network-inspector-response.png)

### Modify headers

In the**Header rules** subsection, you can create multiple sub-rules that add or modify headers in a response. When you create multiple header rules, use the up and down arrows![](https://developer.android.com/static/studio/images/buttons/network-inspector-up-down-arrows.png)at the top of the**Rules**table to change the order of the header rules. The order affects the header of the modified response because the header rules are applied in the order that they are listed.

To get started, click**+** in the**Header rules**section.

To add a header, enter a name and value for the header in the**Add new header**section.

![Add a new header tab](https://developer.android.com/static/studio/images/debug/network-inspector-add-header.png)

To modify a header, navigate to the**Edit existing header**tab and specify the header name or value that you want to find. Enter a header name or value that you want to replace it with.

![Edit existing header tab](https://developer.android.com/static/studio/images/debug/network-inspector-modify-header.png)

### Modify response body

You can also create sub-rules to modify the body of the response. You can choose to either Find and Replace a section of the body, in which the first instance in the body is replaced; or, you can choose to replace the entire content of the body by selecting**Replace entire body**.

Similar to**Header rules**, you can create multiple body rules that are applied in the order that they are listed in the table.

## Auto-connect to foreground process in Layout Inspector

The Layout Inspector now automatically connects to apps on virtual or physical devices. Specifically, the Layout Inspector automatically connects to debuggable processes running in the foreground of a connected device. If you have feedback on this feature, please[file a bug](https://developer.android.com/studio/report-bugs).

## Updates to App Quality Insights

Android Studio Flamingo Canary 5 and higher introduce multiple new App Quality Insights features that help you focus on high priority issues and collaborate with your development team.

![App Quality Insights with device filter open.](https://developer.android.com/static/studio/preview/features/images/aqi-v2.png)

### New filters and filter search

To help you identify the most important issues, you can now filter by the following attributes. Each filter is sorted by the number of events, so you can see where most events occur.

- Android platform version
- Device make and model
- [Crashlytics Signal](https://firebase.google.com/support/releases#october_8_2021): Signal icons also appear next to associated issues in the**Issues** panel so you can see counts and signals side by side. An issue is considered*regressed*when it's been closed in the past and has reoccurred in a new version of the app.

  ![Crashlytics Signal filter.](https://developer.android.com/static/studio/preview/features/images/aqi-signal-filter.png)
- App version: This filter now includes a higher-level[Play track](https://support.google.com/googleplay/android-developer/answer/9845334)filter that you can use to automatically select versions in the production, open, closed and/or internal testing tracks.

In addition, filters with lots of options are now searchable so you can customize your view faster, without scrolling through all the menu options.

### Annotate and close issues directly from Android Studio

To make it easier for you to collaborate with teammates, you can now do the following directly in the**App Quality Insights**tool window:

- Close issues. To close an issue, click the**Close** button in the main stack trace panel. Recently closed issues appear in the**Issues** panel with strikethrough. You can reopen issues that have been recently closed by clicking on the button again. However, once you refresh the**App Quality Insights**tool window, closed issues are no longer visible.

- Read and attach notes to issues so that they are visible in the Firebase Console and your teammates. To write a note about an issue, select the issue and open the**Notes** panel. You must have write permission to the Crashlytics project in order to write notes. Issues with notes appear with a "notes" icon![](https://developer.android.com/static/studio/preview/features/images/aqi-notes-icon.png)in the**Issues**panel.

If you're new to App Quality Insights and would like to learn more, see the[earlier release note](https://developer.android.com/studio/releases/past-releases/as-flamingo-release-notes#aqi).

### Investigate with limited functionality when offline

Starting with Android Studio Flamingo Canary 8, you can do some actions in the App Quality Insights tool window while offline. If you make a new request, such as by clicking**Refresh** , and Android Studio is unable to communicate with Crashlytics, the App Quality Insights window allows you to enter**Offline Mode**.

![App Quality Insights offers offline mode.](https://developer.android.com/static/studio/images/aqi-offline-mode.png)

While in this mode, you can continue to investigate issues and the latest events from cached data. Certain functionality, such as changing some filter options or closing issues, is not available. To retry your connection to Crashlytics and return to an online state, click**Reconnect**.

![App Quality Insights reconnect option in offline mode.](https://developer.android.com/static/studio/images/aqi-reconnect.png)

## One-click automated profileable build and run

Android Studio Flamingo and AGP 7.3 introduces one-click automated profileable builds, which makes it easier to configure a[profileable app](https://developer.android.com/studio/profile#profileable-apps)and profile it. This feature requires a virtual or physical test device running API level 29 or higher. To use the feature, click the arrow next to the**Profile app** icon![](https://developer.android.com/static/studio/images/profile-app-icon.png)and choose between two options:

![One-click profileable build menu.](https://developer.android.com/static/studio/images/one-click-profileable-build-menu.png)

- **Profile 'app' with low overhead** starts the CPU and Memory profilers. In the Memory profiler, only[**Record Native Allocations**](https://developer.android.com/studio/profile/memory-profiler#native-memory-profiler)is enabled.

  ![Profiling with low overhead.](https://developer.android.com/static/studio/images/profiling-with-low-overhead.png)
- **Profile 'app' with complete data**starts the CPU, Memory, and Energy profilers.

  ![Profiling with complete data.](https://developer.android.com/static/studio/images/profiling-with-complete-data.png)

To learn more about testing your app with minimal performance costs, see[Profileable applications](https://developer.android.com/studio/profile#profileable-apps).

## Lint support for SDK extensions

Android Studio Flamingo provides[lint](https://developer.android.com/studio/write/lint)support for SDK extensions. This feature allows you to update the lint tool's API check to correctly enforce API access in the presence of API backports and for new API surfaces like the[Android Privacy Sandbox](https://developer.android.com/design-for-safety/privacy-sandbox).

The lint tool's API check makes sure that your code only uses APIs available to you as gated by`minSdkVersion`or by an`SDK_INT`check. With SDK extensions, an API can exist in multiple SDKs. For example, an API introduced in Android U can also be added to the Android R, S, and T backport extensions. Furthermore, apps can specify multiple APIs as required using their manifest, and there are new APIs for checking whether individual extensions are available. The lint tool now handles the logic to check for overlap in what's required and what's known to be present.

Finally, there are Studio IDE features associated with API checking. This feature can now handle API violations for the new API surfaces, perform necessary checks, and register quick fixes, one per available API surface.

## IntelliJ IDEA 2022.2 platform update

Android Studio Flamingo Canary 1 includes the IntelliJ IDEA 2022.2 updates, which improve the IDE experience. For details on the changes, see the[IntelliJ IDEA 2022.2 release notes](https://www.jetbrains.com/idea/whatsnew/2022-2/).

## Android Studio bundled with JDK 17

Starting from Android Studio Flamingo Canary 3, the Studio IDE is bundled with JDK 17. If Android Studio is configured to use the embedded JDK, new projects will use the latest stable version of the Android Gradle plugin and JDK 17. However, existing projects might break, and you might have to manually set the JDK to a compatible version.

To learn more, see[Set the JDK version](https://developer.android.com/studio/intro/studio-config#jdk).