- 正常情况下或者安卓8之前,
aapt dump badging weixin/weixin809android1940_arm64.apk | grep -E ‘application-icon|icon’
直接去获取图标png文件。
-
安卓8版本之后的APK,自适应图标,图标路径查询出来是一个xml文件,而且这个xml还是个安卓二进制的AXML,需要用工具转才能读出来,一般可以安装androguard工具对打包好的APK内各种axml格式以及resource.arsc进行查询转换,详细可参考
https://androguard.readthedocs.io/en/latest/intro/axml.html
但实际上对图标的获取,通用的aapt工具一样能够搞定。
首先aapt dump badging weixin/weixin809android1940_arm64.apk | grep -E ‘application-icon|icon’
查询到对应的icon值,一般自适应的图标会是一个a.xml这样的值而不是直接对应png图片文件。
因为自适应图标由几个图层叠加而成,所以,这个a.xml里面会包含底层和中间层,叠加起来会再和手机提供的蒙版(上层)一起叠加从而获得原型,圆角等不通风格的图标。从而实现一个APP在不同手机上安装出现不同样子的图标。具体参考
https://developer.android.com/guide/practices/ui_guidelines/icon_design_adaptive
话说回来,查询到a.xml这样的icon后,用命令
test@PC:~/Documents/uengine-runner/apk$ aapt dump xmltree weixin/weixin809android1940_arm64.apk r/aj/a.xml
N: android=http://schemas.android.com/apk/res/android
E: adaptive-icon (line=2)
E: background (line=3)
A: android:drawable(0x01010199)=@0x7f0d0003
E: foreground (line=4)
A: android:drawable(0x01010199)=@0x7f0d0004
这样能查询出这个xml文件内容,这个xml是一个axml二进制文件,不能直接解压apk包来读取,只能用aapt工具来查询,通过查询,可获得APP提供的两层图标资源的ID是
- 0x7f0d0003
- 0x7f0d0004
获取到资源ID后,再去查询resources.arsc资源索引获取对应的png文件
aapt dump –values resources weixin/weixin809android1940_arm64.apk | grep -iC4 7f0d0003
这样就能获取到自适应图标的两层了。
actionchen@actionchen-PC:~/Documents/uengine-runner/apk$ aapt dump --values resources weixin/weixin809android1940_arm64.apk | grep -iC4 7f0d0003
type 12 configCount=5 entryCount=9
spec resource 0x7f0d0000 com.tencent.mm:mipmap/l: flags=0x00000100
INVALID TYPE CONFIG FOR RESOURCE 0x7f0d0001
spec resource 0x7f0d0002 com.tencent.mm:mipmap/a: flags=0x00000500
spec resource 0x7f0d0003 com.tencent.mm:mipmap/b: flags=0x00000100
spec resource 0x7f0d0004 com.tencent.mm:mipmap/c: flags=0x00000100
spec resource 0x7f0d0005 com.tencent.mm:mipmap/d: flags=0x00000500
spec resource 0x7f0d0006 com.tencent.mm:mipmap/e: flags=0x00000100
spec resource 0x7f0d0007 com.tencent.mm:mipmap/f: flags=0x00000500
spec resource 0x7f0d0008 com.tencent.mm:mipmap/g: flags=0x00000100
config mdpi:
resource 0x7f0d0002 com.tencent.mm:mipmap/a: t=0x03 d=0x00002d2f (s=0x0008 r=0x00)
(string8) "r/ak/a.png"
resource 0x7f0d0003 com.tencent.mm:mipmap/b: t=0x03 d=0x00002d30 (s=0x0008 r=0x00)
(string8) "r/ak/b.png"
resource 0x7f0d0004 com.tencent.mm:mipmap/c: t=0x03 d=0x00002d31 (s=0x0008 r=0x00)
(string8) "r/ak/c.png"
resource 0x7f0d0005 com.tencent.mm:mipmap/d: t=0x03 d=0x00002d32 (s=0x0008 r=0x00)
--
(string8) "r/ak/g.png"
config xhdpi:
resource 0x7f0d0002 com.tencent.mm:mipmap/a: t=0x03 d=0x00002d36 (s=0x0008 r=0x00)
(string8) "r/al/a.png"
resource 0x7f0d0003 com.tencent.mm:mipmap/b: t=0x03 d=0x00002d37 (s=0x0008 r=0x00)
(string8) "r/al/b.png"
resource 0x7f0d0004 com.tencent.mm:mipmap/c: t=0x03 d=0x00002d38 (s=0x0008 r=0x00)
(string8) "r/al/c.png"
resource 0x7f0d0005 com.tencent.mm:mipmap/d: t=0x03 d=0x00002d39 (s=0x0008 r=0x00)
--
resource 0x7f0d0000 com.tencent.mm:mipmap/l: t=0x03 d=0x00002d3d (s=0x0008 r=0x00)
(string8) "r/am/l.png"
resource 0x7f0d0002 com.tencent.mm:mipmap/a: t=0x03 d=0x00002d3e (s=0x0008 r=0x00)
(string8) "r/am/a.png"
resource 0x7f0d0003 com.tencent.mm:mipmap/b: t=0x03 d=0x00002d3f (s=0x0008 r=0x00)
(string8) "r/am/b.png"
resource 0x7f0d0004 com.tencent.mm:mipmap/c: t=0x03 d=0x00002d40 (s=0x0008 r=0x00)
(string8) "r/am/c.png"
resource 0x7f0d0005 com.tencent.mm:mipmap/d: t=0x03 d=0x00002d41 (s=0x0008 r=0x00)
这个问题是我自己想在UOS安装APK的设置图标发现默认图标对应的已经不是png文件了查找到的。
既然在Uengine上运行,那干脆计划安装程序提供也提供一个UOS蒙版吧,这样生成的图标就带UOS风了。