flexane的使用方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
这几天用air做android项目,发现个功能air实现不了。
得用android原生技术,但小弟菜蔬学浅,android原生是搞不懂了,还是AS用着顺手。
于是跟度娘求助,然后就发现了ANE这东东,但发现关于ane的中文资料灰常少,度娘上的资料基本都是官方性质的,用词都很官方(神马是上下文环境啊,完全不懂- -#),后来还是谷哥靠谱,资料稍多点,但都是E文的呃,但这小小的困难怎么能难倒哥呢,要知道,哥电脑上可是装了有道词典的!于是在走了N多弯路后终于把这玩意弄懂了(不容易啊- -#)。
本着造福后人的思想,小生就把这个东西的玩法用天朝文写下来啦。
OK,先简单说说ANE是啥吧(不想看废话的请跳过这段)。
ANE(AIR NativeExtension),就是本机扩展,顾名思就是对air运行的本机的扩展(还是没听懂?)。
好吧,我的理解就是air不能实现的功能,就用ane来实现。
比如我要用air来控制电脑的鼠标移动,这个功能貌似air做不到吧,如果能做到,那air就可以用来做病毒了- -!显然,adobe不会让你这么做的。
但C语言能完成这功能,于是乎,ANE的作用就出来了——把C和as打包起来,AS调用C来完成AS不能完成的任务。
好吧,至于ANE还能干嘛,你们自己慢慢YY,下来我就开始写教程了。
以下教程是用在androi d手机上的:
首先,在这个教程里要准备的工具:
1、flash cs6
2、f lash builder 4.6 (低版本的没用过,不是很清楚);
3、adt打包工具(回复本帖就能下载哟,亲);
4、数字证书(就是用来签证的玩意,可以向adobe申请,也可以自己用flash cs6创建);OK,东西准备好了吧?l et's go!
一、创建j ar文件
.jar就是个java文件,android系统原生就是java来写的,所以我们想扩展android 上的air,就得有个jar文件来实现你要的功能。
1、先打开FB(就是flash builde r,以后都叫它FB了)。
建一个java项目。
(文件-新建-其它-java项目| file-new -other-jav a-java project)。
然后,随便给它起个名字,完成。
然后,看看项目目录,应该就是这个:
然后,对着项目点右键(就是对着my ExtensonJava点右键),点击属性,再选java构建路径,然后选库路径、再选添加外部jar,再找到flash c s6目录下AIR3.2\lib\android\ 的Flas hRuntimeExtensi ons.jar文件(prope rties—java buil t path—library—Add External JA Rs ——XXX目录下的Fla shRuntimeExtens ions.jar—打开—OK)
如图:
然后,在项目的src文件下建一个包,包名自定,我这用的是com.th ree,接着再在这个包
下建3个java类。
先看看项目结构
各JAVA代码如下:
1、E xtension的代码
1pac kage com.three;
2import com.ado be.fre.*;
3
4//Ex tension这个类是AS与J AVA交互的最基础的入口,其实很简单,也就这么点东西5pub lic class Exten sion implements FREExtension {
6
7
8@Override
9pu blic FREContext createContext(String arg0) {
10// new一个新的three ExtensionContex t出来;
11return new threeExtension Context();
12}
13
14@Override
15public void dispose() {
16// 这个销毁资源的方法,暂时没有什么用,空着
17
18}
19
20@Override
21publ ic void initial ize() {
22// 初始化方法,暂时用不着,空着先
24}
25
26}
复制代码
2、three ExtensionContex t的代码:
27package c om.three;
28
29impo rt java.util.*;
30
31import com.ad obe.fre.FRECont ext;
32import com.adobe.fre.FREF unction;
33
34publi c class threeEx tensionContextextends FRECont ext { 35
36public t hreeExtensionCo ntext(){
37//这个貌似也用不着,空着
38}
39
40@Ove rride
41public vo id dispose() {
42// 空着
44}
45
46@Over ride
47public Map<String, FREFun ction> getFunct ions() {
48// 下面这个比较关键,它的作用是定义as与JAVA具体方法通信的重要接口
49Map<String,FR EFunction> func tionMap=new Has hMap<String,FRE Function>();
50fu nctionMap.put("test",new test());
51return func tionMap;
52}
53
54}
复制代码
3,test的代码:
55package com.thr ee;
56
57import com.adobe.fre.FREC ontext;
58importcom.adobe.fre.F REFunction;
59imp ort com.adobe.f re.FREInvalidOb jectException;
60import com.adob e.fre.FREObject;
61import com.ad obe.fre.FREType MismatchExcepti on;
62import com.adobe.fre.FREWr ongThreadExcept ion;
64public cl ass test implem ents FREFunctio n {
65
66@Override
67//这个类作用就是AS调用C ALL方法给java传一个FR EObject的参数组,然后,java给as返回一个FREO bject
68public FR EObject call(FR EContext arg0,FREObject[] arg1) {
69// 定义方法的具体内容
70int a=0; //声明一个整形变量a
71
72FREOb ject b = null;//声明一个FREObject对象b,待会返回用的;
73try {
74a=arg1[0].ge tAsInt();//读取as传过来的整理参数并赋值给a;
75} catch (Illega lStateException e) {
76//不知道是啥,FB自己添加的
77 e.print StackTrace();
78} catch (FREType MismatchExcepti on e) {
79//不知道是啥,FB自己添加的
80 e.pri ntStackTrace();
81} catch (FREIn validObjectExce ption e) {
82//不知道是啥,FB自己添加的
83e.printStackTrace();
84} catch (FR EWrongThreadExc eption e) {
85//不知道是啥,FB自己添加的
86e.printStackTrac e();
87}
88
89
90
91try {
92b=FREObject.ne wObject(a*100);//调用FREObject的静态方法把a这个整型变量写到b里去;
93} catch (FRE WrongThreadExce ption e) {
94// //不知道是啥,FB自己添加的
95 e.printStackTr ace();
96}
97
98//
99re turn b;//再返回b;
100}
101
102}
复制代码
最后,写完了,没有报错的话,就右键项目,点导出-java-jar文件。
二、创建SWC文件
还是用FB,这次来创建swc库。
至于什么是swc,自己去谷哥百度一下吧。
1、用FB,新建一个flex库项目(flex library)。
就是文件-新建-flex库项目。
如果找不着,就文件-新建-其它-flash bui lder --flex库项目。
2、写代码:
103pac kage com.three
104{
105import flash.external.Extens ionContext;
106pub lic class callJ ava
107{
108var conte xt:ExtensionCon text;
109public fu nction callJava()
110{
111
112context=E xtensionContext.createExtensio nContext("com.t hree.Extension","");
113
114}
115public function callJ avaTest(value:i nt):int{
116var a:int;
117a=context.call("test",val ue) as int;
118ret urn a;
119}
120}
121}
复制代码
OK,看看项目结构:
看到myExtens ion.swc了木有?右键点击它,然后复制出来,跟刚才那个jar文件放在一起。
然后,复制一个myExtensio n.swc的副本,把它改成my Extension.zip,并解压到当前目录;
二、ext ension.xml 文件
e xtention.xml文件,上面定义了ane运行环境配置等乱七八遭的东西;
1、新建一个文本文件,打开,粘入以下代码
122<extension xml ns="http://ns.a /air/ex tension/2.5">
123<id>com.three.Ex tension</id>
124<v ersionNumber>1</versionNumber>
125<platforms>
126<p latform name="A ndroid-ARM">
127<a pplicationDeplo yment>
128<nativeL ibrary>myExtens ionJava.jar</na tiveLibrary>
129<i nitializer>com.three.Extension</initializer>
130<finalizer>com.three.Extension</finalizer>
131</applicationDepl oyment>
132</platf orm>
133</platform s>
134</extension>
复制代码
然后把这个文本文件改成extension.xml就行了,同样,把它跟jar 和swc放在一起。
四、签证文件(P12)
这个数字签证文件,要申请正式的挺麻烦的,还得花钱,并提供公司相关信息。
不过还好,用flash可以自己创建开发版的。
以下就是自己创建签证文件的过程;
1、打开flash,新建一个air项目(air for deskt op 或是air forand roid 还是air for ios 都可以);
2、文件—AIR 3.2 for XX X配置—签名—创建。
然后自己慢慢填吧,填好了保存出来,跟刚才创建的那一堆东西放在一起。
五、ADT打包
注:此ADT可不是android的那个ADT。
这个ADT只是一个打包工具,文件是adt.jar 。
要使用它,你的电脑上还得安装java运行环境。
这里就不写了,去谷哥百度一下,有很多教程。
这工具回复贴子有下载,下载完后同样把它放到刚才那个文件目录下,现在目录应该是这样子:
然后,在这个文件夹下按着shift键点鼠标右键,在弹出的菜单里选:在此处打开命令窗口。
然后就开始输入指令吧。
这玩意是命令行工具,我就直接把命令粘下来了
java -jar adt.j ar -package -ts a none -storety pe pkcs12 -keys tore a.p12 -sto repass 123 -tar get ane m.ane e xtension.xml -swc myExtension As.swc -platfor m Android-ARM l ibrary.swf myEx tensionJava.jar
这命令其实挺简单的,无非就是打个包嘛....
不过有几个地方要注意。
一个-tsanone ,这个在很多教程里都没有写这句,在你们那不知道,反正在我这如果不写会报一个时间戳的错,因为如果不写,adt打包会连接一个国外的网站获得时间戳,但人家那国外网站不让天朝子民访问,所以报错。
解决方法就是让它别写时间戳,也就是加-tsa none。
要么用fanqiang软件也行。
随意;
我现在是生成了一个叫m.ane的文件了,不知道你们生成没有
OK,现在可以写代码来测试了:
1、用flash cs6 新建一个air fo r android项目;
2、打开文件—actionScri pt设置—库路径—点击(浏览到本机扩展(ANE)文件)—找到我们生成的那个ANE文件
点确定。
3、在flash面板上,点击窗口,然后组件。
打开组件面板,拖两个text Area和一个button 到舞台上。
这两个textAre a分别命名为txt1和txt2button命名为bt n
如图:
4、按F9键打开动作面板,输入代码:
135import com.thre e.callJava;
136imp ort flash.event s.MouseEvent;
137v ar con:callJava=new callJava();
138btn.addEventL istener(MouseEv ent.CLICK,onCli ck);
139function o nClick(e){
140varcj:callJava=new callJava();
141va r a:int=int(txt1.text);
142var b:int=cj.callJava Test(a);
143txt2.t ext=b.toString();
144}
复制代码
想要看效果,在Windows下是不行的,必须要连上android手机,然后在AIR 3.2 forandroid 设置里部署面板上选上发布以后在连接的an droid设置运行程序。
当然,签名证书也要填上的哟。
另外一点是,手机上要安装air。
如果手机不想装air,也可以,同样,在布署面板里勾选将ai r运行时嵌入应用程序。
然后点发布就可以测试效果了。
如果发布的时候提示版本错误,那就回到flex库项目那,把那个myExtensinAs项目的flex库编辑器的附加的编译器参数里加上-swf-version=11
。
OK,最终运行结果呢,因为是在手机上,不好截图,就不展示了...
大概意思呢就是,屏幕上有两个文本框,在上面那个文本框里输入一个整数,然后点击按钮,
下面那个文本框就会输出上面那个文本框的10倍的整数。
虽然这功能相当简单,而且,根本用不着这么复杂的方法。
不过,我这只是一个抛砖引玉的作用,到底ANE能干嘛,有待兄弟们慢慢发掘。
。