flashdevelop調用ios方法

來源:互聯網
上載者:User

標籤:blog   http   使用   檔案   os   art   

來源: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,編譯會報錯

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.