簡體   English   中英

如何在 AOSP 中為 Android 10 將供應商特定的 API 列入白名單

[英]How to whitelist a vendor-specific API in AOSP for Android 10

我正在嘗試將特定於供應商的 API 添加到我的 AOSP 代碼庫中。 我能夠在 Android 5 到 9 上完成這項工作,但無法在 Android 10 上解決這個問題。

我閱讀了有關實施 Java SDK 庫的 AOSP 文檔的文檔

我有以下藍圖文件:

java_sdk_library {
  name: "com.mycompany.sdk.myclass",
  srcs: ["java/**/*.java"],
  api_packages: ["com.mycompany.sdk.myclass"],
}

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

build/soong/scripts/gen-java-current-api-files.sh "vendor/mycompany/sdk/myclass" && m update-api

這會將我所有的公共方法簽名放入 current.txt 文件中。

我將此作為啟動 jar 添加到我的頂級 board.mk 文件中:

PRODUCT_BOOT_JARS += com.mycompany.sdk.myclass

構建它會創建相應的 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>

一切都可以正常構建和安裝。 我驗證了權限文件位於 /system/etc/permissions/ 並指向正確的 jar 文件名。 但是,當我運行針對我的私有 SDK 構建的測試應用程序時,出現“訪問隱藏方法(黑名單、鏈接、拒絕)”異常:

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

我可以通過發出以下命令來消除此黑名單錯誤:

adb shell settings put global hidden_api_policy  1

所以我知道我的 jar 正在正確構建和安裝。 但只是被列入第 3 方的黑名單。

我最終將我的 package 名稱添加到 frameworks/base/config/hiddenapi-greylist-packages.txt,突然我的測試應用程序運行,並正確找到了私有 API。 不幸的是,每次方法調用時,黑名單錯誤都會被灰名單警告所取代。 我不希望日志中充斥着這些警告,因此必須將其列入白名單,而不是列入灰名單。

我嘗試將它添加到 /build/make/core/tasks/check_boot_jars/package_whitelist.txt,但這沒有任何區別。

如何將我的私有 API 列入白名單而不是灰名單?

沒有白名單。 白名單(允許列表)是Android SDK中列出的方法。

私有 API 不在 Android SDK 中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM