【Android P】非公开API(非 SDK 接口)相关知识总结

关于P-OSV中非公开API(非 SDK 接口)的限制及搜索方式,做了以下整理。

 

1、背景

Android 9(API 级别 28)引入了针对非 SDK 接口的使用限制,无论是直接使用还是通过反射或 JNI 间接使用都会触发限制。

主要目的是通过减少使用非SDK接口来提升APP的稳定性。

 

2、非公开API的分类

非公开API分为3个List,由谷歌人工维护。

具体分类如下:

List名

限制内容

浅灰名单(light grey list)

在Android P上可以使用

不保证将来的可用性

如果没有代替的API,可以向Google报告进行审查移出名单

根据模式不同会有是否表示警告的区别

深灰名单(dark grey list)

根据模式不同会有是否表示警告、是否可以利用的区别

黑名单(black list)

根据模式不同会有是否表示警告、是否可以利用的区别

 

3、模式的分类

共有5种模式,模式是针对每个APP设置的。

targetSDKVersion>=Android P的默认模式:HIDDEN_API_ENFORCEMENT_DARK_GREY_AND_BLACK

targetSDKVersion

具体分类如下:

模式

限制内容

总结

浅灰

深灰

HIDDEN_API_ENFORCEMENT_DEFAULT

-

-

-

一般不用

HIDDEN_API_ENFORCEMENT_NONE

可用

可用

可用

全部可用,警告不表示

HIDDEN_API_ENFORCEMENT_JUST_WARN

警告

警告

警告

API可用,但Log上会有警告表示

HIDDEN_API_ENFORCEMENT_DARK_GREY_AND_BLACK

警告

不可用

不可用

深灰和黑名单的API不可用

HIDDEN_API_ENFORCEMENT_BLACK

警告

警告

不可用

黑名单的API不可用

 

4、检测非公开API的方法

Google提供了检测非公开API的方法,我已经试用没问题。

手顺:

1)、下载静态解析工具「veridex」

       下载地址

2)、将工具拷到Ubuntu机器,解压

3)、解压veridex-linux.zip

4)、将要检测的APK也拷入veridex-linux文件夹,假设叫test.apk

5)、命令行cd进入veridex-linux文件夹,执行以下命令

       ./appcompat.sh –dex-file=test.apk

6)、在命令行中确认检测的结果和明细,也可在执行命令时利用管道导出到文件查看

 

5、回避方法

Google推荐:

1)、检测出APP使用的非公开API,使用公开API实现类似功能。

2)、给应用Platform署名,不受非公开API使用限制影响。

Google不推荐:

根据之前的Mode表所示,将APP的模式设为HIDDEN_API_ENFORCEMENT_NONE。

但未来不保证可行,毕竟Google的方向是希望大家不使用非公开API。

你可能感兴趣的:(Android)