Flash Android ANE 打包流程及使用方法

本文内容借鉴:
http://blog.csdn.net/suncle8835/article/details/9186857
http://blog.sina.com.cn/s/blog_5d323f950101d4a4.html
http://blog.csdn.net/u012146107/article/details/15813057

(一)Android本地库编写
1. 从Adobe Flash Builder安装目录下的\sdks\4.6.0\lib\android 提取Android中需要的jar包FlashRuntimeExtensions.jar;
2.自定义Function类,实现FREFunction接口,完成想要进行的操作,这里是完成Toast(Function类可以定义多个,之后都在自定义的Context的getFunctions方法的map中绑定key)
package com.jingjie.anedemo.rewrite;

import android.widget.Toast;

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;

/**
 * 自定义Function类,实现FREFunction接口
 * 
 * @author Geny
 *
 */
public class TestToastFunction implements FREFunction {

	@Override
	public FREObject call(FREContext context, FREObject[] params) {
		// TODO Auto-generated method stub
		FREObject msg = params[0];//从Flash中传过来的值
		FREObject result = null;//将要返回给Flash的值
		try {
			Toast.makeText(context.getActivity(),
					"测试成功,Android本地被调用," + msg.getAsString(), Toast.LENGTH_LONG)
					.show();
			result = FREObject.newObject("这是可返回的值");
		} catch (IllegalStateException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (FRETypeMismatchException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (FREInvalidObjectException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (FREWrongThreadException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return result;
	}

}<pre class="plain" name="code">

 
3.自定义Context类,继承FREContext类,设置一个key,将来在AS类中根据key找到对应的方法
package com.jingjie.anedemo.rewrite;

import java.util.HashMap;
import java.util.Map;

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

/**
 * 自定义Context类,继承FREContext类
 * @author Geny
 *
 */
public class TestContext extends FREContext {

	@Override
	public void dispose() {
		// TODO Auto-generated method stub

	}

	@Override
	public Map<String, FREFunction> getFunctions() {
		// TODO Auto-generated method stub
		HashMap<String, FREFunction> map = new HashMap<String, FREFunction>();
		map.put("testToast", new TestToastFunction());
		//可继续put其他function
		return map;
	}

}<pre class="plain" name="code">

 
4.自定义Extension类,实现FREExtension接口
package com.jingjie.anedemo.rewrite;

import com.adobe.fre.FREContext;
import com.adobe.fre.FREExtension;

/**
 * 自定义Extension类,实现FREExtension接口
 * @author Geny
 *
 */
public class TestExtension implements FREExtension {

	@Override
	public FREContext createContext(String arg0) {
		// TODO Auto-generated method stub
		return new TestContext();
	}

	@Override
	public void dispose() {
		// TODO Auto-generated method stub

	}

	@Override
	public void initialize() {
		// TODO Auto-generated method stub

	}

}<pre class="plain" name="code">

 
5.将编写好的程序打包成jar包,Export - JAR File,右侧配置中的内容可以不选,选择保存位置及文件名,Finish
(二)Flash与Android的交互
1.创建一个Flex库项目,配置选择手机库,Finish
2.在默认包中新建一个extension.xml文件,内容如下:
<extension xmlns="http://ns.adobe.com/air/extension/2.5">
	<id>com.adobe.ane.test</id>
	<versionNumber>1</versionNumber>
	<platforms>
		<platform name="Android-ARM">
			<applicationDeployment>
				<nativeLibrary>Toast.jar</nativeLibrary><!-- 之前导出的jar包 -->
				<!--即为Android本地FREExtension全路径 -->
				<initializer>com.jingjie.anedemo.rewrite.TestExtension</initializer>
				<finalizer>com.jingjie.anedemo.rewrite.TestExtension</finalizer>
			</applicationDeployment>
		</platform>
	</platforms>
</extension><pre class="plain" name="code">

 
3.编写一个AS类Extension,主要作用是创建ExtensionContext与Android的Native代码交互(建议使用单例)
package 
{
	
	import flash.external.ExtensionContext;

	public class Extension
	{
		public static const KEY:String = "testToast";//与java端中Map里的key一致   
		public static const EXTENSION_ID:String = "com.adobe.ane.test";//与extension.xml中的id标签一致 
		private var extContext:ExtensionContext;
		
//		private static var _instance:Extension;
//		
//		public static function getInstance():Extension {
//			if(Extension._instance == null) {
//				Extension._instance = new Extension();
//			}
//			return Extension._instance;
//		}
		
		public function Extension()
		{
			//第二个为参数,会传入java代码中的FREExtension的createContext方法    
			extContext = ExtensionContext.createExtensionContext(EXTENSION_ID,"");
		}
		
		public function hello(name:String):String
		{
			if (extContext) 
			{
				return extContext.call(KEY,name) as String;
			}
			return "call failed";
		}
		
	}
}<pre class="plain" name="code">

 
4.编译得到.swc文件。
到此为止,打包ANE所需要的文件都有啦,接下来开始打包ANE
(三)打包ANE
1.通过(一)(二)步我们能获得三个文件,Toast.jar、extension.xml、ANEToastLibrary.swc,将ANEToastLibrary.swc的后缀名改为.rar解压或直接解压获得library.swf文件,到此为止四个文件准备完全。
2.新建一个文件夹,并在文件夹中新建命名为Android-ARM的文件夹,将ANEToastLibrary.swc和extension.xml放在一级目录中,library.swf和Toast.jar放在Android-ARM中
3.通过命令进入这个目录,并输入adt -package -target ane toast.ane(可随意命名为*.ane) extension.xml -swc *.swc -platform Android-ARM -C Android-ARM . (注意结尾有个" . ",不写的话会报错),打包完毕后会在目录中看到.ane文件,有时候会报swf version版本低,需要在Flex库编译器中附件的编译参数中添加-swf-version 13即可
至此,ANE打包完毕,接下来是ANE的使用方法
(四)ANE的使用
1.创建Flex手机项目,选择Android为目标平台
2.Properties - Flex库构建路径 - 本机扩展,将刚刚打包好的ANE添加进来,并在Flex构建打包 - Google Android - 本机扩展中勾选checkbox,千万记得不是将ANE添加进来就OK了,一定要勾选checkbox,勾选checkbox,重要的事情说三遍,OK,接下来就可以使用啦
3.输入测试数据,测试是否成功
var anetest:Extension = new Extension;
anetest.hello("试试能不能用");<pre class="plain" name="code">
 

OK,到此一个ANE的打包和测试就结束了,有问题可以留言哈,看见就回。

Android本地编写资源地址:http://download.csdn.net/detail/jie_0754/9629087
Flash与Android交互资源地址:http://download.csdn.net/detail/jie_0754/9629096

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值