zoukankan      html  css  js  c++  java
  • flashdevelop调用ios方法

    来源:http://blog.csdn.net/zu12jing/article/details/7331397

    flash开发工具用的是flashdevelop(由于flashdevelop还能直接打开flashbuilder工程,反过来就不知道了)

    一.创建工程

    创建一个ios的工程,这个网上很多资料我就不写了

    关键点:要打包到ios设备上主要要看默认的AIR_IOS_readme.txt文件说明,这样对打包ios工程设置讲的非常详细

    二.怎么使用ane(ane封装后面补上)

    ane:包括了所有的所有跨平台所需要的资源

     

    三、lib.a文件生成(环境 xcode4.2)

    1,启动Xcode,在IOS-》Frameworkd&Library下面,创建一个Cocoa Touch Static Library的项目。
    2,创建好之后,从你下载的flex SDK目录下,找到Include文件夹,找到里面的FlashRuntimeExtensions.h添加到工程中
    3,可以把系统默认生成.h文件删除,留一个.m的文件就行了
    4,下面是.m文件的内容

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


    FREObject ShowIconBadageNumber(FREObject ctx, void* funcData, uint32_t argc, FREObject argv[])
    {
    NSLog(@"entering in ShowIconBadageNumber()");
    FREObject fo;
    FRENewObjectFromBool(NO, &fo);
    NSLog(@"entering in ShowIconBadageNumber()");

    int32_t t;
    FREGetObjectAsInt32(argv[0], &t);

    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:t];

    return argv[0];
    }

    FREObject ShowAlertInfo(FREObject ctx, void* funcData, uint32_t argc, FREObject argv[])
    {
    NSLog(@"entering ShowAlertInfo()");

    FREObject fo;
    FRENewObjectFromBool(NO, &fo);

    int32_t t;
    FREGetObjectAsInt32(argv[0], &t);


    NSString *tmpStr = [NSString stringWithFormat:@"%d", t];

    UIAlertView *tmpAlert = nil;
    tmpAlert = [[UIAlertView alloc] initWithTitle:@"系统信息" message:tmpStr delegate:nil cancelButtonTitle:@"sure" otherButtonTitles: nil];
    [tmpAlert show];
    [tmpAlert release];

    NSLog(@"Exiting ShowAlertInfo()");
    return  argv[0];
    }

    FREObject InitNativeCode(FREObject ctx, void* funcData, uint32_t argc, FREObject argv[])
    {
    NSLog(@"Entering InitNativeCode()");
        
    NSString *tmpStr = [NSString stringWithFormat:@"%d", 10000];

    UIAlertView *tmpAlert = nil;
    tmpAlert = [[UIAlertView alloc] initWithTitle:@"系统信息" message:tmpStr delegate:nil cancelButtonTitle:@"sure" otherButtonTitles: nil];
    [tmpAlert show];
    [tmpAlert release];
        // Nothing to do.
        
        NSLog(@"Exiting InitNativeCode()");
        
        return NULL;
    }


    void ContextInitializer(void* extData, const uint8_t* ctxType, FREObject 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*)"InitNativeCode";
    func[0].functionData = NULL;
    func[0].function = &InitNativeCode;

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

    func[2].name = (const uint8_t*)"ShowAlertInfo";
    func[2].functionData = NULL;
    func[2].function = &ShowAlertInfo;

    *functionsToSet = func;
    NSLog(@"exiting contextInitializer");
    }
    void ContextFinalizer(FREObject ctx)
    {
    NSLog(@"Entering ContextFinalizer()");
        
        // Nothing to clean up.
        
        NSLog(@"Exiting ContextFinalizer()");
    }


    void ExtInitializer(void** extDataToSet, FREContextInitializer* ctxInitializerToSet, FREContextFinalizer* ctxFinalizerToSet)
    {
    NSLog(@"Entering ExtInitializer()");
        
    *extDataToSet = NULL;
    *ctxInitializerToSet = &ContextInitializer;
    *ctxFinalizerToSet = &ContextFinalizer;
        
        NSLog(@"Exiting ExtInitializer()");

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

    前面两个函数是自己写的借口,后面是通用的借口,在红色标记的函数里记得要开辟你所写接口的数量,我就是少了一个一直调用接口函数失败,在工程设置里记得将Enable linking with shared libraried设置成NO,现在就可以生产.a文件了

    四.生产.swc接口文件(flash builder4.6)

    创建flex库项目,点击工程属性,flex库构建路径-》资源,选择src确定,swc就生产了,下面是代码(注:有时候由于flex版本问题要在flex库编译器选项卡的附加编译器参数你加入-swf-version 13)

    package com.coolexp
    {
    import flash.external.ExtensionContext;

    public class aneFlex
    {
    private static var extContext:ExtensionContext = null;

    public function aneFlex()
    {
    showBadageNum(100);
    }

    public static function showBadageNum(num:int):int
    {
    if(!extContext)
    {
    initExtension();
    }

    return int(extContext.call("ShowIconBadageNumber", num));
    }


    public static function showAlertInfo(num:int):int
    {
    if(!extContext)
    {
    initExtension();
    }

    return int(extContext.call("ShowAlertInfo", num));
    }

    public static function initExtension():void
    {
    trace("vibration constructor: create an extension context");
    extContext = ExtensionContext.createExtensionContext("com.coolexp.aneFlex", "");
    extContext.call("InitNativeCode");

    extContext.call("ShowAlertInfo", 20);
    }

    }
    }

    五、打包.ane文件

    将生成的.a和.swc文件拷贝到同一个目录下,复制一份.swc文件将后缀名改成.zip解压将里面的两个文件拷贝出来放于.a文件同一文件夹(就是这个目录下目前有四个文件.a,.swc,.swf,.xml),创建一个extension.xml文件(内容如下),com.coolexp.aneFlex这个id要和flex 库工程的id一样,libAneDemo.a是你生成.a文件的名字。然后找到你flex库中adt文件位置执行下面蓝色命令打包就成

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

    打包.ane命令

    "D:flex sdk4.6.0inadt" -package -target ane aneDemo.ane extension.xml -swc AneFlex.swc -platform iPhone-ARM library.swf libAneDemo.a

    这样在文件夹下就会产生一个aneDemo.ane文件了

    六,调用.ane(flashdevelop 工程)

     

    复制ane文件到lib目录下,添加到库并设置成外部应用库。在packager.bat中加入-extdir lib/

    例:call adt -package -target %TYPE%%TARGET% %OPTIONS% %SIGNING_OPTIONS% "%OUTPUT%" "%APP_XML%" %FILE_OR_DIR%-extdir lib/

    由于是extdir lib目录所以要把.ane文件放入lib文件夹下

    在as3工程属性设置中的extensions选项卡中加入com.coolexp.aneFlex    id

    这个在你的as3工程里就能调用.ane的库,实现后才发现不能联机编译的,直接生产.ipa包装到ipad上成功运行

     

    注意:要生成.apk或者.ipa包的时候才能用.ane,不然在模拟器上嵌入ane会认不到ane里面配置的id,编译会报错

  • 相关阅读:
    luogu P4779 【模板】单源最短路径(标准版)| dijkstra
    luogu P1160 队列安排 | 链式前向星
    luogu P1996 约瑟夫问题 | 链表
    luogu P3386 【模板】二分图匹配 | 匈牙利算法
    luogu P3366 【模板】最小生成树 | kruskal
    luogu P3378 【模板】堆
    luogu P3372 【模板】线段树 1
    luogu P1776 宝物筛选_NOI导刊2010提高(02) | 多重背包(二进制拆分)
    luogu P1616 疯狂的采药 | 完全背包
    luogu P1588 丢失的牛 | 宽搜
  • 原文地址:https://www.cnblogs.com/sunminmin/p/3822370.html
Copyright © 2011-2022 走看看