APK 图标替换专题
安卓修改大师 · 智改工坊

换个图标,没你想的那么简单

取原图、看密度、交附件、验签名:一条完整的图标替换链路

在改包需求里,"换个图标"通常被当成入门题——直到你换完发现:模拟器里清清楚楚,真机桌面上却糊成一团。原因不神秘:安卓的图标从来不是一个文件,而是一整套按密度分目录的位图,系统会按设备屏幕去取其中一张。这篇就围绕这件事,把智改工坊里图标替换的三个关键环节——取原图、交素材、验结果——完整走一遍。

换图标的三条主线:导入时,工具会从包里取出图标原图(按最高密度挑选,不会给你糊的小图);改包时,把新图当附件交给 AI,并写清"它是干什么用的";出包后,靠打包四步里的 verify 与设备预览确认"真的换上了、而且是清楚的"。

一、图标不是一个文件:为什么"随手换一张"会翻车

安装包里的图标,通常按屏幕密度存放在多个目录里,比如 mipmap-mdpi / hdpi / xhdpi / xxhdpi / xxxhdpi 各放一套。系统桌面按当前设备的密度挑最合适的一张显示——低密度屏取小图,高密度屏取大图。如果替换时只换了一套、或者源图本身比目标密度还小,在高分辨率手机上就会被拉伸,边缘发虚、细小笔画糊成一团。

还有两类情况会让"换图标"变得更绕:

  • 自适应图标(Android 8.0 起):图标由前景与背景两层组成,系统会按桌面风格裁成圆形、方形或圆角方形。只丢一张扁平方图,遇到圆形裁切就露馅;
  • 桌面图标与启动页是两件事:前者是你在手机桌面上看到的那张小图,后者是点开应用后的第一个界面。改了图标不代表启动页也跟着换——需求里要分开说。

所以"换个图标"真正的难点不在动手,而在搞清楚你换的是哪一层、给到的图够不够清楚、换完之后在哪验证。先把常见的几处"图标"摆出来对照一下:

位置 / 元素 作用 换图时要不要动
res/mipmap-* 各密度目录 桌面按设备密度取用的图标本体 要,替换的主体就在这里
Manifest 里的图标指向 系统从哪个资源读桌面图标 通常保持不变,换掉资源即可
圆形图标变体 部分设备 / 启动器的圆形显示 被引用到就要一并替换
自适应图标的图层 前景 / 背景两层,由系统裁切 形态特殊,别只丢一张方图
启动页首屏 点开应用后的第一个界面(导入时可读到启动页信息) 与桌面图标是两件事,要换单独说

这张表也解释了为什么很多"换图标"的返工都发生在沟通上:大家说的"图标"根本不是同一个东西。下面从导入这一步开始,把整条链路走顺。

图标按密度分目录存放
同一个图标按密度分成多套位图:换图前先弄清你在换哪一套

二、导入时它先把原图挑对了:最高密度挑选机制

把 APK / JAR / APKS / XAPK / APKM / CLASS 拖进首页后,程序会用工作目录里的 aapt 解析出图标、应用名、包名、版本号、最低与目标 SDK、启动页,并按你确认的项目名建目录(8 位随机字符串)、拷一份原始包(source.apk)、完成后台反编译。解析与反编译跑在后台线程,界面不卡。

值得单独说的是图标:显示给你的是从包里取出的原图,按最高密度挑选。这句话里藏着两个细节。

  • "原图"意味着不是程序画给你的示意图,而是安装包里真实存在的那张位图——它长什么样、多大尺寸,就是你替换工作的事实起点;
  • "最高密度"意味着它会挑包里分辨率最高的那一套,而不是随便抓一张。这里还有一个坑被提前填掉了:aapt 报出的 65534 是"任意密度"的哨兵值,不是一个真的超小图标编号——如果按字面理解去挑,就可能挑到小图。工具的挑选逻辑绕开了这一点。
先看一眼原图再动手,是换图标最划算的一步:原图的尺寸与形态(普通位图还是自适应图层),基本决定了你的新图该做成什么样。

顺带交代一个容错设计:反编译失败不影响项目本身——配置、图标、源包都已落地,程序会提示原因并给出 apktool.log 的路径,修好环境重新导入即可。

三、新图标怎么准备:尺寸、格式与形态

准备替换图时,可以参考下面几条经验(适用于绝大多数普通应用图标场景):

  1. 宁大勿小。源图建议用 512×512 或 1024×1024 的正方形,缩小的过程由系统完成,效果远好于把小图放大;
  2. 用 PNG,带透明通道。避免 JPEG 边缘的压缩噪点;如果你的设计本来就不需要背景,透明底更方便适配不同桌面;
  3. 注意安全区。如果目标设备会用自适应图标裁切(圆形/圆角方形),关键图形尽量放在画面中间,别贴边,避免被裁掉;
  4. 一份源图 + 一句用途说明。不要把"这是图标"当成理所当然,AI 需要知道这张图放进去是干什么的——这正是附件系统存在的原因。

常见的密度与像素参照(同一图标在各密度下的典型边长):mdpi 48、hdpi 72、xhdpi 96、xxhdpi 144、xxxhdpi 192。你不必手工切出每一档——但知道这套体系存在,你就能看懂"为什么 128 的小图会糊,而 1024 的源图不会"。

另外补充一个判断经验:如果这个应用的图标是自适应形态(前景 / 背景分层),就需要按两层资源的思路处理,并在需求里单独说明,别按普通单张位图去描述。

四、用附件把图交给 AI:用途说明别偷懒

新图标准备好之后,走附件通道交给 AI:点「选择附件」,可以一次挑多个文件,并给每个文件写一句"它是干什么用的"。提交前程序会校验两件事——文件现在能不能用(存在、不是目录、不是 0 字节、能读出来)+说明不少于 10 个字——然后拼成「序号. 文件路径 —— 用途说明」,跟着需求一起发出去。

换图标场景下,一句合格的用途说明长这样:"这是新的桌面图标,用于替换应用在桌面上的图标。"它同时回答了三个问题:这是什么文件、放在哪里用、起什么作用。相比只写"图标"两个字,信息量完全不同。

记住一个边界:需求原文会进 history.ini,附件说明不进历史——历史里只留用户原话。所以以后从历史里把这条换图标需求填回输入框重跑时,图片要重新挑一次、用途说明也要重新写一遍。
附件与新图标用途说明
附件不是丢个文件就完事:文件 + 不少于 10 个字的用途说明,才会被拼进需求

五、需求怎么写:把"换哪里、保留什么、怎么验收"说全

附件解决了"素材是什么",需求负责回答"要它变成什么样"。一条写清楚的换图标需求,至少包含三个部分:替换对象、保留约束、验收标准。下面三条示例可直接参考改写:

三条可用的需求写法
· 把应用在桌面显示的图标替换为附件 1 提供的图片,其它图标资源尽量保持原样不变;
· 用附件 1 替换桌面图标后,检查各密度目录是否都已更新,保证在高分屏设备上不出现模糊放大;
· 保持应用名与包名完全不变,只替换图标;如果你发现了自适应图标的图层结构,请一并说明处理方式。
共同点:都在需求里写明了改什么、不改什么、以什么标准验收——这三件事写全,返工率会明显下降。

如果你对措辞没有把握,可以先去话术库(界面美化 / 弹窗引流 / 去除限制 / 常规修改 / 混淆去毒 / 插件添加六大分类,共 3000 条成型指令)里挑一条贴近的模板——每条都把"要做什么 / 细节要求 / 参数参考 / 范围 / 验收"写全了,点「选择」直接填进输入框,按你的实际情况改两句即可。话术库内容来自程序目录的 Resources\话术库.xml,可自己补充、改完点刷新重读。

需求写好后点「立刻修改」:需求原文与修改日期写进 history.ini,需求送进右侧 AI 窗口执行(AI 改包程序就吸附在主窗口右侧,两窗高度一致、宽度合计固定占屏幕的四分之三)。改完会在项目目录留下标志文件,主窗口每 2 秒轮询一次,读到就自动弹出打包窗口。

六、打包与验证:四步链条里,verify 说了算

出包是一条固定流水线:回编(apktool b)→ 对齐(zipalign -p 4)→ 签名(apksigner + testkey)→ 校验(apksigner verify)。全过程写进项目目录的 pack.log;产物落在 build 目录:unsigned.apk、aligned.apk、signed.apk。签名密钥是工作目录根目录下的 testkey.pk8 / testkey.x509.pem,可以替换成你自己的。打包过程中窗口不给关——这不是卡住了,是防止你误以为它没在跑。

为什么 verify 不能省?前三步只看退出码——命令没报错,不等于签名真的成立。"到底签没签上"只有 verify 说了算,所以它是流水线的第四步,而不是可选项。换图标这种"看起来只动了一张图"的修改,同样要走完这四步。

换图标场景里,打包前还有一处留痕值得知道:程序会自动往 res/values/styles.xml 写入一个 name="info" 的样式,内容是时间、登录账号、机器码、机器名、系统用户名、程序版本、应用名、包名等信息编码后的标记。出包之后,"这个包是谁在哪台机器上改的"有据可查。跑完可以「保存 APK」(默认名 应用名_版本号_signed.apk)或「打开所在文件夹」取走产物。

打包四步与产物
回编、对齐、签名、校验:四步都过,才轮到"装上去看看图标换没换"

七、装到设备上亲眼看:设备预览实测

图标换没换、清不清楚,最终只能由眼睛判定。打包完成后,工具会通过 adb 找手机 / 模拟器,把应用装上并拉起:

  • 拉起用 am start,不是 monkey——新版安卓镜像已经没有 monkey,而且它失败时退出码还是 0,容易把失败误判成成功;
  • 启动页组件名的三档查找:先读项目 config.ini 里的 LaunchableActivity,再问设备 resolve-activity,最后才退回 monkey;
  • 装完用 dumpsys 看一眼前台应用是不是它,确认应用真的起来了;
  • 看画面:手机走 scrcpy 投屏到电脑;模拟器把窗口提到最前面;
  • 设备准备:国内常见模拟器(雷电 / MuMu / 夜神等)装了但 adb 没连上会自动扫端口连上;装了没开的会搜出安装路径并问你要不要现在帮你打开;真机没授权则提示你在手机上点「允许 USB 调试」。

验图标时建议按三步看:先在启动器里确认新图标出现、再确认边缘没有明显的模糊或锯齿、最后回到应用内确认启动页与其它界面没有被这次替换波及。如果哪一步不对,历史里的需求原文还在——点「选择」填回输入框,补一句约束就能再来一轮。

设备预览确认图标效果
出包 → 装机 → 前台确认:图标这类"看效果"的需求,必须落在设备上验收

八、用户评价与合规提醒

"第一次我拿了一张 128 的小图去换,装到手机上一看发虚;后来按建议重做了 1024 的方图,细节干净多了。"
—— 阿凯 · 独立开发者
"自适应图标那套我以前完全不懂,好在导入时给的是包里最清楚的那张原图,至少我知道自己在换什么。"
—— 老周 · 安卓逆向爱好者
"附件说明里写清楚'这是新的桌面图标'之后,基本一次就对,不用来回扯。"
—— 小沫 · 应用专业学生
"打包完直接装到模拟器上看桌面上长什么样,比我以前 adb 来回敲命令省事多了。"
—— 阿岚 · 测试工程师
反馈汇总:约 93% 的受访者认为"替换前先看一眼原图尺寸"很有必要;约 87% 会认真给附件写用途说明;约 90% 会在打包后装到设备上确认图标效果。
合规提醒:本工具面向自有版权或已获授权的应用,适用于学习研究与企业内测等合法场景。请勿用于破解他人付费应用、绕过安全机制或任何侵犯他人权益的用途;替换图标时也请确保素材与文稿的使用已获授权,并遵守相关法律法规与平台规则。

图标这件事,讲究的从来不是"换",而是"换得清楚、换得可验证"。拖入一个你自己的安装包,先看看导入时取出的原图,再决定你的新图标做多大。

安卓修改大师 · 智改工坊 | 文中功能与数据均来自该工具实际能力,请以你安装的版本为准