About

<#TEMPLATE_INCLUDE_NINEPAGE_ABOUTME#>
  • Feb

    25

    Adobe AIR SDK 编译打包 Android APP 时使用 ANE 后出现的异常错误

    • 0 Comments
    • Flash Platform
    • 发布:古树
    • 引用:0
    • 浏览:

    使用了某个功能的 Android ANE 后出现一个如下的 TOP-LEVEL 异常错误:

    dx tool failed:
    UNEXPECTED TOP-LEVEL ERROR:
    java.lang.OutOfMemoryError: Java heap space
     at java.util.ArrayList.(Unknown Source)
     at java.util.ArrayList.(Unknown Source)
     at com.android.dx.ssa.SsaMethod.buildUseList(SsaMethod.java:423)
     at com.android.dx.ssa.SsaMethod.getUseListForRegister(SsaMethod.java:615)
     at com.android.dx.ssa.SCCP.addUsersToWorklist(SCCP.java:105)
     at com.android.dx.ssa.SCCP.simulateStmt(SCCP.java:385)
     at com.android.dx.ssa.SCCP.simulateBlock(SCCP.java:199)
     at com.android.dx.ssa.SCCP.run(SCCP.java:400)
     at com.android.dx.ssa.SCCP.process(SCCP.java:84)
     at com.android.dx.ssa.Optimizer.runSsaFormSteps(Optimizer.java:161)
     at com.android.dx.ssa.Optimizer.optimize(Optimizer.java:101)
     at com.android.dx.ssa.Optimizer.optimize(Optimizer.java:74)
     at com.android.dx.dex.cf.CfTranslator.processMethods(CfTranslator.java:269)
     at com.android.dx.dex.cf.CfTranslator.translate0(CfTranslator.java:131)
     at com.android.dx.dex.cf.CfTranslator.translate(CfTranslator.java:85)
     at com.android.dx.command.dexer.Main.processClass(Main.java:299)
     at com.android.dx.command.dexer.Main.processFileBytes(Main.java:278)
     at com.android.dx.command.dexer.Main.access$100(Main.java:56)
     at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:229)
     at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:244)
     at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:130)
     at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:108)
     at com.android.dx.command.dexer.Main.processOne(Main.java:247)
     at com.android.dx.command.dexer.Main.processAllFiles(Main.java:183)
     at com.android.dx.command.dexer.Main.run(Main.java:139)
     at com.android.dx.command.dexer.Main.main(Main.java:120)
     at com.android.dx.command.Main.main(Main.java:89)

    由于原先一直正常,最后一次在优化代码后,在调试时出现上述问题,经过数小时的努力,仍然百思不得其解。但原先已经发布的项目切依然可以正常编译,所以最终放弃了调试,直接将项目发布到生产模式,运行的时候发现又正常了。怀疑是 ANE 文件编译时版本的问题,所以再次测试,果然在 Flex 调试模式下输出 JAVA 版本与在生产模式下(系统的 JAVA) 版本并不相同。

    调试模式下输出结果为:

    java version "1.6.0_16"
    Java(TM) SE Runtime Environment (build 1.6.0_16-b01)
    Java HotSpot(TM) Client VM (build 14.2-b01, mixed mode)

    生产模式下输出结果为:

    java version "1.7.0_51"
    Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
    Java HotSpot(TM) Client VM (build 24.51-b03, mixed mode, sharing)

    所以当出现“dx tool failed: UNEXPECTED TOP-LEVEL ERROR:”错误时,可以尝试在最新版本的 JAVA 运行时环境下编译。