android 高版本无法正常启动,偶尔会报应用程序无响应(ANR)

最近使用新手机测试,竟然频繁出现ANR,而且每次加载都很慢。每次加载慢时,都会出现一下代码:

 经过了解,Android 9引入了针对非SDK接口的使用限制,无论是直接使用还是通过反射或JNI间接使用。这意味着,通过反射之类的语义来操作某个类时,不应访问SDK中未列出的函数或字段(通常都有@hide标志)。

blacklist、greylist、greylist-max-o、greylist-max-p含义如下:

  • blacklist 黑名单:禁止使用的非SDK接口,运行时直接Crash(因此必须解决)
  • greylist 灰名单:即当前版本仍能使用的非SDK接口,但在下一版本中可能变成被限制的非SDK接口
  • greylist-max-o: 在targetSDK<=O中能使用,但是在targetSDK>=P中被禁止使用的非SDK接口
  • greylist-max-p: 在targetSDK<=P中能使用,但是在targetSDK>=Q中被禁止使用的非SDK接口

一、非SDK接口

官方文档:针对非 SDK 接口的限制

官方从 Android 9(API 级别 28)开始,对应用使用的非 SDK 接口实施了限制。
如果你的APP通过引用非 SDK 接口或尝试使用反射或 JNI 来获取句柄,这些限制就会起作用。官方给出的解释是为了提升用户体验、降低应用崩溃风险。

1.1、非SDK接口检测工具

官方给出了一个检测工具,下载地址
Google官方 veridex下载:
https://android.googlesource.com/platform/prebuilts/runtime/+/master/appcompat


Android veridex 非SDK接口检测工具

veridex使用方法:

./appcompat.sh --dex-file=文件名.apk --imprecise

文件名称为veridex.gz,直接解压即可。解压后

因为我开发环境是mac。所以加压veridex-mac.zip文件,并将apk复制进去。 

 打开终端,cd到当前面目录,执行即可。

appcompat.sh --dex-file=apk.apk
./appcompat.sh --dex-file=文件名.apk --imprecise

补充,这两个命令都可以。只不过--imprecise参数,可以看到更多详细的信息。

将命令行信息复制出来,根据报名查看需要修改的代码。

完毕——收工——撒花…… 

猜你喜欢

转载自blog.csdn.net/x158454996/article/details/127450907