Adaptive Icons

App Icons, Adaptive Icons and Multiple Densities

Sizes are in dp, where px = dp * dpi / 160: 48 dp is 126 px on this 420 dpi emulator. A PNG needs a copy per density bucket (mdpi to xxxhdpi); a vector serves all. Since Android 8.0 the launcher icon is adaptive: two 108 dp layers masked into the launcher's shape, the central 66 dp always visible, plus an optional monochrome layer for themed icons.

BookNest's adaptive icon (res/mipmap-anydpi/ic_launcher.xml)XML
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
  <background android:drawable="@color/ic_launcher_background" />
  <foreground android:drawable="@drawable/ic_launcher_foreground" />
  <monochrome android:drawable="@drawable/ic_launcher_foreground" />
</adaptive-icon>

With minSdk 26, no PNG fallbacks are needed (File > New > Image Asset makes them for older releases):

The icon entries aapt2 finds in the APKKotlin
aapt2 dump badging app/build/outputs/apk/debug/app-debug.apk | grep -i icon
Output
application-icon-160:'res/mipmap-anydpi-v21/ic_launcher.xml'
...
application-icon-65534:'res/mipmap-anydpi-v21/ic_launcher.xml'
application: label='BookNest' icon='res/mipmap-anydpi-v21/ic_launcher.xml'
The launcher masks BookNest's icon into a circle
The launcher masks BookNest's icon into a circle

Keep text out of the icon; Google Play 1 also wants a separate 512 x 512 px store icon.