守望者--AIR技术交流

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
热搜: ANE FlasCC 炼金术
查看: 2294|回复: 0
打印 上一主题 下一主题

[Android] AIR ANE巨详细教程。啥?什么是ANE? 你OUT了

[复制链接]
  • TA的每日心情
    擦汗
    2018-4-10 15:18
  • 签到天数: 447 天

    [LV.9]以坛为家II

    1742

    主题

    2094

    帖子

    13万

    积分

    超级版主

    Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

    威望
    562
    贡献
    29
    金币
    52903
    钢镚
    1422

    开源英雄守望者

    跳转到指定楼层
    楼主
    发表于 2014-12-29 20:50:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
           这几天用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的代码

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

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


    5. @Override
    6. public FREContext createContext(String arg0) {
    7. // new一个新的threeExtensionContext出来;
    8. return new threeExtensionContext();
    9. }

    10. @Override
    11. public void dispose() {
    12. // 这个销毁资源的方法,暂时没有什么用,空着

    13. }

    14. @Override
    15. public void initialize() {
    16. // 初始化方法,暂时用不着,空着先

    17. }

    18. }
    复制代码
    2、threeExtensionContext的代码:
    1. package com.three;

    2. import java.util.*;

    3. import com.adobe.fre.FREContext;
    4. import com.adobe.fre.FREFunction;

    5. public class threeExtensionContext extends FREContext {

    6. public threeExtensionContext(){
    7. //这个貌似也用不着,空着
    8. }

    9. @Override
    10. public void dispose() {
    11. // 空着

    12. }

    13. @Override
    14. public Map<String, FREFunction> getFunctions() {
    15. // 下面这个比较关键,它的作用是定义as与JAVA具体方法通信的重要接口
    16. Map<String,FREFunction> functionMap=new HashMap<String,FREFunction>();
    17. functionMap.put("test",new test());
    18. return functionMap;
    19. }

    20. }
    复制代码
    3,test的代码:
    1. package com.three;

    2. import com.adobe.fre.FREContext;
    3. import com.adobe.fre.FREFunction;
    4. import com.adobe.fre.FREInvalidObjectException;
    5. import com.adobe.fre.FREObject;
    6. import com.adobe.fre.FRETypeMismatchException;
    7. import com.adobe.fre.FREWrongThreadException;

    8. public class test implements FREFunction {

    9. @Override
    10. //这个类作用就是 AS调用CALL方法给java传一个FREObject的参数组,然后,java给as返回一个FREObject
    11. public FREObject call(FREContext arg0, FREObject[] arg1) {
    12. // 定义方法的具体内容
    13. int a=0; //声明一个整形变量a

    14. FREObject b = null; //声明一个FREObject对象b,待会返回用的;
    15. try {
    16. a=arg1[0].getAsInt();//读取as传过来的整理参数并赋值给a;
    17. } catch (IllegalStateException e) {
    18. //不知道是啥 ,FB自己添加的
    19. e.printStackTrace();
    20. } catch (FRETypeMismatchException e) {
    21. //不知道是啥 ,FB自己添加的
    22. e.printStackTrace();
    23. } catch (FREInvalidObjectException e) {
    24. //不知道是啥 ,FB自己添加的
    25. e.printStackTrace();
    26. } catch (FREWrongThreadException e) {
    27. //不知道是啥 ,FB自己添加的
    28. e.printStackTrace();
    29. }



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

    36. //
    37. return b;//再返回b;
    38. }

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



    二、创建SWC文件

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

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






    2、写代码:
    1. package com.three
    2. {
    3. import flash.external.ExtensionContext;
    4. public class callJava
    5. {
    6. var context:ExtensionContext;
    7. public function callJava()
    8. {

    9. context=ExtensionContext.createExtensionContext("com.three.Extension","");

    10. }
    11. public function callJavaTest(value:int):int{
    12. var a:int;
    13. a=context.call("test",value) as int;
    14. return a;
    15. }
    16. }
    17. }
    复制代码
    OK,看看项目结构:



    看到myExtension.swc了木有?   右键点击它,然后复制出来,跟刚才那个jar文件放在一起。
    然后,复制一个myExtension.swc的副本,把它改成myExtension.zip,并解压到当前目录;

    二、extension.xml 文件
    extention.xml文件,上面定义了ane运行环境配置等乱七八遭的东西;
    1、新建 一个文本文件,打开,粘入以下代码

    1. <extension xmlns="http://ns.adobe.com/air/extension/2.5">
    2. <id>com.three.Extension</id>
    3. <versionNumber>1</versionNumber>
    4. <platforms>
    5. <platform name="Android-ARM">
    6. <applicationDeployment>
    7. <nativeLibrary>myExtensionJava.jar</nativeLibrary>
    8. <initializer>com.three.Extension</initializer>
    9. <finalizer>com.three.Extension</finalizer>
    10. </applicationDeployment>
    11. </platform>
    12. </platforms>
    13. </extension>
    复制代码
    然后把这个文本文件改成extension.xml就行了,同样,把它跟jar 和swc放在一起。



    四、签证 文件(P12)
       这个数字签证文件,要申请正式的挺麻烦的,还得花钱,并提供公司相关信息。不过还好,用flash可以自己创建开发版的。以下就是自己创建签证文件的过程;
    1、打开flash,新建一个air项目(air for desktop 或是air forandroid 还是 air for ios 都可以);
    2、文件—AIR 3.2 for XXX配置—签名—创建。。然后自己慢慢填吧,填好了保存出来,跟刚才创建的那一堆东西放在一起。



    五、ADT打包
       注:此ADT可不是android的那个ADT。 这个ADT只是一个打包工具,文件是 adt.jar 。要使用它,你的电脑上还得安装java运行环境。这里就不写了,去谷哥百度一下,有很多教程。
    这工具回复贴子有下载,下载完后同样把它放到刚才那个文件目录下,现在目录应该是这样子:






    然后,在这个文件夹下按着shift键点鼠标右键,在弹出的菜单里选 : 在此处打开命令窗口 。





    然后就开始输入指令吧。这玩意是命令行工具,我就直接把命令粘下来了
    java -jar adt.jar -package -tsa none -storetype pkcs12 -keystore a.p12 -storepass 123 -target ane m.ane extension.xml  -swc myExtensionAs.swc -platform Android-ARM library.swf myExtensionJava.jar

    这命令其实挺简单的,无非就是打个包嘛....
    不过有几个地方要注意。一个  -tsa none   ,这个在很多教程里都没有写这句,在你们那不知道,反正在我这如果不写会报一个时间戳的错,因为如果不写,adt打包会连接一个国外的网站获得时间戳,但人家那国外网站不让天朝子民访问,所以报错。解决方法就是让它别写时间 戳,也就是加 -tsa none。  要么用fanqiang软件也行。随意;


    我现在是生成了一个叫m.ane的文件了,不知道你们生成没有

    OK,现在可以写代码来测试了:

    1、用flash cs6 新建一个air for android项目;
    2、打开文件—actionScript设置—库路径—点击(浏览到本机扩展(ANE)文件)—找到我们生成的那个ANE文件






    点确定。

    3、在flash面板上,点击 窗口,然后 组件。打开组件面板,拖两个textArea和一个button 到舞台上。 这两个textArea分别命名为txt1和txt2   button命名为 btn
    如图:






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



    1. import com.three.callJava;
    2. import flash.events.MouseEvent;
    3. var con:callJava=new callJava();
    4. btn.addEventListener(MouseEvent.CLICK,onClick);
    5. function onClick(e){
    6. var cj:callJava=new callJava();
    7. var a:int=int(txt1.text);
    8. var b:int=cj.callJavaTest(a);
    9. txt2.text=b.toString();
    10. }
    复制代码
    想要看效果,在Windows下是不行的,必须要连上android手机,然后在AIR 3.2 for android 设置里 部署面板上选上 发布以后在连接的android设置运行程序。当然,签名证书也要填上的哟。另外一点是 ,手机上要安装air。。如果手机不想装air,也可以,同样,在布署面板里 勾选 将air运行时嵌入应用程序。

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






    OK,最终运行结果呢,因为是在手机上,不好截图,就不展示了...
    大概意思呢就是,屏幕上有两个文本框,在上面那个文本框里输入一个整数,然后点击按钮,下面那个文本框就会输出上面那个文本框的10倍的整数。
       虽然这功能相当简单,而且,根本用不着这么复杂的方法。不过,我这只是一个抛砖引玉的作用,到底ANE能干嘛,有待兄弟们慢慢发掘。

       最后我把要用到的东西打一下包,顺便工程也打一下吧.





    本文来自:http://bbs.9ria.com/thread-156257-1-1.html

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
    收藏收藏 分享分享 支持支持 反对反对 微信
    守望者AIR技术交流社区(www.airmyth.com)
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    
    关闭

    站长推荐上一条 /4 下一条

    QQ|手机版|Archiver|网站地图|小黑屋|守望者 ( 京ICP备14061876号

    GMT+8, 2026-1-25 11:08 , Processed in 0.044983 second(s), 31 queries .

    守望者AIR

    守望者AIR技术交流社区

    本站成立于 2014年12月31日

    快速回复 返回顶部 返回列表