尝试用as3做移动端开发,发现好多功能都实现不了,然后发现adobe提供了方法:ane(AdobeAir的本地扩展)。
从天地会下载了好多打包好的ane,尝试了无数次,都不成功,真的感觉都要放弃了。断断续续的试了好几个星期,总算成功了。所以记录一下。
参考文章:
制作ane参考的下面这篇文章:
http://bbs.9ria.com/forum.php?mod=viewthread&tid=418251&highlight=ane
完全按照文章写的来做,结果就是不成功。
后来参考了下面这篇文章:
http://bbs.9ria.com/thread-156257-1-1.html
试了好多次,终于成功了。
对比一下,两篇文章有什么不同,发现:
1、java里边继承FREFunction的类里边写的不一样:
1)第一篇文章是用的“Toast.makeText(arg0.getActivity(), "调用了 MyFun 的 call", Toast.LENGTH_SHORT).show();”,不懂java,但是后来看效果是弹出一条提示"调用了 MyFun 的 call",然后会自动消失。第二篇文章用的是,as调用的时候传参,然后返回值(其实初次测试,连传参最好都省了,直接返回值,出错的几率会降低);
2)extension.xml中id不一样,第一篇用的是“包名”,第二篇用的是“包名”+“类名”;
3)swc里边定义ExtensionContext的方式不一样,第一篇是静态变量,第二篇是成员变量(其实我一直不知道什么是成员变量);
4)打包的方式不一样。
成功后个人总结:
1)建议用返回值的方式,可以在flash里边显示返回值,这个我们比较熟悉。具体怎么返回,参考第二篇文章。
2)extension.xml中的id,只要保证和你ExtensionContext.createExtensionContext函数里边第一个参数一样就行。
3)swc里边定义ExtensionContext不建议用静态变量,官方说是用到的时候在创建,否则会占用资源,其实我倒不在乎,只是静态变量创建的比较早,容易看不到效果,比如你用第一篇文章的方法,就可能界面出现的时候,效果已经结束了。
4)两种打包方式都可以。
调试的时候,可能会报错“Error: Requested extension com.hanyeah is not supported for Windows-x86.”如果是这个错误,其实已经成功了,发布,然后放到手机上看效果就可以了。如此看来用ane调试起来确实很麻烦,连用trace调试的的机会都没有。
========================================================
成功之后,再来看一看怎么用。
as调用ane,传参数,接收返回值已经成功了。
ane貌似不能调用as,ane要调用as,可以通过事件,ane里边context调用dispatchStatusEventAsync,发送事件,可以填写两个参数,as里边通过侦听status事件来接收,传递的两个参数是code和level,可以是任意字符串。(测试成功)
而且ane和as之间还可以共享对象,actionScriptData,as里边和ane里边都可以访问(可读写)。
这样双向通信就都没有问题了。
java里边context的api看这里:http://help.adobe.com/zh_CN/air/extensions/WS39e706a46ad531be-fd70de2132a8f3874e-8000.html
========================================================
ane还是可用的,第一次用比较麻烦,一次成功,之后就简单多了。只是没法调试确实是个比较麻烦的问题。
关于调试:
如果用flash builder,可以参考一下:
http://tmtbe.blog.163.com/blog/static/3965819420144128244510/
如果和作者一样用flash pro,好好看一下这个,写的很好,顺便解决“Error: Requested extension com.hanyeah is not supported for Windows-x86.”的问题:
http://www.tuicool.com/articles/NJbeqe
第二篇参考文章中的sample是可以直接用的,可以先下载试一试。去下载实例
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。