课程咨询 :18487146383     QQ:570023382

长沙ios培训 > 达内新闻 > 给iOS开发AIR原生扩展建议(上)
  • 给iOS开发AIR原生扩展建议(上)

    发布:长沙ios培训      来源:达内新闻      时间:2016-03-10

  • 长沙ios培训好文章分享时刻,据说这是一篇外文翻译而来的文章,请珍惜!

    这篇文章写得非常好,基本包括了目前ANE开发需要的所有注意事项,感谢作者Richard Lord。文中我会以作者的口吻来翻译。

    过去的三个月中我为iOS平台创建了三个AIR Native Extension的扩展(在Github中可以找到代码),这些扩展全部被用在我们的游戏Stick Cricket Super Sixes中,同时我们也总结了很多经验。虽然我记得并不全面,但下面这几条建议,可以给很多打算开发ANE项目的开发者助以一臂之力。

    1. 开始

    这两篇文档对初学者很有帮助,如果你不知道该如何起步,可以从阅读这两篇文档开始。在网络上也有很多好的文章,只要Google一下就行了。

    • Extending Adobe Air

    • AIR Native Extension Example: iBattery for iOS

    2. 阅读Adobe官方文档

    大部分的开发所需的资料在这篇 Adobe’s documentation 中都可以找得到。

    编写Actionscript代码

    3. 认真编写 Actionscript API

    确保你的Actionscript接口是你的项目中想要的。不要往Actionscript里被动地照搬iOS接口,要像编写常规Actioscript类那样定义你的接口。

    记住,后期如果修改原生代码只会影响到ANE扩展本身,但如果修改Actionscript接口则会影响到所有使用该ANE的项目。所以在前期要尽可能完善地定义你的Actionscript接口。

    4. 尽可能在Actionscript一端做错误检查

    为了避免错误的发生,你需要在调用ANE方法的时候做参数合法性的检查,你可以等到调用原生代码时再做检查,但如果提前在调用Actionscript接 口的时候就做检查会更简单一些。如果你能保证每次调用原生代码时都不会出错,比如参数个数和参数类型,那么完全可以只在Actionscript里做判 断。

    当然,如果你习惯于在C里写错误检查,当然可以。我个人更喜欢在Actionscript里做这件事情。

    5. 创建一个原生类的替身

    即使你打算仅为iOS写扩展,我也建议你创建一个原生类库的替身。用纯Actionscript代码创建这个替身,这样它就可以为所有的平台所用。在这个 替身里按照iOS原生接口定义一套纯Actionscript接口方法,即使在调用的时候抛异常或者返回空值也没有关系,至少它是合法的 Actionscript调用,而且可以在其他平台比如桌面上测试使用。

    如果不用这样一个替身,你就每次只能在iOS设备上做测试,这样会让开发测试工作极为痛苦。相反,如果使用这个替身,你可以在桌面上快速发布应用来测试那些与设备不相关的功能和模块。

    6. 使用Objective-C来实现苹果的程序接口

    你并不是必须要使用Objective-C,但是如果想要实现苹果的程序接口,用Objective-C会很方便。否则你需要用C或者C++。

    7. 把为AIR编写的接口方法写在.m文件里

    AIR和原生代码之间的接口是用C写的,所以你的原生代码需要引用一个包含C代码的文件来实现这些接口。如果你把接口放在.c文件中,那么你不能使用任何 Objective-C功能(比如你无法用objective-c的语法去调用objective-c接口),但是如果你把接口放在了.m文件就可以。所 以用.m文件会更方便一些。

    8. 包含AIR原生接口的.m文件不需要.h头文件

    但是你需要在XCode项目设置中的警告选项里把”missing function prototypes”这一项给关掉。

    9. 为initializer和finalizer方法起一个独一无二的名字

    很多ANE的例子都使用了”extInitializer”和”extFinalizer”来给扩展的入口和出口函数命名。但如果在项目中使用多个ANE扩展,这样会导致命名冲突。所以给入口和出口函数起一个独一无二的名字。

    10. 在项目中使用宏

    在定义接口的时候,你可能需要重复输入很多遍类似这样的代码来定义函数

    Objective-C

    FREObject someFunction(FREContext context, void* functionData, uint32_t argc, FREObject argv[])

    1

    FREObject someFunction(FREContext context, void* functionData, uint32_t argc, FREObject argv[])

    我建议使用宏定义来代替所有这些重复的定义方式。你可以在这个源文件中找到宏定义的例子。(感谢David Wagner的提供)

    推荐文章

上一篇:为何本地化测试如此重要

下一篇:给iOS开发AIR原生扩展建议(下)

最新开班日期  |  更多

3G-IOS软件工程师就业班

3G-IOS软件工程师就业班

开班日期:11/30

3G-IOS软件工程师就业班

3G-IOS软件工程师就业班

开班日期:11/30

3G-IOS软件工程师全日制班

3G-IOS软件工程师全日制班

开班日期:11/30

3G-IOS软件工程师周末班

3G-IOS软件工程师周末班

开班日期:11/30

  • 网址:http:/cs.ios.tedu.cn     地址:长沙市芙蓉中路一段479号建鸿达现代城27楼
  • 课程培训电话:18487146383     QQ:570023382     全国服务监督电话:400-827-0010
  • 服务邮箱 ts@tedu.cn
  • 2001-2016 达内国际公司(TARENA INTERNATIONAL,INC.) 版权所有 京ICP证08000853号-56