创建一个简单ANE 创建简单的web项目

在这里记录一下创建一个简单功能的ANE的操作步骤。在这里将创建一个可以在AIR as里调用的log方法。调用后,可以将日志信息打印到android底层的日志系统。就是可以用adblogcat命令查看。(关于android里的api和功能,ane内部的详细结构。本文暂不详细提及,请关注我的后续文章 ^_^)一个ANE通常包括两个部分。AS部分和底层代码(专业的叫本地代码)部分,本文中的本地代码就是java(严格来说,其实还包括一个配置文件,叫做拓展描述符文件extention.xml,文件名可以取别的,打包命令中注意就是了)。1、AS部分代码的创建我这里用的开发工具是fb4.7。创建一个flex库项目。我为这个项目命名为ANE_log。一些文章里说,这里要注意钩上 包括air库。其实,可以不钩上的。理论上来说,ane不需要air库里的api,你也可以自己试试不钩上。
在src里创建包和类。我的代码如下。package randy.util.log{import flash.external.ExtensionContext;public class LogUtil{private static var _extensionContext:ExtensionContext =null;private static const EXTENSION_ID:String ="randyUtilLog";private static const LOG_FUNCTION:String = "fn_log";public static const DEBUG: String = "debug";public static const VERBOSE:String = "verbose";public static const INFO: String = "info";public static const WARN: String = "warn";public static const ERROR: String = "error";public static function log(msg:String,level:String =LogUtil.INFO,tag:String = "AIR应用"):void{if(! _extensionContext){_extensionContext =ExtensionContext.createExtensionContext(EXTENSION_ID,null);}_extensionContext.call(LOG_FUNCTION,msg,level,tag);}}}这里只是一个简单的功能的实现。真正的要用于产品中,还是要适当的加上初始化完毕的回调方法等操作(具体内容见后续文章)。2、java部分代码的编写创建一个android工程(其实创建一个普通java工程就行,只要最后可以打包成jar,只是我这里要用到android的api所以我只能创建成android工程了)。


创建一个简单ANE 创建简单的web项目
我这里创建的android工程。也叫ANE_log,你可以和我不一样。这里要注意的两点,1,注意钩上Mark this project as alibrary。这样,IDE会自动为我们打成jar包,我们后面就要这个jar。2,注意引入jar包FlashRuntimeExtensions.jar。在FB下面有,具体地址是{FB目录}sdks4.6.0libandroidFlashRuntimeExtensions.jar以下是我项目中的代码结构
三个类文件内容分别如下:LogExtension内容package randy.util.log;
import com.adobe.fre.FREContext;import com.adobe.fre.FREExtension;public class LogExtension implements FREExtension {private LogContext logContext = null; public FREContextcreateContext(String arg0) { if(logContext ==null){ logContext = new LogContext(); } return logContext; } public void dispose(){} public void initialize(){}}============================LogContext内容:package randy.util.log;
import java.util.HashMap;import java.util.Map;import com.adobe.fre.FREContext;import com.adobe.fre.FREFunction;public class LogContext extends FREContext { private staticMap<String, FREFunction> functions =null; @Override public void dispose(){} @Override publicMap<String, FREFunction>getFunctions() { if(functions ==null){ functions = newHashMap<String, FREFunction>(); functions.put(LogFunction.FUNCTION_KEY, new LogFunction()); } return functions; }}===========================================LogFunction内容:package randy.util.log;
import android.util.Log;
import com.adobe.fre.FREContext;import com.adobe.fre.FREFunction;import com.adobe.fre.FREObject;public class LogFunction implements FREFunction {public static final String FUNCTION_KEY = "fn_log"; public FREObjectcall(FREContext arg0, FREObject[] arg1) { try{ String msg = arg1[0].getAsString(); String level = arg1[1].getAsString(); String tag = arg1[2].getAsString(); if("debug".equals(level)){ Log.d(tag, msg); }elseif("verbose".equals(level)){ Log.v(tag, msg); }elseif("info".equals(level)){ Log.i(tag, msg); }elseif("warn".equals(level)){ Log.w(tag, msg); }elseif("error".equals(level)){ Log.e(tag, msg); } }catch (Exception e) { } return null; }}
3,打包ANE代码过程全已经完毕了。现在我们进入打包阶段随便在你的硬盘上哪个位置创建一个log目录(我直接是在C盘下建的),内部结构如下。
其中还有一个Android-ARM子目录。ANE_log.swc就是as部分代码创建的FLEX库项目生成的。子目录中,aneLog.jar(我的android工程原来生成的jar名为ane_log.jar,因为在extension.xml中,文本节点不能有下划下"_",所以我改了个名。包括上面的id值也只是采用跎峰形式的命名),可以在你的android项目中有一个bin目录,里面有一个jar包,就是他啦。至于catalog.xml和library.swf,你把上层目录中的ANE_log.swc拷进来。改成zip拓展名,解压就得到这两个文件。最后一个就是extension.xml了。xml内容如下:<?xml version="1.0"encoding="UTF-8"?><extensionxmlns="http://ns.adobe.com/air/extension/3.4"><id>randyUtilLog</id><versionNumber>1</versionNumber><platforms> <platformname="Android-ARM"> <applicationDeployment> <nativeLibrary>aneLog.jar</nativeLibrary> <initializer>randy.util.log.LogExtension</initializer> </applicationDeployment> </platform></platforms></extension>现有我们用这个命令来打包。adt -package -target ane log.ane extension.xml -swc *.swc-platform Android-ARM -C Android-ARM .这个adt就在你的FB下的SDK里的bin中。你可以将这个目录加到你的path里,或者命令中带上完整的路径。OK了,我得到我的ANE了,log.ane。4、使用ANE现在我要创建一个ActionScript手机项目来使用一下我刚才创建的ANE了。
创建项目一直点下一步,到最后一步的时候,注意点到本地拓展选项卡,增加刚才创建的ANE。钩上 更新AIR应用程序描述符。IDE将会自动为你在应用程序描述符最后加上类似这样的ANE使用声明。
不过。IDE引用ANE,也不是完全智能的。现在我引用的是log.ane。可能我下次修改ANE程序内容了,打成成log_v2.ane再改成引入log_v2.ane,有可能编译air程序的时候会报错,说找不到java类。可以自己手动进.actionScriptProperties。搜索比如log.ane。修改成现在的名字log_v2.ane。发现IDE没有及时更新到这个.actionScriptProperties文件才导致这个问题的。我的测试的AIR工程的主类内容如下package{import flash.display.Sprite;import flash.display.StageAlign;import flash.display.StageScaleMode;import flash.events.MouseEvent;import randy.util.log.LogUtil;public class TestLogAne extends Sprite{public function TestLogAne(){super();stage.align = StageAlign.TOP_LEFT;stage.scaleMode = StageScaleMode.NO_SCALE;stage.addEventListener(MouseEvent.CLICK,function(mouseEvent:MouseEvent):void{LogUtil.log("打印一条VERBOSE日志",LogUtil.VERBOSE);LogUtil.log("打印一条INFO日志",LogUtil.INFO);LogUtil.log("打印一条DEBUG日志",LogUtil.DEBUG);LogUtil.log("打印一条WARN日志",LogUtil.WARN);LogUtil.log("打印一条ERROR日志",LogUtil.ERROR);});}}}OK,打包安装(和普通air程序打包一样了)。运行起来。在白色的屏幕上随意点一下logcat看到日志啦。
只是信息内容不完整。暂告一段落。
敬请等待我的下一篇文章。关于ANE内部结构和相应api的介绍。

  

爱华网本文地址 » http://www.aihuau.com/a/25101015/270356.html

更多阅读

怎么创建自己的YY频道 yy怎么设置接待频道

怎么创建自己的YY频道——简介YY是远程视频、教育、游戏等等平台,下面简单来说下怎么创建自己的YY频道,为初学者做一个简单的示范。怎么创建自己的YY频道——工具/原料YY怎么创建自己的YY频道——打开YY创建yy频道

声明:《创建一个简单ANE 创建简单的web项目》为网友明天你好分享!如侵犯到您的合法权益请联系我们删除