搭建环境这里就不详细说明了
一、Android本地库编写
1.从Flash Air SDK中提取需要的jar包
Android下需要的jar包在Flash Air SDK/lib/android目录下的FlashRuntimeExtensions.jar
2.建立Android工程,加入第一步提取的jar包
3.编写与as交互的主要类Extension,Context,Function
自定义Extension类,实现FREExtension接口
自定义Context类,继承FREContext类
自定义Function类,实现FREFunction接口
Function类可以定义多个,定义之后都注册在自定义Context类的getFunctions方法中
Sample:
public class TestExtension implements FREExtension { @Override public FREContext createContext(String arg0) { // TODO Auto-generated method stub return new TestContext(); } @Override public void dispose() { // TODO Auto-generated method stub } @Override public void initialize() { // TODO Auto-generated method stub } }
public class TestContext extends FREContext { @Override public void dispose() { // TODO Auto-generated method stub } @Override public Map<String, FREFunction> getFunctions() { HashMap<String, FREFunction> map = new HashMap<String, FREFunction>(); map.put("testToast", new TestToastFunction()); //可继续put其他function return map; } }
public class TestToastFunction implements FREFunction { @Override public FREObject call(FREContext arg0, FREObject[] arg1) { FREObject msg_ = arg1[0]; FREObject result=null; try { Toast.makeText(arg0.getActivity(), "测试成功:android本地被调用" + msg_.getAsString(), Toast.LENGTH_LONG).show(); result = FREObject.newObject("这是可返回的值"); } catch (Exception e) { e.printStackTrace(); } return result; } }
4.把刚刚编写的工程以jar包的形式导出,命名jar包(如:HelloANENative.jar)
二、AS端
1.建立Flex库项目,选择配置为手机库
2.在项目的src目录下创建extension.xml文件,文件基本内容如下(查看更多属性):
<extension xmlns="http://ns.adobe.com/air/extension/3.3"> <id>com.adobe.ane.test</id> <versionNumber>1</versionNumber> <platforms> <platform name="Android-ARM"> <applicationDeployment> <nativeLibrary>HelloANENative.jar</nativeLibrary><!--是之前导出的jar包--> <!--即为Android本地FREExtension全路径--> <initializer>com.cn.example.android.TestExtension</initializer> <finalizer>com.cn.example.android.TestExtension</finalizer> </applicationDeployment> </platform> </platforms> </extension>
3.编写一个AS的Extension类,主要作用是创建ExtensionContext,与Android的Native代码交互(建议使用单例)
package com.adobe.nativeExtensions.test { import flash.external.ExtensionContext; public class HelloWorldExtension { 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; 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"; } } }
编译得到.swf文件(如:HelloANELibrary.swc)
到这一步,打包ane需要的文件都有了
三、打包ane
通过一、二步我们可以获得三个文件
HelloANENative.jar、HelloANELibrary.swc 、extension.xml
把HelloANELibrary.swc的后缀名改为.rar,解压获得library.swf文件,此时我们将得到四个文件
以一下目录把4个文件放好:
通过命令进入这个目录,执行
adt -package -storetype PKCS12 -keystore 123.p12 -storepass 123 -target ane helloworld.ane extension.xml -swc HelloANELibrary.swc -platform Android-ARM -C Android-ARM .
在当前目录下就可以看到helloworld.ane
adt -certificate -cn SelfSign -ou QE -o "Example, Co" -c US 2048-RSA newcert.p12 39#wnetx3tl adt -certificate -cn ADigitalID 1024-RSA SigningCert.p12 39#wnetx3tl
四、测试ane
创建Flex手机项目,选择android为目标平台。
对着工程点击右键-属性,在属性面板的左边点击Flex构建路径,在选择本地扩展,添加ANE。
在点击属性面包左边的Flex构建打包,选择Google Android后点击本地扩展,对你需要引入的ANE包打勾,在点击确定
此时项目的引用的库下面就会出现你刚刚打勾的那些ANE包了。在flash项目中可以导入ANE中的类使用。