Flash还是很好的,不过国内没人用. Whatever了. 以下是ANE制作中的一点笔记 分享下 也留作备份

Step1 编写As3 Library

package com.eran {
    import flash.external.ExtensionContext;
    import flash.system.Capabilities;

    public class WhateverNameAS {

        private static var mInstance:WhateverNameAS;

        public static function get instance():WhateverNameAS {
            if (mInstance == null) {
                mInstance = new WhateverNameAS();
            }
            return mInstance;
        }

        private var mExtContext:ExtensionContext;
        private var mIsMobile:Boolean;

        public function WhateverNameAS() {
            initialize();
        }

        private function initialize():void {
            mIsMobile = Capabilities.manufacturer.indexOf("iOS") != -1 || Capabilities.manufacturer.indexOf("Android") != -1;
            if (mIsMobile) {
                mExtContext = ExtensionContext.createExtensionContext("HereISExtensionID", "HereISContextType");
                if (mExtContext != null) {
                    mExtContext.call("initMe")
                } else {
                    trace("Error: can't create context");
                }
            }
        }

        public function callFun1():void {
            if (mIsMobile) {
                if (mExtContext != null) {
                    mExtContext.call("fun1");
                } else {
                    trace("Error: context is null");
                }
            }
        }
    }
}

编写后生成*.swc ,这里我命名为ANESWC.swc, 先放在某个目录留到后续步骤用

Step2 写Java 导出Jar包

主入口

package com.eran;

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

public class HereIsMainEntry implements FREExtension {

    @Override
    public void initialize() {
    }

    @Override
    public FREContext createContext(String s) {
        if (s.equals("HereISContextType")) {
            return new WhateverNameContext();
        }
        return null;
    }

    @Override
    public void dispose() {
    }
}

Context类

package com.eran;

import com.adobe.fre.FREContext;
import com.adobe.fre.FREFunction;
import com.eran.fun.WhateverFun1;
import com.eran.fun.WhateverInitFun;

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

public class WhateverNameContext extends FREContext {

    @Override
    public Map<String, FREFunction> getFunctions() {
        Map<String, FREFunction> functionMap = new HashMap<String, FREFunction>();
        functionMap.put("initMe", new WhateverInitFun());
        functionMap.put("fun1", new WhateverFun1());
        return functionMap;
    }

    @Override
    public void dispose() {
    }
}

Fun1

package com.eran.fun;

import android.widget.Toast;
import com.adobe.fre.FREContext;
import com.adobe.fre.FREFunction;
import com.adobe.fre.FREObject;

public class WhateverFun1 implements FREFunction {
    @Override
    public FREObject call(FREContext freContext, FREObject[] freObjects) {
        Toast.makeText(freContext.getActivity(), "WhateverFun1 called", Toast.LENGTH_SHORT).show();
        return null;
    }
}

Init Fun

package com.eran.fun;

import android.widget.Toast;
import com.adobe.fre.FREContext;
import com.adobe.fre.FREFunction;
import com.adobe.fre.FREObject;

public class WhateverInitFun implements FREFunction {
    @Override
    public FREObject call(FREContext freContext, FREObject[] freObjects) {
        Toast.makeText(freContext.getActivity(), "WhateverInitFun called", Toast.LENGTH_SHORT).show();
        return null;
    }
}

打包Jar流程, Intellij Idea 13~15 流程都一样

Artifacts 选择 From modules

选择刚写的Java工程

改掉导出的Jar名称,并且去除被Import进来的 FlashRuntimeExtensions.jar

这个文件我是直接从AIR SDK 目录里面直接复制到工程的lib目录 同时设置了引用

最终的效果图

运行打包后应该生成 *.jar文件, 这里我的Jar文件叫WhateverJAR.jar

Step3 创建打包用的目录

在任意位置创建一个文件夹,内部结构如上图. 其中

adt.jar 文件是从AIR SDK中直接复制过来,

ANESWC.swc 是Step1中生成

将ANESWC.swc 用解压工具解压,将里面的library.swf 分别放入 Android-ARM目录和default 目录

将Step2 生成的Jar包WhateverJAR.jar 放入 Android-ARM目录

extension.xml 文件 内容如下

<extension xmlns="http://ns.adobe.com/air/extension/20.0">
  <id>HereISExtensionID</id>
  <versionNumber>1</versionNumber>
  <platforms>
    <platform name="Android-ARM">
      <applicationDeployment>
        <nativeLibrary>WhateverJAR.jar</nativeLibrary>
        <initializer>com.eran.HereIsMainEntry</initializer>
        <finalizer>com.eran.HereIsMainEntry</finalizer>
      </applicationDeployment>
    </platform>
    <platform name="default">
        <applicationDeployment/>
    </platform>
  </platforms>
</extension>

其中 http://ns.adobe.com/air/extension/20.0 是我用到的AIR SDK 版本号(我用的是AIR SDK20 所有版本是20.0)

id 字段就是在Step1中创建Context所填的第一个参数

mExtContext = ExtensionContext.createExtensionContext("HereISExtensionID", "HereISContextType");

同时注意该字段也是测试工程的 *-app.xml中 引用当前ANE所使用的名字

    <extensions>
        <extensionID>HereISExtensionID</extensionID>
    </extensions>

而函数的第二个字段 "HereISContextType" 是Step2中 传入Java的入口文件HereIsMainEntry.java 的参数

    @Override
    public FREContext createContext(String s) {
        if (s.equals("HereISContextType")) {
            return new WhateverNameContext();
        }
        return null;
    }

编辑build.bat

@echo off

cd /d %~dp0
set adt=java -jar adt.jar
set ane=AneT1.ane
set target=ane %ane% .\extension.xml
set swc=./ANESWC.swc
set platform-android=-platform Android-ARM -C ./Android-ARM .
set platform-default=-platform default -C ./default .

echo Packaging...
if exist %ane% del %ane% > nul
%adt% -package -target %target% -swc %swc% %platform-ios-arm% %platform-ios-x86% %platform-android% %platform-default%

echo Finish!
pause

运行build.bat 生成最终AneT1.ane, 导出测试工程

最终生成的Ane结构如下:

总结:

生成了default平台,这样在PC端进行调试时候 不会出现该ANE只适合Android 从而无法再PC模拟器运行的情况

同时ANE的swc内部 通过

 mIsMobile = Capabilities.manufacturer.indexOf("iOS") != -1 || Capabilities.manufacturer.indexOf("Android") != -1;

确保其ANE一定运行在Mobile环境中, PC环境仅仅是个空实现

ANE 从入门到精通 --- 简单的Whatever的更多相关文章

  1. ANE 从入门到精通 --- 使用R* 访问资源

    在AIR4.0版本之前,ANE内无法使用R*,操作资源仅能使用getResourceID(). 对于接SDK来说尤为头疼. 不过4.0以后可以通过在打包时候指定platform.xml来直接使用R*访 ...

  2. ANE 从入门到精通 --- 一键打包ANE

    每次都要执行好几步才能编译出ANE很是麻烦,使用如下脚本 一键完成复杂的流程 REM 好压HaoZipC文件所在的位置,7Zip,WinRAR等均可 Set Zip=D:\"Program ...

  3. Java入门到精通——基础篇之多线程实现简单的PV操作的进程同步

    Java入门到精通——基础篇之多线程实现简单的PV操作的进程同步 一.概述     PV操作是对信号量进行的操作.     进程同步是指在并发进程之间存在一种制约关系,一个进程的执行依赖另一个进程的消 ...

  4. cucumber java从入门到精通(3)简单实现及断言

    cucumber java从入门到精通(3)简单实现及断言 上一节里我们定义了step的java代码实现文件,step就是测试步骤及断言的集合,我们先定义出来,以后可以驱动开发以及在持续集成时重用. ...

  5. 路由其实也可以很简单-------Asp.net WebAPI学习笔记(一) ASP.NET WebApi技术从入门到实战演练 C#面向服务WebService从入门到精通 DataTable与List<T>相互转换

    路由其实也可以很简单-------Asp.net WebAPI学习笔记(一)   MVC也好,WebAPI也好,据我所知,有部分人是因为复杂的路由,而不想去学的.曾经见过一位程序猿,在他MVC程序中, ...

  6. ASP.NET MVC4入门到精通系列目录汇总

    序言 最近公司在招.NET程序员,我发现好多来公司面试的.NET程序员居然都没有 ASP.NET MVC项目经验,其中包括一些工作4.5年了,甚至8年10年的,许多人给我的感觉是:工作了4.5年,We ...

  7. Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引

    因为内容比较多,所以每篇讲解一些内容,最后会放出全部代码,可以参考.操作中总会遇到各式各样的问题,个人对部分问题的研究在最后一篇 问题研究 里.欢迎大家探讨学习. 代码都经过个人测试,但仍可能有各种未 ...

  8. 1、ASP.NET MVC入门到精通——新语法

    本系列目录:ASP.NET MVC4入门到精通系列目录汇总 在学习ASP.NET MVC之前,有必要先了解一下C#3.0所带来的新的语法特性,这一点尤为重要,因为在MVC项目中我们利用C#3.0的新特 ...

  9. 7、ASP.NET MVC入门到精通——第一个ASP.NET MVC程序

    本系列目录:ASP.NET MVC4入门到精通系列目录汇总 开发流程 新建Controller 创建Action 根据Action创建View 在Action获取数据并生产ActionResult传递 ...

随机推荐

  1. HDU 4020 Ads Proposal

    题目链接 排排序,找找做题的感觉... 对了,longlong用C++ 错了几次,我也是linux选手了.... #include <iostream> #include <cstd ...

  2. URAL 1152. False Mirrors(DP)

    题目链接 理解了题意之后,就不难了..状态压缩+暴力. #include <cstring> #include <cstdio> #include <string> ...

  3. GO语言练习:网络编程 ICMP 示例

    1.代码 2.编译及运行 1.Go语言网络编程:ICMP示例代码 icmptest.go package main import ( "fmt" "net" & ...

  4. C# Double保留小数点后面位数

    C# Double保留小数点后面位数 有的时候我们要对一些数据进行百分比的操作.一般的数据我们只要用 .ToString("P")就可以得到小数点后2位的百分比.而且是自动 加上% ...

  5. c# Dictionary的遍历和排序(转)

    c#遍历的两种方式 for和foreach for: 需要指定首位数据.末尾数据.数据长度: for遍历语句中可以改变数据的值: 遍历规则可以自定义,灵活性较高 foreach: 需要实现ienume ...

  6. Maven3路程(一)用Maven创建第一个web项目(1)

    一.创建项目 1.Eclipse中用Maven创建项目 上图中Next 2.继续Next 3.选maven-archetype-webapp后,next 4.填写相应的信息,Packaged是默认创建 ...

  7. markdown语法学习笔记

    ##1.**标题** # 一级标题 ## 二级标题   ### 三级标题 #### 四级标题 ##### 五级标题 ###### 六级标题 ##2.**加粗** 首尾各加两个*号   ##3.*斜字体 ...

  8. [转载] Can't create table './store/#sql-b2c_1a.frm' (errno: 150)和sql execution error #1452添加外键时错误解决方法

    Can't create table './store/#sql-b2c_1a.frm' (errno: 150)解决方法 错误原因有四: 1.外键的引用类型不一样,主键是int外键是char 2.找 ...

  9. 文件代码对比软件 Beyond Compare

    Beyond Compare https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=baidu&wd=Beyond%20Co ...

  10. (转)实例分析:MySQL优化经验

    [IT专家网独家]同时在线访问量继续增大,对于1G内存的服务器明显感觉到吃力,严重时甚至每天都会死机,或者时不时的服务器卡一下,这个问题曾经困扰了我半个多月.MySQL使用是很具伸缩性的算法,因此你通 ...