AIR的ane开发

android版

java端:
新建一个项目,导入air SDK目录下lib/android/FlashRuntimeExtensions.jar包,之後创建以下三个文件:


package com.example;
import com.adobe.fre.FREExtension;


public class AneExtension implements FREExtension
{
    @Override
    public FREContext createContext(String name)
    {
       return new threeExtensionContext();
    }


    @Override
    public void dispose()
    {


    }


    @Override
    public void initialize()
    {
    }
}


public class AneContext extends FREContext
{
    @Override
    public void dispose()
    {


    }


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


public class testFunction implements FREFunction
{
    @Override
    public FREObject call(FREContext context, FREObject[] args)
    {
        //todo
    }
}

编译没有问题後,导出一个AneExample.jar文件,放到一个目录


AS端:
建立一个Flex Library项目,创建AS调用接口:
package com.example
{
    import flash.external.ExtensionContext;
    public class Associator
    {
        private var context : ExtensionContext;
        public class Associator()
        {
              if(context == null)
                  context = ExtensionContext.createExtensionContext("com.example", "");
 //第一个参数为后面extension.xml中的id
        }
    }


    public function call():void
    {
       //todo
       if(context)
          context.call("testFunction", "args");
    }
}
编译,生成bin目录下.swc文件, 将该swc文件到之前jar文件的目录,并复制一份,解压出来(解压不了可以将扩展名改为.zip後解压)


下一步,建议一个extension.xml文件,内容如下:
<extension xmlns="http://ns.adobe.com/air/extension/3.5">  //注意版本号,与air SDK相同
 <id>com.example</id>
 <versionNumber>1</versionNumber>
 <platforms>
<platform name="Android-ARM">
     <applicationDeployment>
       <nativeLibrary>AneExample.jar</nativeLibrary>
       <initializer>com.example.AneExtension</initializer>
       <finalizer>com.example.AneExtension</finalizer>
     </applicationDeployment>
   </platform>
 </platforms>
</extension>


下一步,就可以打包ane了,使用air SDK下的lib/adt.jar, 执行以下命令:
adt -package -target ane AneTest.ane extension.xml -swc Associator.swc -platform Android-ARM library.swf AneExample.jar
得到AneTest.ane文件,当然,名字是自己任意取的, 然後在AS的工程里的native extension里导入就可以了


ios版:

启动Xcode,创建一个Cocoa Touch Static Library的项目
将air sdk下的FlashRuntimeExtensions.h添加到工程中
下面是.m文件的内容:

#import "FlashRuntimeExtensions.h"
#import <AudioToolbox/AudioServices.h>

//自定义的函数
FREObject VibrateDevice(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[])

 {  
    NSLog(@"Entering VibrateDevice()");
    AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
    NSLog(@"Exiting VibrateDevice()");
    return NULL;
}


//自定义的函数
FREObject IsSupported(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[]) 

{
        NSLog(@"Entering IsSupported()");
FREObject fo;
FRENewObjectFromBool(YES, &fo);
NSLog(@"Exiting IsSupported()");
return fo;
}
//自定义的函数,初始化调用
FREObject InitNativeCode(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[])

 {
    NSLog(@"Entering InitNativeCode()");

    //todo
    NSLog(@"Exiting InitNativeCode()");
    return NULL;
}

//实现的接口函数,创建extension context的实例时会调用
void ContextInitializer(void* extData, const uint8_t* ctxType, FREContext ctx, 
uint32_t* numFunctionsToTest, const FRENamedFunction** functionsToSet) 

{
    NSLog(@"Entering ContextInitializer()");
    *numFunctionsToTest = 3;  //函数数量
FRENamedFunction* func = (FRENamedFunction*) malloc(sizeof(FRENamedFunction) * 3); //注意内存分配地址要与函数数量匹配
func[0].name = (const uint8_t*) "isSupported";
func[0].functionData = NULL;
    func[0].function = &IsSupported;

func[1].name = (const uint8_t*) "vibrateDevice";
func[1].functionData = NULL;
func[1].function = &VibrateDevice;

//Just for consistency with Android
func[2].name = (const uint8_t*) "initNativeCode";
func[2].functionData = NULL;
func[2].function = &InitNativeCode;

*functionsToSet = func;
    
    NSLog(@"Exiting ContextInitializer()");
}

//context对象析构时调用
void ContextFinalizer(FREContext ctx) {
    
    NSLog(@"Entering ContextFinalizer()");
    
    // Nothing to clean up.
    
    NSLog(@"Exiting ContextFinalizer()");
    
return;
}


//AS第一次调用ExtensionContext.createExtensionContext()时,会调用该接口
void ExtInitializer(void** extDataToSet, FREContextInitializer* ctxInitializerToSet, 
                    FREContextFinalizer* ctxFinalizerToSet) 


    NSLog(@"Entering ExtInitializer()");
    
    *extDataToSet = NULL;
    *ctxInitializerToSet = &ContextInitializer;
    *ctxFinalizerToSet = &ContextFinalizer;
    
    NSLog(@"Exiting ExtInitializer()");
}


//AS释放Extension对象时调用此接口
void ExtFinalizer(void* extData)

 {
    NSLog(@"Entering ExtFinalizer()");
    
    // Nothing to clean up.
    
    NSLog(@"Exiting ExtFinalizer()");
    return;
}

编译生成 libVibrationiOSLibrary.a文件

Extension.xml内容:

<extension xmlns="http://ns.adobe.com/air/extensin/2.7">
<id>com.adobe.Vibration</id>
<versionNumber>1</versionNumber>
<platforms>
<platform name="iphone-ARM">
<applicationDeployment>
<nativeLibrary>libVibrationiOSLibrary.a</nativeLibrary>
<initializer>ExtInitializer</initializer>
<finalizer>ExtFinalizer</finalizer>
</applicationDeployment>
</platform>
</platforms>
</extension>

打包ane命令:

java -jar adt.jar -package -target ane aneDemo.ane extension.xml -swc AneFlex.swc -platform iPhone-ARM library.swf libAneDemo.a

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值