小编Bre*_* K.的帖子

如何在 Android 10 的 AOSP 中将供应商特定的 API 列入白名单

我正在尝试将特定于供应商的 API 添加到我的 AOSP 代码库中。我能够在 Android 5 到 9 上运行此功能,但无法在 Android 10 上解决此问题。

我阅读了 AOSP 文档上用于实现 Java SDK 库的文档

我有以下蓝图文件:

java_sdk_library {
  name: "com.mycompany.sdk.myclass",
  srcs: ["java/**/*.java"],
  api_packages: ["com.mycompany.sdk.myclass"],
}
Run Code Online (Sandbox Code Playgroud)

我使用以下命令生成了 api 子目录:

build/soong/scripts/gen-java-current-api-files.sh "vendor/mycompany/sdk/myclass" && m update-api
Run Code Online (Sandbox Code Playgroud)

这会将我所有的公共方法签名放入 current.txt 文件中。

我将其作为启动 jar 添加到我的顶级 board.mk 文件中:

PRODUCT_BOOT_JARS += com.mycompany.sdk.myclass
Run Code Online (Sandbox Code Playgroud)

构建此文件会创建相应的 com.mycompany.sdk.myclass.xml 权限文件:

<?xml version="1.0" encoding="utf-8"?>
<permissions>
    <library name="com.mycompany.sdk.myclass"
    file="/system/framework/com.mycompany.sdk.myclass.jar"/>
</permissions>
Run Code Online (Sandbox Code Playgroud)

一切构建和安装都很好。我验证了权限文件位于 /system/etc/permissions/ 中并指向正确的 jar 文件名。但是,当我运行针对我的私有 SDK 构建的测试应用程序时,出现“访问隐藏方法(黑名单、链接、拒绝)”异常:

W/test_app: Accessing hidden method Lcom/mycompany/sdk/myclass;->myMethod(Landroid/content/Context;Z)V (blacklist, linking, denied)
Run Code Online (Sandbox Code Playgroud)

我可以通过发出以下命令来消除此黑名单错误:

adb shell settings put …
Run Code Online (Sandbox Code Playgroud)

api sdk vendor android-source

5
推荐指数
1
解决办法
801
查看次数

标签 统计

android-source ×1

api ×1

sdk ×1

vendor ×1