您的位置:首页 > 编程语言 > Java开发

Flex ANE制作打包流程

2017-03-02 23:28 357 查看
目前从事Flex4+Java桌面应用开发,项目中应用很多ane文件,想了解ane文件原理及制作打包过程。

本篇博客记录自己制作Flex AIR ane步骤,遇到的问题及解决方案。原理,底层细节等本篇就不介绍了,可参考本文末尾的参考资料。

ane可以运行在三个平台中:

ane+ios,ane+Android(java)(jar),ane+Windows(c++/c#)(dll) 。

在Windows平台通过AIR调用jar生成ane,会一直报错找不到制定方法。。。(才发现这种方式行不通,哭晕在厕所)

文章末尾提供了本文测试所用的jar,swc,打包命令等资料。

下面介绍制作打包ane的步骤

一、准备工作

1、Flash Builder 4.6

2、Myeclipse或eclipse

3、Adt.jar

4、数字签名证书(可以在FB4.6中随意建一个air项目,然后到处发行版,创建一个)

5、解压缩软件

6、JDK/JRE

二丶创建jar

创建java项目,并导入Flex SDK的lib/Android目录下的FlashRuntimeExtensions.jar

1、创建一个TestExtension类,实现FREExtension接口,该类是AS与Java交互的最基础的入口。

package com.agree.ane;

import com.adobe.fre.FREContext;
import com.adobe.fre.FREExtension;
//这个类是AS与JAVA交互的最基础的入口
public class TestExtension implements FREExtension {

@Override
public FREContext createContext(String arg0) {

return new TestContext();
}

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

}

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

}

}


2、创建一个Context类,继承FREContext类,覆写getFunctions方法,这个方法是定义AS与Java具体方法通讯的接口。

package com.agree.ane;

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

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

public class TestContext extends FREContext {

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

}

@Override
public Map<String, FREFunction> getFunctions() {
// 下面这个比较关键,它的作用是定义as与JAVA具体方法通信的重要接口
Map<String,FREFunction> functionMap=new HashMap<String,FREFunction>();
functionMap.put("testFunction",new TestFunction());
return functionMap;
}

}


3、创建一个Function类,实现FREFunction接口,实现call方法。

package com.agree.ane;

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

public class TestFunction implements FREFunction {

@Override
//这个类作用就是 AS调用CALL方法给java传一个FREObject的参数组,然后,java给as返回一个FREObject
public FREObject call(FREContext arg0, FREObject[] arg1) {

FREObject result=null;
try {
result=FREObject.newObject("Ane测试");
} catch (FREWrongThreadException e) {
e.printStackTrace();
}
return result;
}

}


导出AneTestJava.jar

这里注意jdk的 版本。按照网上搜索到的信息,最好jdk版本控制在1.6。本篇文章测试时使用的是jdk1.6.0_43。

三丶创建Flex库项目swc

1、FB4.6中创建Flex库项目AneTestAS,创建时配置选择注意勾选包括Adobe AIR库



2、创建一个as类

package git.ane.test
{
import flash.external.ExtensionContext;

public class CallJava
{

public var context:ExtensionContext;

public function CallJava()
{
context=ExtensionContext.createExtensionContext("com.agree.ane.TestExtension",null);
}

public function callJavaTest():String{
trace(JSON.stringify(context));
return context.call("testFunction",null)+"";
}
}
}


注意这个类中的createExtensionContext方法的第一个参数和call方法的第一个参数。

*createExtensionContext方法的第一个参数com.agree.ane.TestExtension需要与第四步中创建的extension.xml中的id一致。

*call方法的第一个参数testFunction需要与上面jar中TestContext类的getFunctions方法中map的key对应,如果有多个,则需要定义多个TestFunction类,每个类中实现自己的实际业务。

3、构建库项目,生成AneTestAS.swc文件。

四、创建extension.xml文件

<extension xmlns="http://ns.adobe.com/air/extension/3.1">
<id>com.agree.ane.TestExtension</id>
<versionNumber>1.0.0</versionNumber>
<platforms>
<platform name="Android-ARM">
<applicationDeployment>
<nativeLibrary>AneTestJava.jar</nativeLibrary>
<initializer>com.agree.ane.TestExtension</initializer>
<finalizer>com.agree.ane.TestExtension</finalizer>
</applicationDeployment>
</platform>
</platforms>
</extension>


1、注意这里的命名空间http://ns.adobe.com/air/extension/3.1,版本一定要与adl.exe版本一致。

可以在FB4.6安装目录下查看adl版本。



2、id标签必须与AneTestAS库项目中CallJava类中createExtensionContext的第一个参数一致。

3、Platform标签的name属性必须为Android-ARM,完全匹配。若是桌面应用必须为Windows-x86,也必须是完全匹配。

4、nativeLibrary标签的值为第一步中导出的jar包。

5、Initializer/finalizer的值为第一步中导出的jar包中TestExtension类的完全包名,允许没有finalizer标签。

五丶打包

1、使用压缩软件打开AneTestAS.swc,并解压得到catalog.xml和library.swf两个文件

2、在FB4.6安装目录sdks\4.6.0\lib下拿到adt.jar

3、将AneTestJava.jar,AneTestAS.swc,catalog.xml,library.swf,extension.xml,adt.jar复制到某一个文件夹下,并在该文件夹中按住shift键+点击鼠标右键,选择“在此处打开命名窗口”或者cmd命令进入该文件夹所在目录中

4、在打开的cmd窗口中输入。其实这里可以采用ant的build.xml进行构建打包,博主还在学习中,后面可以更新上来。

java -jar adt.jar -package -tsa none -storetype pkcs12 -keystore aa.p12 -storepass 123456 -target ane m.ane extension.xml -swc AneTestAS.swc -platform Android-ARM AneTestJava.jar library.swf


(1)-tsa none 可以避免时间戳和去Adobe官网认证之类的(这点可能说的不对),希望知道的大神告诉下

(2)-keystore aa.p12 aa.p12采用aa.p12数字签名证书

(3)-storepass 123456 指定数字签名证书的密码

(4)-target ane m.ane 指定要制作的ane的文件名

(5)-platform Android-ARM 这里的platform值必须与extension.xml中platform标签的name属性一致。

这里还有-C的参数可以使用,可惜不会使用,学习中。

通过该cmd命令即可在当前目录得到m.ane文件。

六丶使用

1、创建Flex手机项目

2、右击项目,选择属性,在属性面板中选择Flex构建路径条目,选择本机扩展页签,添加ANE。属性面板中选择Flex构建打包条目下的Google Android条目,选择本机扩展页签,在已显示的m.ane行,勾选包,点击确定保存设置。

3、在Flex手机项目中使用该ane。

必须要注意ane不支持模拟器,必须在真实设备上进行调试。若是使用模拟器则会报错“Requested extension com.adobe.Vibration is not supported for Windows-x86 ”

制作打包例子下载包括jar,swc,打包命令及制作流程

写在最后

若是运行该手机项目时报错

“Registry key ‘Software/JavaSoft/Java Runtime Environment/CurrentVersion’

has value ‘1.8’, but ‘1.7’ is required.

Error: could not find java.dll

Error: could not find Java 2 Runtime Environment.”

请检查jdk版本,可能是之前电脑安装了多个jdk版本导致注册表出问题。

解决办法:

通过cmd窗口regedit命令快速打开注册表,找到这个路径:

HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/Java Runtime Environment,修改CurrentVersion对应的值为1.7,重新运行手机项目即可。



参考资料

http://www.ithao123.cn/content-884869.html JDK错误解决方案

https://forums.adobe.com/message/4717194 模拟器报错问题

http://blog.csdn.net/linxcool/article/details/7770179 ane原理

http://blog.sina.com.cn/s/blog_5d323f950101d6rc.html ane原理

http://blog.sina.com.cn/s/blog_5d323f950101d4a4.html ane制作,大家可以参考
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  flex java ane