Android 10 AOSP中如何将vendor自定义API加入白名单而非灰名单
Android 10 Vendor自定义API加入隐藏API白名单方案
Android 10 引入了更严格的隐藏API限制机制,你之前添加灰名单、check_boot_jars白名单的操作均不匹配需求,按以下步骤操作即可完全消除调用告警:
- 方案一:修改
java_sdk_library蓝图配置(推荐,无需修改系统公共配置)
给你的库新增hiddenapi_whitelisted属性,标记整个库的API都属于白名单,不受隐藏API规则限制:java_sdk_library { name: "com.mycompany.sdk.myclass", srcs: ["java/**/*.java"], api_packages: ["com.mycompany.sdk.myclass"], // 新增以下两个配置 hiddenapi_whitelisted: true, sdk_version: "core_current", } - 方案二:全局配置白名单包列表
如果你不想修改单库的bp文件,可以选择修改全局白名单配置:- 找到
frameworks/base/config/hiddenapi-whitelist-packages.txt,若文件不存在则手动创建,添加你的包名:com.mycompany.sdk.myclass - 如果你不想修改frameworks目录下的源码,也可以直接在项目板级mk配置(比如device/[厂商]/[产品]/board.mk)中添加如下配置,效果完全一致:
PRODUCT_HIDDENAPI_WHITELIST_PACKAGES += com.mycompany.sdk.myclass
- 找到
- 最后重新生成API文件并全编译固件即可:
build/soong/scripts/gen-java-current-api-files.sh "vendor/mycompany/sdk/myclass" && m update-api make -j$(nproc)
原理解释
hiddenapi-greylist-packages.txt对应的是灰名单规则,加入的包名下的API允许调用,但每次调用都会输出警告,完全匹配你之前遇到的现象/build/make/core/tasks/check_boot_jars/package_whitelist.txt是boot jar包名合法性检查规则,作用是禁止不符合要求的包名加入boot jars,和隐藏API限制完全无关,所以添加后不会有任何效果hiddenapi_whitelisted属性或者白名单包配置中的包名下所有公共API,都会被编译系统标记为公开API,不会触发任何隐藏API限制和警告
内容的提问来源于stack exchange,提问作者Brent K.
相关产品推荐
相关产品推荐

