flex ane的使用方法

更新时间:2024-06-16 19:11:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

这几天用air做android项目,发现个功能air实现不了。得用android原生技术,但小弟菜蔬学浅,android原生是搞不懂了,还是AS用着顺手。于是跟度娘求助,然后就发现了ANE这东东,但发现关于ane的中文资料灰常少,度娘上的资料基本都是官方性质的,用词都很官方(神马是上下文环境啊,完全不懂 - -#),后来还是谷哥靠谱,资料稍多点,但都是E文的呃,但这小小的困难怎么能难倒哥呢,要知道,哥电脑上可是装了有道词典的! 于是在走了N多弯路后终于把这玩意弄懂了(不容易啊 - -#)。本着造福后人的思想,小生就把这个东西的玩法用天朝文写下来啦。

OK,先简单说说ANE是啥吧(不想看废话的请跳过这段)。 ANE(AIR Native Extension),就是本机扩展,顾名思 就是对air运行的本机的扩展(还是没听懂?)。好吧,我的理解就是air不能实现的功能,就用ane来实现。比如我要用air来控制电脑的鼠标移动,这个功能貌似air做不到吧,如果能做到,那air就可以用来做病毒了 - -! 显然,adobe不会让你这么做的。 但C语言能完成这功能,于是乎,ANE的作用就出来了——把C和as打包起来,AS调用C来完成AS不能完成的任务。好吧,至于ANE还能干嘛,你们自己慢慢YY,下来我就开始写教程了。

以下教程是用在android手机上的: 首先,在这个教程里要准备的工具: 1、flash cs6

2、flash builder 4.6 (低版本的没用过,不是很清楚); 3、adt打包工具(回复本帖就能下载哟,亲);

4、数字证书(就是用来签证的玩意,可以向adobe申请,也可以自己用flash cs6创建);

OK,东西准备好了吧? let's go!

一、创建jar文件

.jar就是个java文件,android系统原生就是java来写的,所以我们想扩展android 上的air,就得有个jar文件来实现你要的功能。

1、先打开FB(就是flash builder,以后都叫它FB了)。建一个java项目。(文件-新建-其它-java项目| file-new -other-java-java project)。然后,随便给它起个名字,完成。

然后,看看项目目录,应该就是这个:

然后,对着项目点右键(就是对着myExtensonJava点右键),点击属性,再选java构建路径,然后选库路径、再选添加外部jar,再找到flash cs6目录下AIR3.2\\lib\\android\\ 的FlashRuntimeExtensions.jar文件(properties—java built path—library—Add External JARs ——XXX目录下的FlashRuntimeExtensions.jar—打开—OK) 如图:

然后,在项目的src文件下建一个包,包名自定,我这用的是com.three,接着再在这个包

下建3个java类。先看看项目结构各JAVA代码如下:

1、Extension的代码

? ? ? ? ? ? ? ? ?

package com.three; import com.adobe.fre.*;

//Extension这个类是AS与JAVA交互的最基础的入口,其实很简单,也就这么点东西 public class Extension implements FREExtension {

@Override

public FREContext createContext(String arg0) {

?? // new一个新的threeExtensionContext出来; ?? return new threeExtensionContext(); ?? } ??

?? @Override

?? public void dispose() {

?? // 这个销毁资源的方法,暂时没有什么用,空着 ?? ?? } ??

?? @Override

?? public void initialize() {

?? // 初始化方法,暂时用不着,空着先

?? ?? } ?? ?? }

复制代码 2、threeExtensionContext的代码:

?? package com.three; ??

?? import java.util.*; ??

?? import com.adobe.fre.FREContext; ?? import com.adobe.fre.FREFunction; ??

?? public class threeExtensionContext extends FREContext { ??

?? public threeExtensionContext(){ ?? //这个貌似也用不着,空着 ?? } ??

?? @Override

?? public void dispose() { ?? // 空着

?? ?? } ??

?? @Override

?? public Map getFunctions() {

?? // 下面这个比较关键,它的作用是定义as与JAVA具体方法通信的重要接口 ?? Map functionMap=new HashMap(); ?? functionMap.put(\?? return functionMap; ?? } ?? ?? }

复制代码 3,test的代码:

?? package com.three; ??

?? import com.adobe.fre.FREContext; ?? import com.adobe.fre.FREFunction;

?? import com.adobe.fre.FREInvalidObjectException; ?? import com.adobe.fre.FREObject;

?? import com.adobe.fre.FRETypeMismatchException; ?? import com.adobe.fre.FREWrongThreadException;

??

?? public class test implements FREFunction { ??

?? @Override

?? //这个类作用就是 AS调用CALL方法给java传一个FREObject的参数组,然后,java给as返回一个FREObject

?? public FREObject call(FREContext arg0, FREObject[] arg1) { ?? // 定义方法的具体内容 ?? int a=0; //声明一个整形变量a ??

?? FREObject b = null; //声明一个FREObject对象b,待会返回用的; ?? try {

?? a=arg1[0].getAsInt();//读取as传过来的整理参数并赋值给a; ?? } catch (IllegalStateException e) { ?? //不知道是啥 ,FB自己添加的 ?? e.printStackTrace();

?? } catch (FRETypeMismatchException e) { ?? //不知道是啥 ,FB自己添加的 ?? e.printStackTrace();

?? } catch (FREInvalidObjectException e) { ?? //不知道是啥 ,FB自己添加的 ?? e.printStackTrace();

?? } catch (FREWrongThreadException e) { ?? //不知道是啥 ,FB自己添加的 ?? e.printStackTrace(); ?? } ?? ?? ?? ?? try {

?? b=FREObject.newObject(a*100);//调用FREObject的静态方法把a这个整型变量写到b里去; ?? } catch (FREWrongThreadException e) { ?? // //不知道是啥 ,FB自己添加的 ?? e.printStackTrace(); ?? } ?? ?? //

?? return b;//再返回b; ??? } ??? ??? }

复制代码 最后,写完了,没有报错的话,就右键项目,点导出-java-jar文件。

二、创建SWC文件

还是用FB,这次来创建swc库。至于什么是swc,自己去谷哥百度一下吧。

1、用FB,新建一个flex库项目(flex library)。就是 文件-新建-flex库项目。如果找不着,就 文件-新建-其它-flash builder --flex库项目。

4、按F9键打开动作面板 ,输入代码:

??? import com.three.callJava; ??? import flash.events.MouseEvent; ??? var con:callJava=new callJava();

??? btn.addEventListener(MouseEvent.CLICK,onClick); ??? function onClick(e){

??? var cj:callJava=new callJava(); ??? var a:int=int(txt1.text); ??? var b:int=cj.callJavaTest(a); ??? txt2.text=b.toString(); ??? }

复制代码 想要看效果,在Windows下是不行的,必须要连上android手机,然后在AIR 3.2 for android 设置里 部署面板上选上 发布以后在连接的android设置运行程序。当然,签名证书也要填上的哟。另外一点是 ,手机上要安装air。。如果手机不想装air,也可以,同样,在布署面板里 勾选 将air运行时嵌入应用程序。

然后点发布就可以测试效果了。如果发布的时候提示版本错误,那就回到 flex库项目那,把那个myExtensinAs项目的flex库编辑器的 附加的编译器参数里 加上 -swf-version=11

OK,最终运行结果呢,因为是在手机上,不好截图,就不展示了... 大概意思呢就是,屏幕上有两个文本框,在上面那个文本框里输入一个整数,然后点击按钮,

下面那个文本框就会输出上面那个文本框的10倍的整数。

虽然这功能相当简单,而且,根本用不着这么复杂的方法。不过,我这只是一个抛砖引玉的作用,到底ANE能干嘛,有待兄弟们慢慢发掘。

本文来源:https://www.bwwdw.com/article/u803.html

Top