이번 강좌에서는 iOS와 짝을 이뤄 *.ane를 구성할


Flash 라이브러리를 만들어보겠습니다.




1. 라이브러리 생성


File > Flex Library Project 로 새로운 프로젝트를 생성해줍니다.



Command + N으로 새로운 클래스를 추가해줍니다.



클래스의 패키지나 이름은 크게 상관없습니다.


가능하면 패키지로 자세히 구분해주는게 좋습니다.


먼저 Extension의 아이디를 지정해줘야합니다.


여기서는 wooyaggo.extension.Alert이라고 하였습니다.


package
{
	import flash.external.ExtensionContext;

	public class AlertExtension
	{
		static public const EXTENSION_ID: String = "wooyaggo.extension.Alert";
		
		public function AlertExtension()
		{

		}
	}
}

이제 Extension 객체를 생성해줘야합니다.


ExtensionContext.createExtensionsContext( "[[Extension ID]]", "[[Extension Type]]" )


으로 생성해줍니다.


Extension Type은 null로 주셔도 무방합니다.


이 Extension을 통해서 메소드를 호출하려면


ExtensionContext.call( "메소드명", [파라미터1, 파라미터2...] );


과 같이 합니다.


코드 나갑니다.


package
{
	import flash.external.ExtensionContext;

	public class AlertExtension
	{
		static public const EXTENSION_ID: String = "wooyaggo.extension.Alert";
		
		private var _extension: ExtensionContext;
		
		public function AlertExtension()
		{
			_extension = ExtensionContext.createExtensionContext( EXTENSION_ID, null );
		}
		
		public function alert( $title: String, $message: String ): void
		{
			_extension.call( "alert", $title, $message );
		}
	}
}


우리가 미리 iOS에서 지정해준 것 처럼


FRENamedFunction* function = (FRENamedFunction*) malloc( sizeof(functionNumber) );
function[ 0 ].name = (const uint8_t *) "alert";
function[ 0 ].functionData = NULL;
function[ 0 ].function = &alert;


"alert"으로 지정해줬다면 호출할 때도 "alert"로 해야됩니다.




끝이에요.


-_-a


라이브러리는 별로 할게 없어요 ㅋㅋㅋ


이제 bin 폴더에 보면 다음과 같이 swc가 보일겁니다.



이 swc 파일과 iOS의 libAlertExtension.a 이 두 파일과 몇가지 설정을 담은 설정파일을 통해서


ane 파일을 만들 수 있게 되는 것이죠.


여기까지는...


...


쉽죠 


난관은 이제부터입니다.





2. ADT 연습


*.ane 파일은 빌더에서도 지원해주는 툴이 없습니다.


오로지 직접 컴파일을 커맨드상으로 돌려줘야합니다.


커맨드 상에서 직접 해줄 수도 있지만


컴파일러를 직접 다뤄본적 없는 경우에는 매우매우 까다롭습니다.


그래서 Flash Builder에 기본적으로 깔려있는 ANT빌드로 하나하나 테스트해가면서 만들어 볼 겁니다.


자 먼저 build.xml 파일을 만들어봅시다.



New 에서 File을 선택하여 "build.xml" 파일을 만듭니다.



아무 내용도 적지 않았는데


위 그림과 같이 에러가 나타난다면


ant가 제대로 동작하고 있다는 뜻입니다.


build.xml은 ANT 빌드의 기본 파일명이기 때문입니다.


프로젝트 안에 "build.xml" 파일이 있으면 그냥 xml 파일이 아니라


ant 컴파일 파일로 인식하기 때문에


정해진 형식이 아니라고 에러가 나는 것입니다.


다음과 같이 테스트 코드를 적어봅시다.



	
	
		TEST
	
	


위와 같이 코드를 적고 저장한 후에 


Command + F11을 누르면 다음과 같이 어떻게 실행할 것인지 물어봅니다.


(환경에 따라서 안물어볼 수도 있어요)



ant 로 선택하고 OK 버튼을 누르면 


다음과 같이 console 창에 <echo> 노드에서 적은 문자열이 출력됩니다.


ant 빌드에서 ActionScript의 trace 같은 역할입니다.


<echo file="memo.txt">TEST</echo>


라고 해주면 memo.txt 파일을 만들어서 그 파일 안에 적는 기능도 가능합니다.


ant 빌드에서 파일을 만들어서 XML 내용을 적거나 할 때 사용합니다.




이제 다음과 같이 컴파일에 필요한 변수들을 지정해줍니다.



	
	
		
		
	
	

이렇게 변수들을 지정해놓고 다음과 같이 사용할 수 있습니다.



	
	
		
		
		
		Extension Name is ${EXTENSION_NAME}
		Extension ID is ${EXTENSION_ID}
	
	


이렇게 하고 Command + F11을 하면



위와 같이 console 창에 찍히는 모습을 볼 수 있습니다.


다음 단계로 넘어가기 전에


이번 컴파일에서 사용될 변수들을 살펴보겠습니다.


많습니다 준비하세요~



	
	

		
		
		
		
		
		
		
		
		
		
		
		
		
		
	
	


iOS 파일관련된 부분은 이전강좌에서 다뤘던 내용입니다.


헷갈리지 않도록 잘 변수들을 설정해줍니다.


이제 환경 설정은 끝났고


본격적으로 ant 컴파일을 짜보도록 하겠습니다.




3. ADT 빌드


이제 만들어진 파일을 토대로


adt 빌드를 하기위해서는 다음과 같이 준비과정이 필요합니다.


 - swc 파일을 압축을 해제하여 library.swf 를 뽑아낸다.

 - libAlertExtension.a 파일을 복사하여 가져온다.

 - Extension 환경설정을 담은 extension.xml 파일을 생성한다.


먼저 swc 파일을 압축을 풀어보도록 하겠습니다.



	
	
		
		... 생략 ...		

		
		
	
	


위와 같이 unzip 커맨드를 추가한 후에 Command + F11로 돌려보겠습니다.


위 그림과 같이 swc 파일이 풀려서


catalog.xml과 library.swf 파일이 만들어진것을 볼 수 있습니다.


(풀린 파일이 보이지 않는다면 프로젝트나 폴더를 선택하고 F5를 눌러서 새로고침해주면 보입니다.)


이번에는 libAlertExtension.a 파일을 복사해와보겠습니다.



	
	

		... 생략 ...
		
		
		
		
		
	
	


위와 같이 <copy> 커맨드를 이용해서 bin 폴더로 libAlertExtension.a 파일을 복사해옵니다.


컴파일 해본 후 bin 폴더에 제대로 복사가 됐는지 확인합니다.



이번에는 extension.xml 파일을 생성해보도록 하겠습니다.


처음에 배웠던 <echo file=""> 커맨드를 이용해서 다음과 같이 작성합니다.



	
	

		... 생략 ...
		
		
		
		
		
		
	  ${EXTENSION_ID}
	  1
	  
	      
	        
	          ${iOS_EXTENSION_NAME}
	          ${EXTENSION_NAME}Initializer
	          ${EXTENSION_NAME}Finalizer
	        
	      
	  
]]>
		
	
	


주의할 점은 ${EXTENSION_NAME}Initializer 가 가리키는 것은


iOS 코드에서 우리가 AlertExtensionInitializer 메소드를 가르켜야합니다.


Command + F11로 컴파일하여 extension.xml 이 만들어지는지 확인하고


extension.xml 파일을 열어서 내용을 확인합니다.




extension.xml 내용이 제대로 다음과 같이 만들어졌는지 확인합니다.



	  wooyaggo.extension.Alert
	  1
	  
	      
	        
	          libAlertExtension.a
	          AlertExtensionInitializer
	          AlertExtensionFinalizer
	        
	      
	  


위와 같이 작성되었다면 이제는 마지막인 adt 컴파일러로 ane 파일을 만들차례입니다.


먼저 adt 파일이 제대로 동작하는지 다음과 같은 코드를 작성해봅시다.



	
	
		
		... 생략 ...
		
		
		
		
		
		
	  ${EXTENSION_ID}
	  1
	  
	      
	        
	          ${iOS_EXTENSION_NAME}
	          ${EXTENSION_NAME}Initializer
	          ${EXTENSION_NAME}Finalizer
	        
	      
	  
]]>
		
		
		
	
	


이 상태에서 ant 컴파일을 해보면


다음과 같이 콘솔에 찍힐겁니다.



정상입니다.


Result 가 출력됐단 얘기는


adt 는 정상적으로 실행되었지만 2 라는 exit code로 종료되었다는 뜻입니다.


뭔가 파라미터가 빠졌거나 컴파일 중에 오류가 발생했을 때 나타나는 메세지 입니다.


output 어트리뷰트에 적어준 파일에 관련된 에러 출력이 저장됩니다.


build.log 파일을 열어서 내용을 살펴봅니다.



어떤 파라미터도 오지 않아서 종료되었다고 나타납니다.


그 밑에는 adt 를 어떻게 활용해야되는지 도움말이 나타납니다.


ane 파일을 만들기 위한 사용방법은


adt -package SIGNING_OPTIONS? -target ane <output-package> <ext-desc> ANE_OPTIONS


입니다.


SIGNING_OPTIONS 는 이번 강좌에서는 생략이 가능합니다.


ANE_OPTIONS 는 도움말에 따르면


-swc <swc> ( -platform <name> (-platformoptions <file>)? <fileOrDir>* ( -C <dir> <fileOrDir>+ )* )*


라고 쓰여있습니다.


우리가 사용할 커맨드는 다음과 같습니다.


adt -package -target ane (ane 파일) (extension.xml 파일) -swc (swc 파일) -platform iPhone-ARM library.swf (libAlertExtension.a 파일)


파라미터를 ant 빌드에 추가해보겠습니다.



	
	
	
	
	
	
	
	
	
	
	


위와 같이 변수를 적용하여 작성이 완료되면 


컴파일을 돌려보겠습니다.




console 창에 정상적으로 오류 없이 완료되면


위 그림과 같이 ane 파일이 생성됩니다.


오류가 난다면


build.log 파일에 에러 로그가 찍히게 됩니다.


해당 에러로그를 잘 파악하여 어떤 부분이 잘못됐는지 잘 살펴봐야합니다.




이로써 ane 파일을 만들게 되었습니다.


바로 이 ane 파일을 가지고 Flash Builder 4.6 이상에서는 사용할 수 있게 됩니다.


하지만 다음 강좌에서는 ant 빌드로 확장해서


아이폰에 직접 설치까지 하는 강좌를 진행해보겠습니다.




라이브러리 다운로드 :


AlertExtensionLibrary.zip


+ Recent posts