• 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 ‘com.company.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=”http://ns.adobe.com/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。
  • 相关阅读:
    新的一年,来看看大数据与AI的未来展望
    看过上百部片子的这个人教你视频标签算法解析
    让老板虎躯一震的前端技术,KPI杀手
    如何用RSS订阅?
    说说不知道的Golang中参数传递
    我也要谈谈大型网站架构之系列(3)——死了都要说的缓存
    我也要谈谈大型网站架构之系列(2)——纵观历史演变(下)
    我也要谈谈大型网站架构之系列(1)——纵观历史演变(上)
    抛弃NVelocity,来玩玩Razor
    挖一挖C#中那些我们不常用的东西之系列(3)——StackTrace,Trim
  • 原文地址:https://www.cnblogs.com/zhepama/p/3375022.html
Copyright © 2020-2023  润新知