来源: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 sdk\4.6.0\bin\adt" -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,编译会报错

flashdevelop调用ios方法的更多相关文章

  1. [iOS Hybrid实践:UIWebView中Html中用JS调用OC方法,OC执行JS代码]

    原理: 1.JS调用OC 每次webview执行跳转时都会被iOS给拦截,执行下面函数获得系统允许. 因此可以根据跳转信息转给系统,执行相应功能,比如打开相册等. // 网页中的每一个请求都会被触发 ...

  2. js调用ios的方法

    摘要 在做h5应用的时,有时有些功能js并不能实现的特别完美.比如下载进度条或上传文件进度等.如果能调用ios或者android的方法,实现进度,以及文件上传或者下载列表更好一些.如果使用第三方的js ...

  3. iOS js oc相互调用(JavaScriptCore)---js调用iOS --js里面通过对象调用方法

    下来我们看第二种情况 就是js 中是通过一个对象来调用方法的. 此处稍微复杂一点我们需要使用到 JSExport 凡事添加了JSExport协议的协议,所规定的方法,变量等 就会对js开放,我们可以通 ...

  4. 转载 OS js oc相互调用(JavaScriptCore) ---js调用iOS ---js里面直接调用方法

    OS js oc相互调用(JavaScriptCore)   接着上节我们讲到的iOS调用js 下来我们使用js调用iOS js调用iOS分两种情况 一,js里面直接调用方法 二,js里面通过对象调用 ...

  5. iOS JS 交互之利用系统JSContext实现 JS调用OC方法以及Objective-C调用JavaScript方法

    ios js 交互分为两块: 1.oc调用js 这一块实现起来比较简单, 我的项目中加载的是本地的html,js,css,需要注意的是当你向工程中拖入这些文件时,选择拷贝到工程中,(拖入的文件夹是蓝色 ...

  6. ios想要取消执行延时调用的方法

    想要取消执行延时调用的方法: [[self class] cancelPreviousPerformRequestsWithTarget:self selector:@selector(hideDia ...

  7. 【iOS和HTML 5交互】iOS中加载html5调用html方法和修改html5内容

    近期项目开发中用到了这方面的技术了,那我们一起来看看. 1.利用webView控件加载本地html5或者网络上html5 2.设置控制器为webView的代理,遵守协议 3.实现代理方法webView ...

  8. [Unity2d系列教程] 004.Unity如何调用ios的方法(SDK集成相关)

    和上一篇类似,我们同样希望Unity能够直接调用IOS底层的代码,那么我们就需要研究怎么去实现它.下面让我来带大家看一个简单的例子 1.创建.h和.m文件如下 .h // // myTest.m // ...

  9. JS调用OC方法并传值,OC调用JS方法并传值////////////////////////zz

     iOS开发-基于原生JS与OC方法互相调用并传值(附HTML代码)     最近项目里面有有个商品活动界面,要与web端传值,将用户在网页点击的商品id 传给客户端,也就是js交互,其实再说明白一点 ...

随机推荐

  1. 将linux上的网站代码托管到gogs git服务器上进行实时同步(实战)

    一.说明 本说明只针对php,其他语言需要编译请用别的架构实现 二.实现效果 本地开发员门提交推送代码到git服务器,会立即同步更新网站服务器上代码 三.实战步骤小节 首次托管请先看   https: ...

  2. jenkins报错Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password) 的处理

    问题背景:jenkins服务器发布代码后需要执行删除缓存的操作ssh -p222 eus_pe_devadmin@1.1.1.1 "sudo rm -rf /dev/shm/nginx/hi ...

  3. Spring整合Redis,并配置Jedis连接池

    目录 只言片语 创建redis连接池的配置文件 单机版 spring整合redis(使用JedisPool) 项目中使用示例 集群版 spring整合redis(使用JedisCluster) 项目中 ...

  4. matlab学习笔记6--性能剖析

    一起来学matlab-matlab学习笔记6 性能剖析 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 <matlab 程序设计与综合应用>张德丰等著 感谢张老师的书籍, ...

  5. [Tableau] Tableau for BI

    主要链接 Tableau AWS 上的 Tableau Server Tableau on AWS Quick Starts Tableau教程[本篇来源] Tableau Desktop for U ...

  6. SQL server触发器学习记录

    作为C#程序员,我工作内容基本就是winform,wpf,asp.net.sql接触的比较少,今天突然来了一个ticket要我修改触发器脚本....只会select*的我顿感迷茫... 需求描述:as ...

  7. Python3 列表list合并的4种方法

    方法1: 直接使用"+"号合并列表 aList = [1,2,3] bList = ['www', 'pythontab.com'] cList = aList + bList   ...

  8. Elasticsearch集群+kibana

    目录: 软件及环境准备 JDK安装配置 ElasticSearch安装及配置 启动ES集群 es常规操作 安装及配置ES前端图形化操作工具 kibana汉化及时区修改 ElasticSearch和ki ...

  9. SpringBoot系列教程web篇之Thymeleaf环境搭建

    上一篇博文介绍了如何使用Freemaker引擎搭建web项目,这一篇我们则看一下另外一个常见的页面渲染引擎Thymeleaf如何搭建一个web项目 推荐结合Freemaker博文一起查看,效果更佳 1 ...

  10. 手写简化版SpringBoot

    Springboot项目全部依赖注解的,web工程是如何启动的 1 首先引入了Tomcat依赖,然后用java代码启动Tomcat容器,默认Tomcat版本是8.5版本 2 Tomcat是实现了ser ...