使用矢量drawable作为Android应用图标时mipmap目录相关问题
Android Studio新建项目mipmap启动图标相关问题解答
为什么mipmap文件夹仍生成大量栅格图片,不直接使用矢量drawable?
- 矢量drawable无法直接作为启动图标被系统Launcher渲染:启动图标由系统进程负责加载展示,不属于应用自身的View渲染流程,不同Android版本、不同厂商定制Launcher对启动图标的格式、密度匹配规则不统一,直接使用矢量图会出现渲染失败、缩放模糊、形状错乱的问题。
- mipmap是Android官方指定的启动图标存放目录,系统会根据设备实际显示密度,优先从对应密度层级的mipmap目录加载最优资源,相比drawable目录的资源显示效果更好、加载性能更高。
target API设为30时,API26目录下的XML配置是否必要?
完全必要,不属于冗余配置。
mipmap-anydpi-v26目录下存放的是自适应启动图标定义文件,Android 8.0(API26)才正式引入自适应图标规范:该规范允许应用分离图标的前景、背景两层,由系统根据当前Launcher的要求自动裁剪成对应形状(圆形、圆角方形、水滴形等),避免图标被强行添加白边、形状错位。- 该目录的资源本身就是为了版本兼容设计:API26以下的系统不会读取该目录内容,会自动回退到各密度mipmap目录下的栅格图标;API26及以上的系统(包括API30、更高版本的系统)会优先读取该目录下的XML配置渲染图标,删除后会导致高版本系统无法正常适配自适应图标规范。
当前Manifest中的图标引用配置符合官方规范:
<application android:allowBackup="true" android:dataExtractionRules="@xml/data_extraction_rules" android:fullBackupContent="@xml/backup_rules" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.MyApp" tools:targetApi="31"> <activity android:name=".MainActivity" android:exported="true" android:label="@string/app_name" android:theme="@style/Theme.MyVectorApp"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application>
mipmap各密度目录下的.webp文件如何处理?
这些webp文件是为API25及以下版本系统准备的栅格图标资源,根据应用的minSdk配置分情况处理即可:
- 如果应用最低支持版本(minSdk)大于等于26(比如设置的30):可以直接删除所有
mipmap-mdpi/hdpi/xhdpi/xxhdpi/xxxhdpi目录下与ic_launcher、ic_launcher_round相关的webp文件,不会影响API26及以上设备的图标显示,这部分设备会直接读取anydpi-v26下的自适应图标配置完成渲染。 - 如果应用需要兼容API25及以下的设备:不能删除这些webp文件,需要将默认生成的webp替换为自行设计的、对应密度的栅格图标资源,否则低版本设备上会显示系统默认占位图标。
Android Studio默认生成的图标资源在Project面板中的结构如下:
内容的提问来源于stack exchange,提问作者wbk727
相关产品推荐
相关产品推荐

