
2019年我第一次以独立开发者身份上架Android应用图标用的还是Android Studio默认的绿色机器人。应用名叫了一个非常拗口的英文直译词上架前完全不觉得有问题结果前两周的数据惨到让人怀疑人生。后来把图标替换成品牌主视觉应用名改成用户习惯的短词商店页面的点击率明显改善。经历过那次之后我才意识到“移动应用图标与应用名定制”不是美工和文案的边角工作而是一件能直接影响产品指标的技术活。这篇文章我想从头到尾聊一遍从系统底层怎么读取图标和名称到静态替换怎么做再到动态图标、主题图标、多渠道差异化这些高阶玩法最后把我在实际项目里踩过的坑也一并说出来。不管你是独立开发者、产品经理还是正在准备移动应用设计与开发赛项的学生应该都能在里面找到能直接上手的步骤。1. 先认清一件事图标和应用名是操作系统的“识别接口”1.1 图标不只是门面还是系统里所有入口的“视觉指纹”很多人觉得图标就是一张好看一点的图片放到桌面上让用户点就行。实际上图标在系统里的存在感远超想象。桌面启动器要显示它最近任务列表要显示它设置里的应用管理页面要显示它通知栏下拉时也要显示它应用商店搜索结果里还是它。也就是说用户从安装到使用再到卸载整个链路里接触最多的视觉元素就是这个几十像素的小方块。我习惯把图标比作小区门栋的标识牌。用户每天回家要认准那栋楼靠的不是楼体的建筑图纸而是门口那块牌子上的数字和颜色。应用也一样用户在满屏的App里找你的应用靠的首先是图标轮廓和主色调。如果图标跟竞品长得像或者主视觉元素被系统圆角裁掉用户第一眼就会产生困惑这是非常致命的产品体验问题。另外系统对图标的处理并不是简单地把你的PNG原样放大缩小。Android 8.0之后引入了自适应图标机制系统会按照前景层、背景层、安全区域来裁剪和套用形状iOS也会对图标统一应用圆角矩形和阴影。也就是说你提供的是方图用户看到的可能是圆形、圆角矩形、水滴形甚至异形图标。如果制作时没有预留安全边距Logo主体很容易被裁掉。这个问题等到第二章讲机制的时候再展开。1.2 应用名是搜索、设置与通知栏里的“身份ID”应用名的重要性往往被低估。桌面图标下面那行小字其实是系统里多个场景共用的“身份ID”。iOS的Spotlight搜索、Android的桌面搜索、应用商店的关键词匹配都会读取应用名。用户记不住你的完整品牌名时输入的是他印象里的那个词应用名决定了他能否在手机里快速找到你。这里有个特别容易被忽略的细节同一个应用名在Android和iOS上的读取逻辑不一样。Android的android:label是从安装包Manifest里读出来的iOS的桌面显示名则由CFBundleDisplayName控制而且iOS还有一层CFBundleName一个是用户看到的显示名一个是系统内部使用的短名。很多团队只改了工程名没有改CFBundleDisplayName结果应用装到手机上桌面显示的还是一个奇怪的英文内部名用户根本不知道怎么称呼这个应用。应用名也不是越长越好。桌面空间有限超过一定长度会被系统截断显示省略号从搜索和品牌认知角度短词反而更容易被记住。我的建议是正式名称控制在8个汉字以内如果需要体现版本或渠道属性放到副标题或应用描述里不要全塞进应用名。1.3 动手定制前先回答三个问题在开始改图标和名称之前我建议团队花10分钟回答三个问题这三个答案会直接影响后续所有操作。第一图标的主视觉到底是什么是Logo是产品首字母还是一个抽象符号它在一屏彩色壁纸里是否足够突出很多应用的图标单独看很好看放到桌面上立刻“隐身”多半是因为主色跟壁纸撞色或者元素太细碎。第二应用名的用户认知口径是什么是品牌名优先还是搜索词优先比如一个工具类应用品牌名叫“星图”但用户搜的是“星座日历”那商店里的展示名可以策略性写成“星图-星座日历”既保留品牌又覆盖搜索场景。但桌面显示名建议只保留品牌短名避免被截断。第三要覆盖哪些平台和系统版本如果你的应用支持Android 8.0以下的旧设备除了自适应图标还要准备传统的PNG图标如果目标设备里有定制ROM还要考虑厂商对图标形状的处理策略。这个决策会直接影响资源目录里到底要放多少张图。2. 平台底层读取机制从安装到桌面渲染发生了什么2.1 Android 侧mipmap、Manifest 与 Launcher 三方如何协作先理清Android的读取链路。应用打包时图标资源会被编译进APK的res/mipmap-*目录Manifest中的application节点通过android:icon和android:roundIcon指向对应的资源索引。安装时系统PackageManager服务会解析Manifest把图标、应用名、包名、入口Activity等信息注册到系统应用数据库里。桌面启动器Launcher并不是直接去读APK资源而是通过系统提供的ResolveInfo获取应用的icon和label。这里的核心点在于Launcher在加载桌面时会根据设备屏幕密度去mipmap目录里选择合适的资源然后交给系统渲染。所以如果你只在mipmap-xxhdpi里放了一张图而用户手机是mipmap-mdpi的旧设备系统要么取不到图要么得通过缩放近似处理最终效果会发虚。Android 8.0API 26之后的自适应图标机制把原来“一张图搞定”的方式改成了三层结构背景层、前景层、按系统规则套用的形状层。你提供的mipmap-anydpi-v26目录里是一个XML文件里面引用了一个背景颜色/图片和一个前景图片系统再用设备的形状蒙版去裁剪。这种设计让同一套图标在不同厂商桌面上呈现不同形状但不至于图标主体被切掉。还有一点要注意roundIcon这个属性。很多应用忽略了它只设置了android:icon。部分系统或桌面在特定场景设置页、最近任务会优先使用roundIcon如果没配置系统会退回使用icon并直接裁剪成圆形这可能导致视觉异常。所以严谨的做法是两个属性都配。2.2 iOS 侧Asset Catalog 与 InfoPlist 的读取链路iOS的链路比Android简单一些但也有自己的讲究。图标在上架前被打包进Asset Catalog编译后会生成一个Assets.car文件里面包含了所有尺寸和用途的图标资源。系统桌面SpringBoard读取的是这个文件中的AppIcon它不关心你工程里有多少个图片文件只认编译后的资源。应用名方面iOS优先读取Info.plist里的CFBundleDisplayName。如果这个字段不存在系统会退回去读CFBundleName。问题在于CFBundleName通常被Xcode自动设置为工程名里面经常带着一堆字母缩写和下划线。所以当你在Xcode里看到target叫“MyProject_Dev”的时候装到真机上桌面显示的很可能就是这个内部名除非你显式设置了CFBundleDisplayName。iOS还支持通过InfoPlist.strings做多语言本地化。比如英文系统显示“StarMap”中文系统显示“星图”具体做法是在不同语言目录下放置InfoPlist.strings内容用CFBundleDisplayName作为键名。这个机制跟Android的values-en/strings.xml其实是同一个思路后面实操部分会写到。2.3 各平台图标规格与显示逻辑做图标定制之前手里必须有一张规格表。我整理了一份常用对照覆盖Android和iOS两端的核心场景。平台用途尺寸/密度备注Androidmipmap-mdpi48x48 px160dpiAndroidmipmap-hdpi72x72 px240dpiAndroidmipmap-xhdpi96x96 px320dpiAndroidmipmap-xxhdpi144x144 px480dpiAndroidmipmap-xxxhdpi192x192 px640dpiAndroidAdaptive Icon画布108x108 dp前景占66dp安全区iOS主屏幕图标60pt 2x/3x180x180/60x60iOS设置图标29pt 2x/3x58x58/87x87iOS通知图标20pt 2x/3x40x40/60x60iOS的图标必须是不带透明通道的图片因为系统会自己在上面叠加圆角矩形和阴影。而Android的自适应图标反而需要透明背景让系统蒙版去控制形状。这两种截然不同的要求经常让初次接触的设计师抓狂所以规范一定要提前对齐不能设计师交了一份带透明底的文件就直接往iOS工程里拖。2.4 四个常见误区误区一只换启动页Logo不换桌面图标。启动页里的Logo和桌面图标是两个完全独立的资源。有些团队只要好看只改了启动屏桌面图标还停留在系统默认状态。这个问题在上架审核时通常不会报错但对用户来说观感和信任度影响很大。误区二随便放一个大尺寸PNG到任意mipmap目录。资源目录的密度限定符并不是摆设。把一张192x192的图塞进mipmap-mdpi在低密度设备上系统不会主动做高质量的缩小处理可能出现锯齿。正确的做法是每一档密度都提供对应尺寸。误区三应用名改了但桌面不刷新。应用名资源跟图标资源一样安装到设备之后会进入Launcher的缓存。你升级版本时改了app_name但用户桌面还是显示旧名字大概率是Launcher缓存问题后面避坑章节会讲解决步骤。误区四忽略图标在深色模式下的表现。Android 13之后系统支持主题图标iOS也有深色模式。你的图标如果用了纯黑背景加深色Logo在深色模式下表现可能还可以但如果用了很亮的颜色在深色壁纸上会显得特别刺眼。这个感知问题没有硬性报错但值得在自测清单里加上“深色壁纸”这一项。3. 基础篇静态图标与应用名的完整替换流程3.1 Android 静态图标替换从资源目录到 Manifest先说最常见的场景项目已经建好需要替换默认图标和应用名。第一步准备资源。以自适应图标为标准你需要准备前景图通常是一个带透明背景的PNG、背景图或背景色以及一份adaptive-icon的XML文件。把XML放到res/mipmap-anydpi-v26下前景和背景资源放到drawable或mipmap目录。这里放一份标准配置adaptive-icon xmlns:androidhttp://schemas.android.com/apk/res/android background android:drawablecolor/ic_launcher_background/ foreground android:drawabledrawable/ic_launcher_foreground/ monochrome android:drawabledrawable/ic_launcher_monochrome/ /adaptive-icon第二步把传统PNG放到mipmap-mdpi到mipmap-xxxhdpi各目录下保证8.0以下旧系统也能正常显示。这里偷懒不得旧设备上如果取不到图标系统会给一串默认绿色机器人前期品牌积累就白费了。第三步修改Manifest。核心就是android:icon和android:roundIcon两个属性我强烈建议两个都配application android:iconmipmap/ic_launcher android:roundIconmipmap/ic_launcher_round android:labelstring/app_name第四步修改res/values/strings.xml里的app_namestring nameapp_name星图/string构建安装之后桌面图标和名称就会随之更新。这里有个细节如果图标看起来没变先别急着怀疑代码多半是桌面图标缓存还没刷新可以到应用信息页手动“清除桌面图标缓存”或重启桌面进程后面避坑部分详细说。3.2 iOS 静态图标替换Assets 与 target 设置iOS的替换流程跟Android有几分神似但又不太一样。先处理图标。打开Xcode工程进入Assets.xcassets找到AppIcon图标集。正确做法是把对应尺寸的图标拖到对应Slot里包括iPhone的20pt、29pt、40pt、60pt以及iPad的20pt、29pt、40pt、76pt、83.5pt。需要注意的是每个Slot内还有2x和3x之分不能错位。替换完成后直接真机运行桌面图标会生效。如果你的图标内容没有居中或者带透明通道Xcode在打Release包时可能不会报错但上架审核有可能被打回。再处理应用名。点击工程根节点选到target的Info页面检查CFBundleDisplayName是否存在。如果没有就新建一行Key填CFBundleDisplayNameValue填你要显示的名称比如“星图”。这里要记住改的是DisplayName不是CFBundleName后者最好保持跟工程标识一致避免内部引用出现问题。如果你的应用同一套界面要做中英文双显示名用InfoPlist.strings来做本地化。在zh-Hans.lproj/InfoPlist.strings里写CFBundleDisplayName 星图;在en.lproj/InfoPlist.strings里写CFBundleDisplayName StarMap;系统会根据用户语言自动选择合适的显示名同一个安装包在不同地区桌面显示不同的名称这个机制跟Android的values-zh/strings.xml是同一个思路。3.3 应用名的中文、英文与多语言配置多语言配置是“应用名定制”中最容易被忽略但又很实用的能力。Android端做法是在res下按语言代码建立目录res/values/strings.xml 默认语言 res/values-zh-rCN/strings.xml 简体中文 res/values-en-rUS/strings.xml 美式英语每个strings.xml里都定义同名的app_name系统按设备语言自动选择。千万注意“默认语言”不要漏配否则某些语言环境会直接显示资源ID的字符串用户会看到一串十六进制颜色码一样的东西。iOS端通过InfoPlist.strings来做目录结构是zh-Hans.lproj/InfoPlist.strings、en.lproj/InfoPlist.strings键名统一为CFBundleDisplayName。它在本地化弦上的优先级会比Info.plist里的字段更高所以只要对应语言目录里写了系统就会采用。实际项目里我还遇到过一种情况应用面向的是海外多个市场同一个品牌在不同国家有不同的叫法。这种情况下多语言配置几乎是必须的因为它能让用户感觉这个应用是“本地产品”而不是一个没做本地化的舶来品。这种信任感对转化率的影响比很多人想象的要大得多。3.4 替换后不生效一张排查表解决问题替换图标或应用名之后不生效是提问频率最高的问题。我整理了一张排查表按表逐项检查基本都能定位。现象常见原因处理方式桌面图标没变化Launcher资源缓存重启手机/清除Launcher缓存/修改图标资源后卸载重装测试图标主体被裁切未预留安全区域或前景过大按Android自适应图标66dp安全区重新导出图标显示模糊各密度目录尺寸不匹配按1.1中的尺寸表生成各密度专属文件应用名没变化改错字段改了工程名而不是labelAndroid检查android:labeliOS检查CFBundleDisplayName部分ROM图标有描边/阴影厂商桌面强制套用形状接受系统行为但确保前景在安全区内上架后商店图片不是新图标商店后台缓存/审核延迟确认商店版本资源已提交等待缓存刷新这里最值得强调的是开发阶段排查时卸载重装虽然简单有效但不能反复依赖因为有些桌面在卸载时不会立即清除图标缓存重装后可能又调出旧的缓存资源。更稳妥的做法是改一个版本号或者改一个资源名逼系统重新索引测试完再把不必要的版本号变更回退。4. 进阶篇动态图标、主题图标与多形态入口设计4.1 先泼盆冷水Android 原生不支持“运行时换图标”很多人看到“动态图标”这个热搜词会以为Android有官方API能在运行时切换应用图标实际上没有。Android官方从未提供类似setAppIcon()的接口安装后Launcher读取的图标信息是PackageManager在安装时解析并缓存的普通应用在运行时没有权限修改这个缓存。那为什么日历应用能每天变一个数字因为日历应用通常是在后台更新自己的图标前提前把新图标作为资源打进去等更新时让Launcher刷新。而更常见的“动态图标”其实是通过创建多个桌面入口activity-alias实现的系统允许一个应用在桌面上注册多个图标入口每个入口指向同一个Activity可以各自配不同的图标和名字。但这种方式一旦安装完成你要修改入口列表也需要靠升级版本才能生效并不能做到像小组件那样实时变化。所以如果你想要一个“今天蓝色、明天红色”的桌面图标原生Android做不到必须借助第三方Launcher或桌面小组件方案。为了用户覆盖率和维护成本我通常建议团队做需求评审时直接放弃这个方向把预算放到更可控的方案上。4.2 Android 13 主题图标monochrome 图层接入系统主题Android 13开始引入Themed Icons主题图标这算是系统级“动态图标”的一种。用户如果开启主题图标开关系统会把应用的图标处理成跟当前壁纸主色调一致的单色风格让桌面看起来更统一。这个功能对用户是体验升级对开发者来说其实工作量很小。前提是你的自适应图标里提供了monochrome图层。看这个名字也知道它是一张单色图系统会用壁纸的主色去给这个图层着色。它不需要彩色只需要一个能表达图标轮廓和主体形状的透明底图形。adaptive-icon xmlns:androidhttp://schemas.android.com/apk/res/android background android:drawablecolor/ic_launcher_background/ foreground android:drawabledrawable/ic_launcher_foreground/ monochrome android:drawabledrawable/ic_launcher_monochrome/ /adaptive-icon这里有个很现实的提醒很多团队没加monochrome图层他们不知道、不重视结果用户开启主题图标后桌面上别人的图标都变成了壁纸色只有你的应用还保留着原来的彩色图标视觉上反而显得特别突兀。这种“定制”不一定是加分项但如果完全不支持用户观感反而会减分。4.3 iOS 的 Alternate Icons官方支持但限制不少iOS在这件事上反而比Android多给了一个官方能力Alternate Icons也就是“备用图标”。从iOS 10.3开始应用可以在运行时调用setAlternateIconName切换到指定图标。这个能力适合做节日主题、品牌换肤这类场景。具体实现分两步。第一步在Info.plist里配置CFBundleAlternateIcons它是一个字典每个key对应一个备用图标的名称value里可以配置该图标所需的图片资源。第二步在代码里调用import UIKit UIApplication.shared.setAlternateIconName(AppIconDark) { error in if let error error { print(切换失败: \(error.localizedDescription)) } }这个API有两个明显的限制。第一切换图标时系统会弹出确认框用户必须确认才能生效你不能在后台偷偷换。第二切换后应用会被系统强制退出一次这不是bug是机制。所以这个功能适合低频场景不适合做那种每两小时换一次的营销玩法。还有一点要注意切换备用图标不会同时改变应用名称。iOS每个图标的key只是图标资源的标识桌面显示名依然由CFBundleDisplayName统一决定。如果你想要“图标变了名字也变了”iOS原生方案做不到这块需求得在产品评审阶段就打住。4.4 更可控的动态化方案快捷方式、小组件与通知图标如果“动态图标”的真正目的是“让用户在桌面上看到实时变化的信息”那比起硬碰系统图标机制不如把力量放到三个更可控的载体上。第一个是Android的快捷方式Shortcut。ShortcutManagerCompat允许你动态添加、更新、删除桌面快捷方式每个快捷方式都有独立的图标、短标签和长标签。你完全可以做一个“一键切换深色模式”的快捷方式或者“查看今日待办”的快捷方式用户长按应用图标就能看到。这种方式既能呈现“动态感”又不用触碰系统图标权限。val shortcut ShortcutInfoCompat.Builder(context, shortcut_daily) .setShortLabel(今日任务) .setLongLabel(查看今天的任务清单) .setIcon(IconCompat.createWithResource(context, R.drawable.ic_shortcut)) .setIntent(Intent(context, MainActivity::class.java).apply { action Intent.ACTION_VIEW }) .build() ShortcutManagerCompat.pushDynamicShortcut(context, shortcut)第二个是桌面小组件Widget。小组件可以说是唯一能在Android桌面上名正言顺实时刷新的入口。你可以在小组件里展示动态数据、变更主题色、甚至做一个小型品牌动画用户对它的感知远比一个图标更强烈。第三个是通知图标。这个小东西经常被忽略。Android通知栏图标只支持alpha透明的单色图像如果你直接复用彩色图标系统会显示成一个白色方块非常难看。给通知渠道配一个独立的单色图标反而是很多应用定制升级中投入产出比最高的一项。5. 应用名定制的高级玩法多语言、多渠道与版本差异化5.1 按地区和语言显示不同应用名应用名的多语言配置基础版是“翻译”高级版是“本地化命名”。有些品牌在不同地区用的是完全不同的称呼比如一个产品总部叫“Glow”日本市场叫“グロー”东南亚市场可能叫“Glow Asia”。这种场景下应用名资源直接按语言目录拆开即可。Android端要给不同语言目录分别放置strings.xmliOS端用不同.lproj目录下的InfoPlist.strings。核心建议就一条别把地区都塞进默认语言目录里导致中文环境显示错乱。我见过不少项目默认values里写的是英文名values-zh-rCN里写的是中文名结果在欧洲某些小语种设备上系统找不到对应语言就直接走默认英文名这是对的但有些团队反着写默认目录放中文英文设备上反而显示中文名这就出问题了。5.2 多渠道打包不同渠道不同名称的 Gradle 配置如果你同时发布到国内几个应用商店可能需要每个渠道显示不同的应用名用来做渠道追踪或满足平台要求。Android端用Gradle的多渠道机制加Manifest占位符操作非常成熟。先在build.gradle里配置productFlavorsandroid { productFlavors { googlePlay { manifestPlaceholders [appName: StarMap] } huawei { manifestPlaceholders [appName: 星图-华为版] } xiaomi { manifestPlaceholders [appName: 星图] } } }然后在AndroidManifest.xml里把android:label改成占位符application android:iconmipmap/ic_launcher android:roundIconmipmap/ic_launcher_round android:label${appName}这样打不同渠道包时应用名会自动替换完全不用改业务代码。iOS这边没有“多渠道打包”的概念但可以通过多个Target来对应不同市场版本每个Target配置独立的CFBundleDisplayName。如果嫌Target维护麻烦也可以在构建脚本xcconfig文件里用变量控制效果类似。5.3 动态修改桌面名称能做什么不能做什么“运行时动态改应用名”这个需求经常被提出来尤其是游戏和工具类产品想做活动标题、热点名蹭流量。这里必须把边界说清楚Android和iOS都没有官方API允许你在运行时修改桌面显示的应用名。系统在安装时就把应用名固化在桌面入口的元数据里了业务代码碰不到。市面上确实有一些“歪路子”能实现类似效果比如通过创建快捷方式、修改桌面数据库或者利用厂商ROM漏洞但这些方案要么只对特定桌面有效要么需要系统权限要么违反应用商店审核规范。我见过一些工具类应用用“桌面快捷方式”模拟出应用名变更的效果但真正卸载应用时快捷方式也会一起消失体验并不好。所以产品评审阶段遇到“动态改应用名”的需求我的建议是要么做多语言版本、多渠道差异化这部分是合规且稳定的要么做一个可变的快捷方式名称或小组件标题满足“快速传递活动信息”的目标不要在官方能力边界上强行开洞回头审核被拒或者用户投诉代价远大于收益。5.4 版本化命名与灰度测试策略应用名还有一个比较少人聊的高级玩法把它当成一个可实验的产品元素。App Store和Google Play后台都支持应用商店页面的元数据A/B测试你可以测试不同应用名对转化率的影响。但在设备桌面上的显示名跟商店里的名称未必需要完全一致。桌面显示名可以保持品牌短名商店展示名可以加入关键搜索词两者各司其职。灰度测试时我会建议先做一个“名称变更幅度评估”。如果只是从“星图”改成“星图日历”用户还能识别如果直接改成“星座知识库大全”老用户看到可能会以为手机里装了一个不认识的应用反而降低打开率。名称变化越大越应该在商店更新说明和版本日志里提前告知用户。这一点对月活规模较大的应用尤其重要。6. 那些文档里没写的坑缓存、适配与合规边界6.1 图标缓存这个“幽灵问题”到底怎么解决换图标后桌面不更新是我见过最多的一个问题而且在不同品牌手机上表现还不一样。Android设备的桌面缓存由Launcher进程持有你升级了应用、提交了新图标Launcher不一定立刻重新读取。常见的处理顺序是这样的先重启手机这是最暴力且最有效的方法如果重启还不行打开设置-应用管理-找到你的桌面或Launcher选择“清除缓存”或“停止”最后才考虑卸载重装。iOS的缓存问题相对隐蔽。有时候你从Xcode真机运行桌面图标还是旧的原因可能是系统在生成桌面布局时优先使用了之前安装包的缓存。你可以尝试删除应用再重装但要注意如果涉及本地数据先备份。还有一个偏方是重启手机、换壁纸触发一次系统重绘实测对某些iOS版本有效。我踩过最无语的一次坑是图标资源本身已经替换了但桌面显示的还是旧图片排查了半天才发现是构建脚本里打包了旧资源缓存新版APK里那张图确实没变。所以遇到缓存问题先确认安装包里的资源是不是真的更新了再怀疑Launcher。6.2 设计与开发的交接规范从命名到尺寸一次说清图标定制最伤协作效率的往往是设计与开发之间的交接混乱。开发拿到手一张图不知道该丢进哪个目录设计不知道系统会自动裁切交了一堆尺寸不全的图。我这里给一个可以直接复用的交接规范。命名方面Android建议统一用ic_launcher、ic_launcher_round、ic_launcher_foreground、ic_launcher_background、ic_launcher_monochromeiOS按Asset Catalog里的AppIcon Slot直接对应即可。不要出现中文名、空格、以及多个同事各自命名的“最终版v3”这种文件。格式方面Android的自适应图标前景图必须是带透明底的PNG、SVG或VectorDrawable背景可以是颜色或图片iOS的图标必须是不含Alpha通道的PNG这一点非常重要因为iOS系统会在图标上叠加圆角矩形如果原图有透明通道边缘就会出现异常的半透明描边。导出前把图片格式检查作为一个固定步骤写进交接文档。安全区域方面Android自适应图标的总画布是108dp但前景层真正视觉安全区只有中间的66dp。简单理解你画一个108的框然后把Logo或者主视觉元素控制在直径66的圆内四周留白给系统裁切。iOS的图标虽然系统固定裁圆角但同样建议四周留10%左右的边距避免主体贴近边缘。6.3 定制图标的合规边界哪些操作绝对别碰图标和应用名定制虽小但合规红线一点不少。首要一条不能冒充系统应用或知名应用。把图标做得跟系统设置图标极其相似用来诱导用户点击一旦被用户投诉或者审核发现轻则下架重则影响开发者账号。第二条不能高仿竞品。有些团队为了蹭流量把图标设计得跟头部应用“撞脸”颜色、轮廓、元素位置都高度相似。这个属于典型的知识产权风险除了审核过不了还可能被正主发函。第三条应用名不要频繁无规律变更更不要使用带有误导性质的名称比如“清理大师”“WiFi神器”这类明显蹭功能热词的说法如果应用中实际没有对应能力很容易被应用商店判定为虚假宣传。图标上也不要出现不存在的功能角标比如“免费”“红包”这类诱导性元素。合规的定制思路应该是用图标和名称传达真实的产品价值让用户基于准确信息做决策。这个思路不仅是审核要求也是产品长期经营的基本盘把用户骗进来又留不住成本比老老实实做品牌还高。6.4 团队工作流建议把图标与应用名管理起来如果团队同时维护多条产品线或者多个马甲包图标与应用名这种“小资源”很容易在版本迭代中被改乱。我的建议是给它们建立配置管理而不是每次改图标都靠人工拖拽。Android工程可以把所有图标文件名、尺寸、放置路径都写成一份Markdown说明放仓库里再写一个简单的Python脚本从设计源图批量生成各密度图标输出到对应目录。iOS可以用Xcode的xcassets配合Build Phase Script在上架构建时校验AppIcon是否配置完整、是否包含透明通道、是否满足最低尺寸。这一步可以拦截大多数人手操作的失误。上架前的检查清单建议固化到发布流程里至少包含四件事桌面图标在所有主流桌面尺寸下是否清晰、应用名在目标语言环境下是否正确显示、monochrome图层是否存在、通知图标是否为单色Alpha图。这四件事都过一遍图标和应用名这块基本不会出幺蛾子。做了这么多年图标和应用名的定制后我最大的体会是这两个看起来很小的资源其实是用户感知最频繁的产品界面。它不只是一个资源文件而是一套从设计到系统渲染再到用户认知的完整链路。建议你把当前应用的图标放到桌面上深色浅色壁纸各看一遍再打开应用信息页看一次应用名用三秒钟回答一个问题如果我是第一次见到它我能判断它是干什么的吗如果答案是否定的那就值得专门花一个迭代去改进。你不需要等一套多么复杂的完整方案从一个图标、一个名字开始改就能看到变化。