最近在编译flex 程序为ipa 的时候,出现以下的异常:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 24
at adobe.abc.GlobalOptimizer$InputAbc.readCode(GlobalOptimizer.java:1391
)
at adobe.abc.GlobalOptimizer$InputAbc.readBody(GlobalOptimizer.java:682)
at adobe.abc.GlobalOptimizer$InputAbc.readBodies(GlobalOptimizer.java:40
3)
at adobe.abc.LLVMEmitter.generateBitcode(LLVMEmitter.java:331)
at com.adobe.air.ipa.AOTCompiler.convertAbcToLlvmBitcodeImpl(AOTCompiler
.java:512)
at com.adobe.air.ipa.BitcodeGenerator.main(BitcodeGenerator.java:80)
Compilation failed while executing : ADT
这个是用adt 命令行编译为ipa 时出现的异常,但是在模拟器里不会出现,运行都是ok。最后没有办法,我从svn 库里导出一个以前的版本,发现时可以编译的。所以我只能这样去定位问题所在。
有可能出错的地方:
1, 强制类型转换
出错的代码:
var configString:String = ;
var configCount:int = int(
ModelLocator.getInstance().systemConfig.rcuNumber
ModelLocator.getInstance().systemConfig 这个是一个全单例类的对象,类型为object。
真确的代码:
var configString:String = ModelLocator.getInstance().systemConfig.rcuNumber;
var configCount:int = int(configString);
var configCount:int = int(configString);
2, 类的XML 变量的初始化:
错误的代码:
错误的代码:
private var currentSelectItem:XML;
正确的代码:
private var currentSelectItem:XML = new XML();
3 ,还有一些就是, 在Flash builder 里边出现告警的地方,我都该改了过来。
4, Eembed 的慎用, 因为网上有人提出来过。有可能是这个原因。
[Embed(source="assets/gpsA.png")]
private var m_gpsA:Class;
[Embed(source="assets/gpsB.png")]
private var m_gpsB:Class;
private var m_gpsA:Class;
[Embed(source="assets/gpsB.png")]
private var m_gpsB:Class;
所以,我把不使用的这些全部给删掉了。
5, 实在没有办法:, 编译成为 ipa-test-interpreter ,这样是可以编译为ipa,这样就可以在ipad 上运行程序。 什么地方有错误的话,就在那里写日志。
找到问题所在。
最后
com.adobe.air.ipa.BitcodeGenerator.java 这个类没有源代码,也没有办法调试,所以没有确切的定位 问题所在。
希望牛人解决。