【问题标题】:AOSP art.module.platform.api.stubs compile failed (NaN java error)AOSP art.module.platform.api.stubs 编译失败(NaN java 错误)
【发布时间】:2021-11-27 16:39:13
【问题描述】:
Failed to build aosp
[  0% 18/12890] //libcore/mmodules/core_platform_api:art.module.platform.api.stubs javac [common]
FAILED: out/soong/.intermediates/libcore/mmodules/core_platform_api/art.module.platform.api.stubs/android_common/javac/art.module.platform.api.stubs.jar

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

在每个文件中 Double.java 文件 NaN = 0.0d / 0.0; 在我尝试修改这些文件后,构建重新生成它们时出现相同的错误。 该文件在源中的位置以及如何修复这些错误? 感谢您的回答。

【问题讨论】:

    标签: java android nan android-source lineageos


    【解决方案1】:

    他们来自metalava。

    文件src/main/java/com/android/tools/metalava/model/FieldItem.kt

    我敢打赌,您已经更新了 kotlinc,因此代码现在无法按预期工作。那里有两个部分。一个用于 Double,一个用于 Float。两者都无法在 kotlin 1.5+ 中按预期工作

    所以你应该替换

    is Float -> {
      writer.print(" = ")
      when (value) {
         Float.POSITIVE_INFINITY -> writer.print("(1.0f/0.0f);")
         Float.NEGATIVE_INFINITY -> writer.print("(-1.0f/0.0f);")
         Float.NaN -> writer.print("(0.0f/0.0f);")
      }
    }
    

    通过

    is Float -> {
      writer.print(" = ")
      when {
        value == Float.POSITIVE_INFINITY -> writer.print("(1.0f/0.0f);")
        value == Float.NEGATIVE_INFINITY -> writer.print("(-1.0f/0.0f);")
        java.lang.Float.isNaN(value) -> writer.print("(0.0f/0.0f);")
        else -> { 
          writer.print(canonicalizeFloatingPointString(value.toString()))
          writer.print("f;")
        }
      }
    }
    

    和Double一样,替换块

     is Double -> {
       writer.print(" = ")
       when (value) {
         Double.POSITIVE_INFINITY -> writer.print("(1.0/0.0);")
         Double.NEGATIVE_INFINITY -> writer.print("(-1.0/0.0);")
         Double.NaN -> writer.print("(0.0/0.0);")
         else -> { 
           writer.print(canonicalizeFloatingPointString(value.toString()))
           writer.print(";")
         }
       }
     }
    

    通过

     is Double -> {
         writer.print(" = ")
         when {
             value == Double.POSITIVE_INFINITY -> writer.print("(1.0/0.0);")
             value == Double.NEGATIVE_INFINITY -> writer.print("(-1.0/0.0);")
             java.lang.Double.isNaN(value) -> writer.print("(0.0/0.0);")
             else -> {
                 writer.print(canonicalizeFloatingPointString(value.toString()))
                 writer.print(";")
             }
         }
     }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-15
      • 1970-01-01
      • 1970-01-01
      • 2016-05-24
      • 2015-09-13
      • 1970-01-01
      • 2014-06-01
      相关资源
      最近更新 更多