veridex执行错误分析与方案

631 阅读2分钟

一句话描述:

通过修改 hiddenapi-flags.csv 中的 max-target-s 为 max-target-r 兼容可执行文件,解决执行崩溃问题。


veridex 是 Google 官方提供的用于检查 non-SDK interface 调用的工具。在使用时,需要替换工具包中的 hiddenapi-flags.csv 为你的目标版本的文件。

在替换成 Android 13 的文件后,执行命令发生报错。

veridex F 08-08 18:12:00 19657 4918151 hidden_api.cc:38] Check failed: success Unknown ApiList flag: Landroid/app/Activity;->setDisablePreviewScreenshots(Z)V,max-target-s
Abort trap: 6

Google 相关问题发现,已经有很多人遇到同样的问题,最早提出问题的是2022.09.30,但目前依然人提供最终的解法。

WX20230809-172639@2x.png

于是自己根据报错从源码角度查原因,发现是由于可执行文件与csv文件不兼容导致。在源码中会定义可以识别出的flags有哪些,csv文件中如果出现了源码中没有定义的flag,则会报错。

image.png

WX20230809-171121@2x.png

所以,修改方向就是使可执行文件与csv文件匹配

由于没有源码环境,从零搭建再编译成本太高,所以就想从可直接修改的csv文件入手。我们的目标是应用升级到 target 33,即 Android 13,所以可以把不能识别的 max-target-s 标识全部替换成 max-target-r。因为我们既然要适配到s,必然需要适配r,s相关的记到r上并不影响适配工作。

替换完成后,执行依然报错。

veridex F 08-09 15:50:21 46274 5359706 hidden_api.cc:38] Check failed: success Unknown ApiList flag: Landroid/Manifest$permission;-><init>()V,public-api,sdk,system-api,test-api,
Abort trap: 6

在表格中查看,这一行在原始csv文件和新csv文件中完全一样。why?使用sublime Text查看,发现文件格式有差异。

image.png

原来是在使用wps查看和修改csv文件文件后,在每行结尾被添加了一些英文逗号。在sublime text中使用正则匹配,{2,}并替换成空字符串,直接卡死,最后使用python脚本瞬间完成。

修改后的csv文件已上传github,需要自取。 veridex