油然作云沛然下雨

发布于
将安卓 Vector Drawable 转为 SVG

七八月之间旱,则苗槁矣。 天油然作云,沛然下雨, 则苗浡然兴之矣。

在 PC 平台解包安卓 apk ,可以使用 apktool,安卓上有一个 Apktool M 的闭源免费工具。

看到其中提取 APK 分包合并的文件结尾有一个 AntiSplit

然后搜到了 AntiSplit-M 可以在安卓上合并分包和提取 APK, 同时发现了一个 APKEditor 的软件,也可以在 PC 上分包和合并。

反编译解压

  1. 从 apkmirror / apkpure 下载 或 手动提取 apk 安装包
  2. 使用 apktool 或者 APKEditor 解压 apk
  3. 如果是分包,则需要先合并
apkEditor m -i ./
  1. 然后再反编译解压
apkEditor d -i ._merged.apk

或者

apktool d xxx.apk
  1. 进入到 drawable 使用 lvd2svg 命令将 xml 转为 svg 文件

lvd2svg

安装 lvd2svg,一个 支持提取 线性渐变或径向渐变 的 Android 矢量可绘制到 SVG 的转换器。

npm i lvd2svg -g
cd drawable
lvd2svg

看到有个工具叫做 vd2svg 说是可以将安卓 Vector Drawable 转为 SVG,但是我用的时候,总是报错,并且没法跳过,导致批量操作中断了。

搜了很久也没找到现成的支持处理渐变色的 vd 转 svg 的工具。

于是花时间写了一个,主要就是将 xml 标签替换成 svg 标签。然后花了一些时间优化,处理各种问题。

主要功能如下:

转换 <path> <clipPath> <group> <gradient> 标签

  • 支持从 @drawable/ 中提取渐变颜色
  • 支持从 @android:color/ Android 颜色常量中提取颜色
  • 支持从 values/colors.xml 中提取颜色
  • 支持从 values/styles.xml 中提取颜色
  • 支持组 group 的转换 transform

简单应用

对于纯 apk 文件

for item in *;
do
	c=${PWD}
	echo "Processing: $item" ;
	apktool d "${item}";
	cd "${item/.apk/}/res/drawable";
	lvd2svg;
	cd "${c}"; 	
done;

对于分包的压缩包,先解压到一个目录

for item in *;
do
	c=${PWD}
	echo "Processing: $item" ;
	cd "${item}";
	apkEditor m -i ./;
	apktool d ._merged.apk;
	cd ._merged/res/drawable;
	lvd2svg;
	cd "${c}"; 	
done;