开发Flex for Android第一个ANE(ActionScript Native Extensions)本地扩展
2016-04-01 21:56
555 查看
本地扩展就是需要调用原生的东西要开发的插件
首先打开Android Studio,建个空项目, 再建立个名为 FirstANE 的Android Library Module,
然后把C:\Program Files (x86)\Adobe\Adobe Flash Builder 4.6\sdks\4.6.0\lib\android\FlashRuntimeExtensions.jar
文件复制放到新建模块的libs文件夹下
接着建上3个类,代码如下:
接着用上一节介绍的gradle打包jar的方法, 打包成 FirstANE.jar 包
然后到 MyEclipse 里面, 新建一个Flex 库项目名为 FirstANE ,建立一个as类, 代码如下
自动构建或手动构建得到bin目录下的 FirstANE.swc 文件
然后打包, 我假设已经把 C:\Users\Administrator\AppData\Local\Android\sdk\tools加到环境变量了
我们建个文件夹叫pkg, 现在有 FirstANE.jar 和 FirstANE.swc 2个文件,
FirstANE.swc直接放在 pkg 文件夹下,
在 pkg 里面再建个文件夹叫 libs , 把FirstANE.jar放进去, 把 FirstANE.swc 用解压工具把里面的 library.swf 解压出来放到 libs 文件夹下
在 pkg 里再建个 extension.xml 文件
在 pkg 里再建个 pkg_ane.bat 文件
注意这是3行 , 然后双击运行就可以在 pkg 里打包出 FirstANE.ane 文件了
继续建立一个 Flex 手机项目(我建立ActionScript 手机项目MyEclipse会卡死), 选支持Google Android的空白项目,
最后一步的本机扩展选择我们的FirstANE.ane文件, OK
再新建一个 ActionScript 类, MyANETest.as, 右键设置为默认应用程序
然后点调试配置,
然后悲剧的一幕肯定会上演, 后台无输出, 后台无输出, 后台无输出..........................
是不是哪里代码写错了, 没错呀, 我都看了几十次了这文章 :
[安卓开发整理]——ANE, 没什么复杂的玩意儿呀
然后开始慢慢比对代码了, 接着看是不是资源文件没打进去导致的, 最后还在MyEclipse新建一个java项目把jar包引用进去, 看 jar 包对不
把想到的可能都试了一遍, 最后下班了去吃饭, 中途就想了, 文件没错, 是不是打的 jar 包有问题, 结果就上网下载了个adt-bundle-windows-x86_64-20140702.zip
新建个 Android Project, 把代码贴进去, File -> Export -> ......., 最后打包ane, 引用到上面的 MyANETest , 终于盼到了控制台的输出 :
完结, 这里是全部源码 .
这里是
pkg 打包命令及资源
或者 https://github.com/svygh123/ANE_Relate.git
首先打开Android Studio,建个空项目, 再建立个名为 FirstANE 的Android Library Module,
然后把C:\Program Files (x86)\Adobe\Adobe Flash Builder 4.6\sdks\4.6.0\lib\android\FlashRuntimeExtensions.jar
文件复制放到新建模块的libs文件夹下
接着建上3个类,代码如下:
package org.fluidea; import java.util.HashMap; import java.util.Map; import android.util.Log; import com.adobe.fre.FREContext; import com.adobe.fre.FREFunction; public class FirstANEContext extends FREContext { @Override public void dispose() { Log.i("FirstANEContext", "Dispose context"); } @Override public Map<String, FREFunction> getFunctions() { Log.i("FirstANEContext", "Creating function Map"); Map<String, FREFunction> functionMap = new HashMap<String, FREFunction>(); functionMap.put("sayHello", new SayHelloFunction() ); return functionMap; } }
package org.fluidea; import android.util.Log; import com.adobe.fre.FREContext; import com.adobe.fre.FREExtension; public class FirstANEExtension implements FREExtension { private FirstANEContext context; private String tag = "FirstANEExtension"; @Override public FREContext createContext(String arg0) { Log.i(tag, "Creating context"); if( context == null) context = new FirstANEContext(); return context; } @Override public void dispose() { Log.i(tag, "dispose"); } @Override public void initialize() { Log.i(tag, "initialize"); } }
package org.fluidea; import android.util.Log; import com.adobe.fre.FREContext; import com.adobe.fre.FREFunction; import com.adobe.fre.FREObject; public class SayHelloFunction implements FREFunction { @Override public FREObject call(FREContext arg0, FREObject[] arg1) { FREObject result = null; Log.i ("SayHelloFunction", "call"); try { FREObject msg = arg1[0]; String s = msg.getAsString(); Log.i("SayHelloFunction", "String from AS: " + s); result = FREObject.newObject("Response from Java:" + s); } catch (Exception e) { Log.i ("SayHelloFunction", e.getMessage()); } return result; } }
接着用上一节介绍的gradle打包jar的方法, 打包成 FirstANE.jar 包
然后到 MyEclipse 里面, 新建一个Flex 库项目名为 FirstANE ,建立一个as类, 代码如下
package org.fluidea { import flash.external.ExtensionContext; public class FirstANE { private var context:ExtensionContext; public function FirstANE() { try { context = ExtensionContext.createExtensionContext("org.fluidea.FirstANE", null); }catch (e:Error) { trace("e:" + e); } } public function isSupported():Boolean { return context != null; } public function sayHello(message:String):String { var retval:String; retval = context.call("sayHello", message) as String; return retval; } public function dispose():void { context.dispose(); } } }
自动构建或手动构建得到bin目录下的 FirstANE.swc 文件
然后打包, 我假设已经把 C:\Users\Administrator\AppData\Local\Android\sdk\tools加到环境变量了
我们建个文件夹叫pkg, 现在有 FirstANE.jar 和 FirstANE.swc 2个文件,
FirstANE.swc直接放在 pkg 文件夹下,
在 pkg 里面再建个文件夹叫 libs , 把FirstANE.jar放进去, 把 FirstANE.swc 用解压工具把里面的 library.swf 解压出来放到 libs 文件夹下
在 pkg 里再建个 extension.xml 文件
<extension xmlns="http://ns.adobe.com/air/extension/3.1"> <id>org.fluidea.FirstANE</id> <versionNumber>1</versionNumber> <platforms> <platform name="Android-ARM"> <applicationDeployment> <nativeLibrary>FirstANE.jar</nativeLibrary> <initializer>org.fluidea.FirstANEExtension</initializer> </applicationDeployment> </platform> </platforms> </extension>
在 pkg 里再建个 pkg_ane.bat 文件
adt -package -target ane FirstANE.ane extension.xml -swc FirstANE.swc -platform Android-ARM -C libs . pause
注意这是3行 , 然后双击运行就可以在 pkg 里打包出 FirstANE.ane 文件了
继续建立一个 Flex 手机项目(我建立ActionScript 手机项目MyEclipse会卡死), 选支持Google Android的空白项目,
最后一步的本机扩展选择我们的FirstANE.ane文件, OK
再新建一个 ActionScript 类, MyANETest.as, 右键设置为默认应用程序
package { import flash.display.Sprite; import flash.display.StageAlign; import flash.display.StageScaleMode; import org.fluidea.FirstANE; public class MyANETest extends Sprite { private var ane:FirstANE public function MyANETest() { stage.align = StageAlign.TOP_LEFT; stage.scaleMode = StageScaleMode.NO_SCALE; ane = new FirstANE(); // 判断是否可以运行 if (ane.isSupported()) { // 调用 sayHello 并输出返回值 trace(ane.sayHello("Hi, Android")); } } } }
然后点调试配置,
然后悲剧的一幕肯定会上演, 后台无输出, 后台无输出, 后台无输出..........................
是不是哪里代码写错了, 没错呀, 我都看了几十次了这文章 :
[安卓开发整理]——ANE, 没什么复杂的玩意儿呀
然后开始慢慢比对代码了, 接着看是不是资源文件没打进去导致的, 最后还在MyEclipse新建一个java项目把jar包引用进去, 看 jar 包对不
把想到的可能都试了一遍, 最后下班了去吃饭, 中途就想了, 文件没错, 是不是打的 jar 包有问题, 结果就上网下载了个adt-bundle-windows-x86_64-20140702.zip
新建个 Android Project, 把代码贴进去, File -> Export -> ......., 最后打包ane, 引用到上面的 MyANETest , 终于盼到了控制台的输出 :
完结, 这里是全部源码 .
这里是
pkg 打包命令及资源
或者 https://github.com/svygh123/ANE_Relate.git
相关文章推荐
- Android Studio 配置NDK,运行第一个hello-jni安卓程序详细步骤
- Android软键盘弹出时把布局顶上去的解决方法
- Android之NDK开发
- Android中涉及到的焦点问题,focusable,clickable,enabled
- Android如何保证一个线程最多只能有一个Looper?
- 百度地图开发(三):Android studio添加jar包和so库
- Android ORM 数据库的使用
- Android从图库选择照片
- Android Studio打包Android Library为jar方案
- android intent MIME type
- Android杂记(2):RecyclerView中Button点击问题
- Android MTK 6572 修改开机logo和开机动画
- Android Intent
- Android官方说明--返回键和toolbar向上按钮的区别
- VisionMobile:2015年Android使用的全球趋势(六)巴西喜欢WI-FI,印度喜欢蜂窝
- Android MTK Launcher3 替换桌面图标
- 《Pro Android Graphics》读书笔记之第四节
- Android Studio 常用快捷键
- Android上实现仿IOS弹性ScrollView
- Android开发之内存管理