创建一个简单ANE 创建简单的web项目
在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工程了)。
我这里创建的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的介绍。
更多阅读
怎么创建自己的YY频道 yy怎么设置接待频道
怎么创建自己的YY频道——简介YY是远程视频、教育、游戏等等平台,下面简单来说下怎么创建自己的YY频道,为初学者做一个简单的示范。怎么创建自己的YY频道——工具/原料YY怎么创建自己的YY频道——打开YY创建yy频道
在Win7创建一个自动关机快捷方式的意义绿色 创建绿色学校的意义
在这篇文章中,主要讲的是在Win7创建一个自动关机快捷方式,而如果你要了解更多系统(不管是什么系统,shutdown命令都是一样的)中shutdown命令(shutdown命令能够实现你电脑绿色系统收藏在何时关机或者重启,多久关机或者重启等功能),那么你可以看
三层交换机S3600 最简单的vlan划分和配置举例 三层交换机划分vlan
三层交换机(S3600)最简单的vlan划分和配置举例三层交换机(S3600)最简单的vlan划分和配置举例一:配置基于端口的VLAN创建vlan2并进入视图system-view[H3C]vlan2#指定VLAN2的描述字符串为ho
教你钩一个超级简单的小提包-巧手坊-品质生活-搜狐社区 巧手学钩鞋
教你钩一个超级简单的小提包钩30针辫子(辫子的多少取决于包的大小)沿辫子两边转圈钩长针,在四个角分别加针。钩四圈,形成包的底
用jsp实现一个简单的购物车web应用系统。 jsp实现简单聊天室
1. 在自己建立的WEB工程中,建立包shopcart.dto,在相应的包中添加类Product.java ,ShopCart.java1./*类Product */2.3.package shopcart.dto;4.5.import java.io.Serializable;6.7.public class Product implements Serializable8.{