You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AOSP Android12:自定义Jar加入引导类路径及非SDK限制解决

解决AOSP自定义库加入Boot Class Path后的非SDK接口限制及全局可用问题

问题根源分析

  1. 加入PRODUCT_BOOT_JARS后,编译系统会将Jar中的classes.dex提取并编译为ART格式的vdex/oat/art文件,原Jar中classes.dex为空是正常行为,实际类数据已存储在ART相关文件中。
  2. 报错核心是Android的Hidden API机制拦截了应用对非SDK接口的访问——即便库在Boot Class Path中,未标记为公开SDK的类/字段仍会被限制访问。

解决步骤

1. 将自定义库纳入系统公开SDK接口

要实现应用无需添加<uses-library>即可全局访问,需把库的类/字段标记为系统公开SDK接口:

  • 在frameworks/base/api/current.txt中添加类和字段的声明,格式参考已有条目:
    public class com.example.mylib.MyClass {
        public static final java.lang.String MY_STRING;
    }
    
  • 执行make update-api命令更新API文件,让编译系统识别这些接口为公开SDK内容。

2. 配置Hidden API豁免规则(适配Android 12)

即使纳入公开API,仍需确保Hidden API机制不拦截访问,需添加豁免规则:

  • 在build/make/core/tasks/hiddenapi/hiddenapi-policy-unspecified.txt中添加目标类和字段:
    Lcom/example/mylib/MyClass;
    Lcom/example/mylib/MyClass;->MY_STRING:Ljava/lang/String;
    
  • 若需要更宽松的访问权限,也可将规则添加到hiddenapi-policy-whitelist.txt,但优先使用unspecified保持合规性。

3. 修正库模块的编译配置

确保frameworks/base/mylib的编译配置正确,以Android.bp为例:

java_library {
    name: "com.example.mylib",
    srcs: ["src/**/*.java"],
    installable: true,
    sdk_version: "core_platform", // 标记为系统平台SDK范畴
}

若使用Android.mk,对应配置如下:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := com.example.mylib
LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_MODULE_TAGS := optional
LOCAL_SDK_VERSION := core_platform
include $(BUILD_JAVA_LIBRARY)

4. 验证Boot Class Path配置

确认build/target/product/sdk_phone_arm64.mk中的配置无误:

PRODUCT_BOOT_JARS += com.example.mylib

编译后系统会自动将该库加入Boot Class Path,实现全局可访问。

5. 重新编译验证

执行完整编译流程:

make clean && make -j$(nproc)

刷入系统后,应用即可直接访问com.example.mylib.MyClass.MY_STRING,无需在Manifest中添加<uses-library>配置。

关键说明

  • 仅加入Boot Class Path无法绕过Hidden API限制,必须将接口标记为系统公开SDK才能实现全局无感知访问。
  • make update-api命令必须执行,否则编译会因API检查不通过报错。
  • Android 12的Hidden API规则严格,必须明确声明豁免或公开为SDK接口,否则应用无法正常访问目标类/字段。

内容的提问来源于stack exchange,提问作者Banana999

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 09:15:13