将安卓 Vector Drawable 转为 SVG
七八月之间旱,则苗槁矣。 天油然作云,沛然下雨, 则苗浡然兴之矣。
在 PC 平台解包安卓 apk ,可以使用 apktool,安卓上有一个 Apktool M 的闭源免费工具。
看到其中提取 APK 分包合并的文件结尾有一个 AntiSplit。
然后搜到了 AntiSplit-M 可以在安卓上合并分包和提取 APK, 同时发现了一个 APKEditor 的软件,也可以在 PC 上分包和合并。
反编译解压
- 从 apkmirror / apkpure 下载 或 手动提取 apk 安装包
- 使用 apktool 或者 APKEditor 解压 apk
- 如果是分包,则需要先合并
apkEditor m -i ./
- 然后再反编译解压
apkEditor d -i ._merged.apk
或者
apktool d xxx.apk
- 进入到
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;