本文内容借鉴:
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 {@Overridepublic FREObject call(FREContext context, FREObject[] params) {// TODO Auto-generated method stubFREObject 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 blocke.printStackTrace();} catch (FRETypeMismatchException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (FREInvalidObjectException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (FREWrongThreadException e) {// TODO Auto-generated catch blocke.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 {@Overridepublic void dispose() {// TODO Auto-generated method stub}@Overridepublic Map<String, FREFunction> getFunctions() {// TODO Auto-generated method stubHashMap<String, FREFunction> map = new HashMap<String, FREFunction>();map.put("testToast", new TestToastFunction());//可继续put其他functionreturn 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 {@Overridepublic FREContext createContext(String arg0) {// TODO Auto-generated method stubreturn new TestContext();}@Overridepublic void dispose() {// TODO Auto-generated method stub}@Overridepublic 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

Flash Android ANE 打包流程及使用方法相关推荐

  1. Android APK打包流程

    目录 一.概述 二.打包流程 1.打包资源文件,生成R.java文件 2.处理aidl文件,生成相应的Java文件 3.编译项目源代码,生成class文件 4.转换所有的class文件,生成class ...

  2. rn android mac打包,React-Native之MAC平台Android apk打包流程

    MAC :Android打包流程7步走:(详情参照英文官网) 1).使用keytool首先生成keystore(包含storeFile file.storePassword .keyAlias .ke ...

  3. Android apk打包流程★

    1.apk打包 Android开发中打包apk主要有两种方式: ①使用Android Studio集成直接生成apk: ②使用ant工具在命令行方式下打包apk. 不管哪种方式,打包apk的本质过程都 ...

  4. Android App打包流程

    简单总结下app打包的流程: 第一步:aapt 为res目录下的资源生成R.java文件,同时为AndroidManinfest.xml生成Manifest.java文件 第二步:aidl 把项目中自 ...

  5. 安卓逆向_1 --- 逆向环境配置、APK 文件结构、APK 打包流程

    哔哩哔哩:https://www.bilibili.com/video/BV1UE411A7rW?p=1 Android 逆向工程师系统培训‹第九期›( 课程目录 ):https://ke.yijin ...

  6. Android APK 打包过程 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  7. android打包发布流程,从源文件到APK-Android打包流程

    ====================================================== 原文链接https://juejin.im/entry/58b78d1b61ff4b006 ...

  8. Android打包流程-签名

    编译任务 META-INF主要用来存储当前的apk的签名信息, 与AP相关的签名信息有下面两个: validateSigningDebug packageDebug 校验签名文件 会先通过valida ...

  9. 从 Android 到 React Native 开发(四、打包流程解析和发布为 Maven 库 )

    1.从 Android 到 React Native 开发(一.入门) 2.从 Android 到 React Native 开发(二.通信与模块实现) 3.从 Android 到 React Nat ...

最新文章

  1. 几种流行Webservice框架性能对比
  2. “ INSERT IGNORE”与“ INSERT…ON DUPLICATE KEY UPDATE”
  3. 接地气的数据分析入门与进阶
  4. Oracle-知识结构漫谈
  5. 《Web全栈工程师的自我修养》
  6. mysql1关闭_(2.1)学习笔记之mysql基本操作(启动与关闭)
  7. spring--事务原理
  8. SQL Sever数据库的基本操作和它的建立
  9. photoshop照片尺寸
  10. 什么是特洛伊木马,它能造成什么损害?
  11. 物联网安全硬件修改系列-硬改
  12. 二、JavaWeb动态网页基础
  13. 2022腾讯云双十一服务器价格出炉来看看便宜不
  14. 51nod-1423 最大二“货”(单调栈)
  15. 【第60题】必学的枚举1-枚举的定义和基本特性
  16. 分享99个PHP源码,总有一款适合您
  17. Linux 命令学习 -重置root密码
  18. 安卓线程同步面试_Android 面试主题集合整理
  19. 少儿编程 电子学会图形化编程等级考试Scratch三级真题解析(选择题)2021-12
  20. 神经网络相关的绘图工具

热门文章

  1. MySQL8免安装版安装教程
  2. 莫纳什大学计算机专业研究生在哪个校区,盘点莫纳什大学2019年计算机类硕士课程...
  3. 二进制安装Kubernetes(k8s) v1.25.0 IPv4/IPv6双栈
  4. 怎样在手机设置无线网络连接服务器,如何用手机设置wifi路由器?
  5. MATLAB 汉化补丁下载
  6. 【RS-Attack】攻击MF:Data Poisoning Attacks on Factorization-Based Collaborative Filtering (NIPS‘16)
  7. html实现凹陷效果,css3怎么实现字体凹陷凸出效果?(附代码)
  8. 3轴/6轴/9轴传感器是什么, 加速计/陀螺仪/磁力计又是什么?
  9. 数据挖掘之用户价值分析
  10. dwm.exe_什么是桌面窗口管理器(dwm.exe),为什么运行?