守望者--AIR技术交流

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
热搜: ANE FlasCC 炼金术
查看: 1470|回复: 0

[IOS] XCODE快速开发ANE步骤和一些常见错误的解决

[复制链接]
  • TA的每日心情
    擦汗
    2018-4-10 15:18
  • 签到天数: 447 天

    [LV.9]以坛为家II

    1742

    主题

    2094

    帖子

    13万

    积分

    超级版主

    Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

    威望
    562
    贡献
    29
    金币
    51784
    钢镚
    1422

    开源英雄守望者

    发表于 2015-1-8 15:18:30 | 显示全部楼层 |阅读模式
    本帖最后由 破晓 于 2015-8-7 14:18 编辑

    使用adobe air制作的移动应用,在对接第三方平台的时候,需要使用ANE来包装本机代码,在对接过程中,我积累了一些打包ANE的经验,记录下来,希望对看到的人有些帮助。
    吐槽一下,ANE太难对付了,各种坑,调试也比较麻烦。

    1、安装mac版本的AIR SDK
    下载地址:http://www.adobe.com/devnet/air/air-sdk-download-mac.html

    2、安装xcode的ANE项目模板(好东西~)
    下载地址:https://github.com/divijkumar/xcode-template-ane


    直接  把解压后的AIR Native Extension文件夹  复制到  Xcode 6 下的  /Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/Project Templates   文件夹下


    3、从模板新建项目:


    项目建好了的样子:

    直接点左上角的小三角形编译,报错如下:

    提示不支持的编译器

    解决:我们点击项目属性,选择 LLVM5.13

    继续点编译:

    成功了,生成的库文件是libhello.a

    接下来我们开始生成ane,点击编译目标:

    选择hello.ane

    再点小三角编译,成功(在*.ane上右键选Show in Finder可以定位到这个ane文件):

    如果在项目创建页面没有填写这个个:

    则会提示错误:

    解决方法是,在项目属性里设置这个宏参数,填上swc文件所在的全路径:

    剩下的事情就是增加你自己需要的接口来,在hello.m文件里,可以看到模板示例方法:isSupported,自己写代码可以参照它。

    另外如果需要使用C++和objec混编,则需要项目中至少有一个后缀为mm的源文件,你可以创建一个空mm文件即可。


    在ios本机库,AIR SDK包含了以下系统库:

    如果项目依赖了除了上面列表之外的库,需要打开项目下的那个:platformoptions.xml
    填上依赖的动态库(*.dylib)或者静态库framework(*.framework)
    动态库用-l前缀,framework用-framework前缀

    如果不在上面xml中指定,打包ANE是不会报错的,但是在打包ipa的时候,会报类似下面的错:


    1. <font color="rgb(34, 34, 34)">Undefined symbols for architecture armv7:
    2.   "_crc32", referenced from:
    3.       _PyZlib_crc32 in libpython2.7.a(zlibmodule.o)
    4.   "_inflateEnd", referenced from:
    5.       _Decomp_dealloc in libpython2.7.a(zlibmodule.o)
    6.       _PyZlib_decompress in libpython2.7.a(zlibmodule.o)
    7.       _PyZlib_unflush in libpython2.7.a(zlibmodule.o)
    8.   "_deflateInit_", referenced from:
    9.       _PyZlib_compress in libpython2.7.a(zlibmodule.o)
    10.   "_inflate", referenced from:
    11.       _PyZlib_decompress in libpython2.7.a(zlibmodule.o)
    12.       _PyZlib_objdecompress in libpython2.7.a(zlibmodule.o)
    13.       _PyZlib_unflush in libpython2.7.a(zlibmodule.o)
    14.   "_deflateEnd", referenced from:</font>
    复制代码


    在使用该ANE打包ipa的过程中,如果使用了多个ANE,且里面引用了同一个公用类,会提示重复的符号:

    解决方法是在调用adt打包ipa的时候,增加参数:-hideAneLibSymbols yes


    如果打包ipa的出现错误(找不到___divmodsi4符号):

    1. Packaging: ../hello.ipa
    2. using certificate: hello.p12...

    3. Warning: Resource zh-Hans.lproj has been skipped because of mismatch with suppor
    4. ted languages information in application descriptor.
    5. Undefined symbols for architecture armv7:
    6.   "___divmodsi4", referenced from:
    7.       _absc_solve in D:\\mobile\\wow_mobile\\..\\wow_app\\AOTBuildOutput62399389
    8. 92767853027.tmp\\com.q1.haima.o
    9. ld: symbol(s) not found for architecture armv7
    10. Compilation failed while executing : ld64

    11. APK setup creation FAILED.

    12. Troubleshooting:
    13. - did you build your project in FlashDevelop?
    14. - verify AIR SDK target version in bat\app-haima.xml
    复制代码
    解决方案:
    1、目标系统版本需要高一些,比如5.1或者6.0以上,在platformoptions.xml 文件的linkerOptions指定参数:-ios_version_min,如下:
    1. <platform xmlns="http://ns.adobe.com/air/extension/3.1">
    2.     <sdkVersion>5.0</sdkVersion>
    3.     <description > An optional description</description>
    4.     <copyright>2012 (optional)</copyright>
    5.     <linkerOptions>
    6.         <option>-ios_version_min 5.1</option>
    7.         <option>-framework AdSupport</option>
    8.         <option>-framework AudioToolbox</option>
    9.         <option>-lstdc++.6</option>
    10.     </linkerOptions>
    11. </platform>
    复制代码
    2、如果改sdk版本还不行,则使用下面方案,在.h头文件里增加下面的函数:
    1. unsigned long ___udivmodsi4(unsigned long num, unsigned long den, int modwanted)
    2. {
    3.     if (modwanted)
    4.         return num % den;
    5.     else
    6.         return num / den;
    7. }
    复制代码

    另外,引起APP闪退的可能原因:
    1、调用API函数的参数类型不正确,objc的参数为NSString类型,但是传int类型,在编译时也不会报错,但是在手机运行时会崩溃!!!需要仔细检查是否有该问题

    作者:YoYo,原文地址:http://yoyo.play175.com/p/xcode-ane.html


    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    守望者AIR技术交流社区(www.airmyth.com)
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    
    关闭

    站长推荐上一条 /4 下一条

    QQ|手机版|Archiver|网站地图|小黑屋|守望者 ( 京ICP备14061876号

    GMT+8, 2019-11-15 13:49 , Processed in 0.058417 second(s), 38 queries .

    守望者AIR

    守望者AIR技术交流社区

    本站成立于 2014年12月31日

    快速回复 返回顶部 返回列表