ANE 在 Android 上的应用
来源:互联网 发布:交换查看mac地址命令 编辑:程序博客网 时间:2024/05/16 17:06
概述
Adobe Air是利用Adobe公司的Flash技术开发的媒体播放平台。而Native Extension就是让AIR可以调用各个平台上的本地代码(native code, 如ios上的object-c,android上的java,desktop上的c++,c#等),从而完成对AIR中Actionscript API的自定义扩展。即可以让开发者通过编写基于平台的本地代码扩展ActionScript。从而完成一些原有Actionscript无法完成的功能。
Native Extension结构及原理
一个NativeExtension项目主要有两个部分组成:As 端的库项目和底层代码的实现项目。
下图是Android 上整个NativeExtension项目的体系结构。
AS库项目部分
ExtensionContext是其核心类,负责与Java代码的交互。ExtensionContext需要调用createExtensionContext方法创建和初始化Java端的本地代码。而是用call方法可以调用具体的Java代码并获得返回结果。同时Extension还会接受从java代码抛出的事件。
本地java项目部分
关键类 FREContext
关键接口 FREExtension、FREFunction
FREExtension是java端自定义代码的入口,需要重写createContext方法从而获得本地代码的上下文,即自己扩展的FREContext子类。
FREFunction是本地方法的具体实现,实例化后以键值对的形式存入FREContext,从而在AS端的ExtensionContext中调用的call方法中传入对应键值调起本地方法。
开发流程
项目分成三部分:Android项目,Flex Library库项目和Flex Mobile项目
Android项目
1、在Eclipse中新建Android项目,不必勾选创建Activity
2、将项目的类型设为Library型
properties -> Android -> 勾选 Is Libirary
3、导入Ane android jar包(FlashRuntimeExtensions.jar)
4、添加java本地实现
- public class SkyExtension implements FREExtension{
- @Override
- public FREContext createContext(String pType) {
- return new SkyContext();
- }
- @Override
- public void dispose() {}
- @Override
- public void initialize() {}
- }
- public class SkyContext extends FREContext{
- @Override
- public void dispose() {}
- @Override
- public Map<String, FREFunction> getFunctions() {
- HashMap<String, FREFunction> map = new HashMap<String, FREFunction>();
- map.put("keyA", new TestToastFunction());
- //可继续put其他function
- return map;
- }
- }
- public class TestToastFunction implements FREFunction{
- @Override
- public FREObject call(FREContext context, FREObject[] params) {
- Toast.makeText(context.getActivity(), "测试成功:android本地被调用", Toast.LENGTH_LONG).show();
- FREObject result=null;
- try {
- result = FREObject.newObject("这是可返回的值");
- } catch (Exception e) {
- e.printStackTrace();
- }
- return result;
- }
- }
Flex Library库项目
1、新建Flex Library项目,注意指定AIR3的SDK,并且勾选“包括Adobe AIR库”
2、在src下新建包,并添加as代码
- package com.linxcool.test
- {
- import flash.external.ExtensionContext;
- public class HelloWorldExtension
- {
- public static const KEY:String = "keyA";//与java端中Map里的key一致
- public static const EXTENSION_ID:String = "extTest";//与extension.xml中的id标签一致
- private var extContext:ExtensionContext;
- public function HelloWorldExtension()
- {
- //第二个为参数,会传入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";
- }
- }
- }
- <?xml version="1.0" encoding="UTF-8"?>
- <extension xmlns="http://ns.adobe.com/air/extension/2.5">
- <id>extTest</id>
- <versionNumber>1</versionNumber>
- <platforms>
- <platform name="Android-ARM">
- <applicationDeployment>
- <!--即为Android本地导出的jar包名-->
- <nativeLibrary>AneTestNative.jar</nativeLibrary>
- <!--即为Android本地FREExtension全路径-->
- <initializer>com.linxcool.test.SkyExtension</initializer>
- <finalizer>com.linxcool.test.SkyExtension</finalizer>
- </applicationDeployment>
- </platform>
- </platforms>
- </extension>
随便新建一个目录作为工作目录(AneBuild),并为其建立子文件夹Android-ARM
将Flex Library项目中自动生成的.swc文件和extension.xml复制到AneBuild目录下
以ZIP方式解压.swc文件获取catalog.xml和library.swf文件并存到Android-ARM文件夹下
拷贝AneTestNative.jar到Android-ARM文件夹下
拷贝自己的签名文件.p12到AneBuild文件夹下
最终结果
AneBuild:Android-ARM文件夹、.swc文件、extension.xml、.p12文件
Android-ARM:catalog.xml、library.swf、AneTestNative.jar
使用命令提示符进入到AneBuild文件目录下,使用adt命令对上述文件打包
- "D:\develop\Adobe\Adobe Flash Builder 4.5\sdks\4.5.0-air3.0\bin\adt" -package -storetype PKCS12 -keystore linxcool.p12 -storepass 08002615 -target aneTest.ane extension.xml -swc *.swc -platform Android-ARM -C Android-ARM .
08002615:签名密码
aneTest.ane:生成的ANE文件名
Flex Mobile项目
1、新建Flex Mobile项目
2、添加本地扩展添加上面所生成的ane包
3、编辑 app-xml文件添加android中所需的权限
4、调用Ane中的函数即可
- ANE 在 Android 上的应用
- ANE 在 Android 上的应用
- ane制作过程在Android平台上的特点:
- Adobe Native Extension(ANE)-Actionscript通过语音来控制你的android应用-Air for android
- OpenCV在Android平台上的应用
- coredump在Android上的应用
- WIFI 在android上的应用
- OpenCV在Android平台上的应用
- coredump在Android上的应用
- opencv在android上的应用
- Fragment在Android机顶盒上的应用
- 初识Face++在android上的应用
- MVP在Android平台上的应用
- XML在Android-iOS上的应用
- Mimer数据库在Android上的应用
- FileProvider在Android N上的应用
- FileProvider 在 Android N 上的应用
- RxJava 在Android开发上的应用
- tftpd 安装和配置
- 用右键于当前目录中打开终端termin…
- linux下查看和添加PATH环境变量
- js Date的用法
- linux环境变量的设置
- ANE 在 Android 上的应用
- Wubi安装Ubuntu后重启, 停在…
- ubuntu root帐号初始密码设置
- android国外网站
- ubuntu安装deb,rpm安装包,tar.gz的…
- 清理ubuntu垃圾文件
- 开发城市出租车智能调度中心
- 开机报警声含义
- 专家指导:Ubuntu操作系统下搭建NF…