Flash基础入门之flashdevelop调用ios方法
小标 2019-02-21 来源 : 阅读 1178 评论 0

摘要:本文主要向大家介绍了Flash基础入门之flashdevelop调用ios方法,通过具体的内容向大家展现,希望对大家学习Flash基础入门有所帮助。

本文主要向大家介绍了Flash基础入门之flashdevelop调用ios方法,通过具体的内容向大家展现,希望对大家学习Flash基础入门有所帮助。

Flash基础入门之flashdevelop调用ios方法

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 
#import 

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文件位置执行下面蓝色命令打包就成

com.coolexp.aneFlex
1



libAneDemo.a
ExtInitializer
ExtFinalizer




打包.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,编译会报错

以上就介绍了Flash的相关知识,希望对Flash有兴趣的朋友有所帮助。了解更多内容,请关注职坐标常用软件Flash频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程