:::: 菜单 ::::

Adobe AIR打包用到外部sdk的ANE时报错

现象:

我们项目需要用到ANE扫二维码的功能,XCode里用ZBarSDK写好之后发布成ane,adt打包成ipa的时候报错如下:

Packaging failed!
Packaging error message:
Compilation failed while executing : ld64
Packaging output:
ld: warning: ignoring file /var/folders/l5/kql7svqx5j93vwg65tj3pt_c0000gn/T/8e0d5504-ffea-41da-a45b-22cfe260a197/libcn.flashj.ane.ios.QRScan.a, file was built for archive which is not the architecture being linked (armv7): /var/folders/l5/kql7svqx5j93vwg65tj3pt_c0000gn/T/8e0d5504-ffea-41da-a45b-22cfe260a197/libcn.flashj.ane.ios.QRScan.a
Undefined symbols for architecture armv7:
“_QRScanExtInitializer”, referenced from:
_g_com_adobe_air_fre_fmap in extensionglue.o
(maybe you meant: _QRScanExtInitializer_name)
“_QRScanExtFinalizer”, referenced from:
_g_com_adobe_air_fre_fmap in extensionglue.o
(maybe you meant: _QRScanExtFinalizer_name)
ld: symbol(s) not found for architecture armv7

起初以为是XCode里项目参数设置的有问题,怀疑“Link Binary With Libraries”中libiconv加得不对,可是仔细检查过没问题,而且所有该要的源文件已经包含在target里了。

最后找到解决方法:

用到外部库开发的ane,都需要创建一个XML文件,在里面设置用到的外部库,就像我这里 platformoptions.xml

并且在adt打包参数中加入-platformoptions platformoptions.xml。dt打包参数中加入-platformoptions platformoptions.xml 就可以了。

顺带,推荐个对iOS写ane有奇效的好工具:XCode-template-ane
这是XCode模板,只要设置好你用来生成ane的接口swc路径和AIR SDK路径,剩下的只是写OC代码,它代替你做adt打包的步骤,一键自动生成ane。

延伸阅读


  1. 我昨天在做一个调用到CoreBluetooth库的ANE时也遇到了这个问题,其实官方文档写的很清楚http://help.adobe.com/zh_CN/air/extensions/WSf268776665d7970d-2e74ffb4130044f3619-7fff.html

  2. 您好,我也出现这问题。文件我也加了。但是还有这样错。我在WIN下打包的。并且拷贝了SDK过来,这是WIN打包命令,
    %adt% -package -target ipa-app-store -provisioning-profile %mpvName% -storetype pkcs12 -keystore %p12Name% -storepass %p12PW% %ipaName% %configXMLName% %swfName% -platformsdk %iosSdkPath% -extdir %extPath%

    还有,XCODE里没有办法自动生成ANE,只会生成.a,请问这个一键生成有什么设置的吗?

    还有下面是platformoptions.xml

    5.0

    -w
    -ios_version_min 4.3

    -framework SystemConfiguration
    -framework QuartzCore
    -framework MobileCoreServices
    -framework CFNetwork

  3. @mu, 一键打包的这个XCode项目模板需要你在创建项目的时候正确设置AIR SDK和你的swc路径的,否则不会正常生成ANE。
    Win下还有这样类似的错的问题我不清楚,建议不要在win下去做。Mac上的一些文件名在Win上是非法的,拷贝也可能造成损坏。
    另外如果是报not found for architecture armv7s的错,还可能是你的ane里调用的某些第三方的链接库不支持armv7s,你需要去更新库文件,或者去掉armv7s架构。

  4. 大神您好,在打包完IOS的ANE使用的时候,出现了*.a are required to have universal IOS libraries.的情况,请问大师遇到过吗?如何解决啊?如果大神有时间的话,希望能够帮小弟一把,多谢啦!我已经弄了好长时间啊= =

  5. 求教大神,我也遇到了这种情况,并且也写了platformoptions.xml文件,请问您最后是怎么解决的啊?