ANE在ios上的使用流程和问题解决
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ANE在ios上的使⽤流程和问题解决
编写ANE流程:
1. 在xcode⾥编写.a原⽣类库
2. 更改配置⽂件extension.xml, 定义了原⽣程序的扩展接⼝
3. 编写AS替⾝类,⽣成扩展类包.swc,解压再得到library.swf.
通过adt命令⽣成ane⽂件。
4. 通过adt命令⽣成.ane扩展⽂件,在flash应⽤程序⾥调⽤接⼝来实现原⽣类的功能。
bin/adt -package -storetype pkcs12 -keystore selfsigned.p12 -storepass 1234 -target ane ext/InApp.ane extension.xml -swc ANE_IAP_ASLib.swc -platform iPhone-ARM library.swf libAppPurchase.a
签名⽂件selfsigned.p12可以通过Flash CS5⽣成,在AIR的Android选项卡中选择创建。
不签名⽣成的话,在Win7的FB4.6中调⽤会报“未签名”的错误。
但在Mac的FB4.6 中使⽤
时,未签名并不会报错误。
为了通⽤的话,还是签名⼀下⽐较好。
5. 可以在FB4.6中设置ADT扩展直接⽣成ipa.
也可以先⽤swc或ane( 附加编译器哭路径)⽣成应⽤程序SWF⽂件,再通过ADT命令来⽣成ipa.
bin/adt -package -target ipa-test-interpreter -provisioning-profile ghostbride_dev.mobileprovision -storetype pkcs12 -keystore jameslidevelopment.p12 -storepass 1234 Main.ipa info-app.xml ANE_IAP_Example.swf -extdir ext icon
问题解决:
1。
⽣成ANE时报错:
Invalid swc file. The extension NameSpace requires the SWF version to be 13 or lower.
解决1:附加的编译器参数: -locale en_US -swf-version=13 但这种做法可能会导致错误3
解决2:把Air的extension namespace改成对应的版本就可以(这个例⼦原本默认是2.6, 改为3.1就能解决)
参见Air对应的SWF版本:
SWF 11 for AIR 2.7, SWF 13 for AIR 3, and SWF 14 for AIR 3.1.
2。
.a⽂件名不能有_(下划线),否则打包ANE会报错:
error 105: extension….nativeLibrary contains an invalid value.
3. 打包ipa出错:
Included native extension ‘pany.xxx’ includes a SWF version 13 which is greater than the version of the root SWF of this application: 11
可以按照报错信息所说,把swc的Lib库重新打包成-swf-version=11再发布ANE就⾏了。
或者把应⽤SWF⽂件发布成对应的版本(CS5.5只能发布到11了)
4. FB4.6编译时不认platform的这个参数<option>-ios_version_min 4.0</option>
解决:在项⽬设置中指定IOS5的SDK路径
5。
FB4.6编译卡在57%的问题
这个可能是AIR版本或是IOS版本不⼀致的错误,或者哪个编译参数写的不对或其他,FB中不会看到错误,只能拿命令⾏去编译,查看报错信息。
这种情况下,虽然命令⾏编译
可以成功打包ipa,⼀般情况下都是不能⽤的版本。
所以⽤命令⾏排查了错误,再拿FB打包,⼀般就OK了。
6。
报错 Main-app.xml: error 117: This target requires at least namespace 3.0 to package native extensions.
很显然的错误,把这个⽂件版本改⾼了就好
<application xmlns=”/air/application/3.0″>
7。
装到⼿机上就崩溃跳出的问题
Xcode的Skip Install参数要选择NO 检查⼀下! 这个参数真是很讨厌啊!
8.Missing implementation for platform: Android-ARM
没写完结尾是:"......-C Android-ARM .”我少了" ."汗。
注意:
1. example-app.xml ⼀定要写对应 extensionID 不写extensionID打包成功不会报错,但测试ipa时ANE的部分没有反应。
所以ANE没有反应时,⾸先就要先检查这个参数。
还有创建swc时,ExtensionContext.createExtensionContext()这⾥的参数也要跟extensionID对应好,不然ANE也会没反应,尤其是更改extensionID时不要忘了。
2。
⽤ADT命令编译ipa时指定SDK版本:
-platformsdk /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/
不指定默认为4.0,有⼀些5.0的功能没办法⽤
参考External SDK:
3。
这篇20条建议写的不错,很多情况都遇到了
有james.li的翻译版本,不过第18条他漏了⼀块,可以参考英⽂版本
4。
关于enable linking with shared libraries 这个选项,假设你在Air⾥指定了SDK路径,或者没有⽤到额外的类库,那么设为YES或NO都⽆所谓了。
5。
使⽤Flash CS5.5作为Compiler编译SWF,在Flash CS5.5的发布设置中选择Flash Player,并在发布的时候忽略这个错误: VerifyError: Error #1014: Class flash.external::ExtensionContext could not be found。
直接使⽤⽣成的SWF即可。
6. 写个.sh脚本来执⾏命令⾏,先⽤chmod +x run.sh 赋给⽂件可执⾏权限。
7.补充⼀下,发现swc发布成低版本并不影响Air 3.1域的使⽤,所以遇到上⾯的问题3时可以把Lib库打包成适应CS5.5的版本,也就是flash player 11。