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

AOSP编译art.module.platform.api.stubs出现NaN相关Java报错怎么解决

AOSP art.module.platform.api.stubs 编译错误修复方案

错误特征

你遇到的是构建平台API存根阶段的编译错误,核心报错如下:

out/soong/.intermediates/libcore/mmodules/core_platform_api/art.module.platform.api.stubs/android_common/javac/srcjars/java/lang/Double.java:106: error: self-reference in initializer
public static final double NaN = NaN;
                                 ^
out/soong/.intermediates/libcore/mmodules/core_platform_api/art.module.platform.api.stubs/android_common/javac/srcjars/java/lang/Float.java:108: error: cannot find symbol
public static final float NaN = NaNf;
                                ^
  symbol:   variable NaNf   
  location: class Float
2 errors

直接修改out目录下的自动生成文件无效,因为构建时会重新生成该文件,需要修改上游源定义或生成规则。

对应源文件位置

自动生成的存根文件的原始定义位于libcore模块,路径如下:

  • Double类源文件:libcore/ojluni/src/main/java/java/lang/Double.java
  • Float类源文件:libcore/ojluni/src/main/java/java/lang/Float.java
  • 存根生成规则配置文件路径:libcore/mmodules/core_platform_api/Android.bp

彻底修复步骤

步骤1:检查并修正原始类定义

打开上述Double、Float源文件,确认NaN常量定义:

  • Double类的NaN正确定义应为:public static final double NaN = 0.0d / 0.0;
  • Float类的NaN正确定义应为:public static final float NaN = 0.0f / 0.0f;
    如果发现源文件中存在NaN = NaN、NaN = NaNf之类的错误定义,直接修改为上述正确值即可。

步骤2:清理中间缓存重新编译

修改完源文件后,删除对应存根的中间生成缓存,避免复用错误产物:

rm -rf out/soong/.intermediates/libcore/mmodules/core_platform_api/art.module.platform.api.stubs/

之后重新触发AOSP全编译即可。

特殊场景:源文件定义正确仍报错

如果检查发现原始源文件的NaN定义是正确的,说明是存根生成工具metalava的常量解析bug,需要修改生成规则强制指定生成值:
编辑libcore/mmodules/core_platform_api/Android.bp,找到art.module.platform.api.stubs对应的构建目标,在metalava_flags配置项中添加如下参数:

metalava_flags: [
    // 原有其他参数保留,新增以下两行
    "--replace-static-field-value java.lang.Double.NaN=0.0d/0.0",
    "--replace-static-field-value java.lang.Float.NaN=0.0f/0.0f",
]

修改后清理中间缓存重新编译即可。

内容的提问来源于stack exchange,提问作者Антон Иванов

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 19:06:07