[英]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.