본문 바로가기

ActionScript/AS3.0

AIR Native Extension - ANE 만들기 for Android

포스팅은 반말로 진행됩니다.





서막

난 엊그제까지 ANE 파일을 만들 줄 모르는 사람이였다.
아마 이글을 보고 있다면 당신도 십중팔구 그럴 확율이 높다.

하지만 오늘의 난 다르다. 새롭게 태어났다. 오늘부터의 나는 ANE 크리에이터.
당신도 새롭게 태어날 수 있다. 언제나 처음이 어려운법.

ANE 제작에 대한 포스팅은 이미 여기저기에 존재하지만 그렇게 많은편은 아니다.
더욱이 그 몇몇의 포스팅조차 조금조금씩 빠진 부분이 있다. 물론 어느정도의 지식이 있는 사람이라면 
턱! 하고 던져도 탁! 하고 받을테지만 전혀 모르는 나같은 사람도 있을 것이다.

그래서 다음 타자가 될 당신을 위해 여기저기의 정보를 조합해 패키지로 묶은 포스팅을 제공하고자 한다.
디테일한 정보나 지식은 없지만 어째든 따라한다면 ANE를 만들 수 있을 것이다!!

여기에 쓰여진 정보와 코드는 모두 다른분들의 포스팅에서 참고하였다.
참고한 포스팅의 링크는 마지막에 제공한다.





ANE?

ANE 는 AIR Native Extension 의 약자이다.
AS가 접근할 수 없는 장치별 기능에 접근할 수 있도록 한다.
난 쿨한 남자이므로 구구절절한 설명은 적지 않겠다.

SWC는 익숙할 것이다. ANE 도 SWC와 같다.  단지 특정 운영체제의 네이티브코드가 포함되어 있을 뿐.
사용법도 SWC와 거의 동일하다.

사용에 할때 우린 ANE 속이 어떻게 만들어졌는지 알 필요가 없다.
그저 등록하고, 객체를 만든 뒤, 사용하면 된다.


상세한 정보를 원한다면 Adobe AIR용 Native Extension 사용 여기를 참고하자.

만들어진 ANE를 사용해보고 싶다면 Native extensions for Adobe AIR 이곳에서 다운을 받자.



물론 오 쓸만하겠는데? 하는 것은 유료이다(ㅋㅋ).  상단에 Vibration 같은 샘플은 무료이니 사용해볼 수 있겠다.



애네들이 무료이다.



저길 누르면 다운받을 수 있다.




혹시 사용법을 모르는 사람을 위해 링크를 제공하여 주겠다. 무려 동영상으로 되어있다.

보고나면 너무 쉬워 허탈할 것이다. 쫄지말자. 한국어로 설명해주신다.


How to use an ANE with Flash Builder 4.6

How to use an ANE with Flash CS 5.5

How to use an ANE with Flash CS 6






우리의 목표


이제 우리는 ANE를 만들어 볼 것이다. 하지만 거기에 앞서 자그마한 물리적 한계가 있다.

...난 맥이 없다ㅜㅜ


그러므로 타켓 플랫폼은 Android 가 될 것이다. 사실 있어도 xcode 사용방법도, ObjectC 도 모른다 헤ㅔㅎ;


나와 반대로 맥과 아이폰만을 가지고 있다고 해도 걱정말자.

여기저기 둘러본 결과 ANE를 만드는 과정은 둘 모두 거의 동일하다.


목표는 as3의 코드로 Android 폰의 Toast 기능을 사용하는 것이다.
Toast 는  Android 폰에서 제공하는 작은 팝업 대화상자를 통하여 간단한 메시지를 전하는 기능이다.

네이티브코드에 접근하여 사용하는 것에 초점을 맞추기 위하여
Toast 에 대한 자질구레한 설명이나 기능 구현은 하지 않는다.
단순히 호출만 한다. 


Toast





준비


대상이 Android 이므로 당연히 java 코딩이 필요하다.
별다른 작업을 하지 않을것이기 때문에  java 에 대해 몰라도 걱정말자.

우선은 java코딩을 위한 준비를 하기 위해 이클립스를 다운받아야 한다.
iOS 라면 xcode 가 되겠다.
이과정이 필요없다면 스크롤을 쭉 내리자.



젤처음 해야할일은 아래 3가지이다.

1.이클립스다운

http://www.eclipse.org/


2.자바 설치

http://www.oracle.com/technetwork/java/javase/downloads/index.html


3.환경변수 등록


처음 깔아본다면 수많은 이클립스와 자바의 버전에 당황할 수 있다.

자판기 커피만 먹는 사람에게 스타벅스 메뉴판을 보여주며 '무슨 커피요?' 할때의 그런 기분이겠지.

이 3가지 절차에 대한 자세한 설명은 생략한다.  이건 검색하면 수도 없이 나온다.

우리 사이버전사들에게 이딴 절차는 누워서 껌먹기이다. 모른다면 검색을 통해 얼른 클리어하자.


4.안드로이드 SDK 및 ADT 설치


3번 퀘스트까지 완료 했다면 이클립스를 실행하자. 이클립스는 처음이라도 Flash Builder 는 사용했으리라 믿는다.

둘 모두 또이또이 이므로 익숙할 것이다.

메뉴의 Help > Install New Software  를 선택하면 창이 하나 뜬다.

add 버튼을 눌러 Loacation 항목에 http://dl-ssl.google.com/android/eclipse/ 를 입력하고 OK 를 누르자.

Android 어쩌고 저쩌고 하는 뭔가가 여럿 나올텐데 잘 모르겠다면 쿨하게 모두 체크하고 진행하면 된다.



쿨하게 체크



이후엔 흔하디 흔한 설치 과정이 시작된다. 딱히 할말은 없다.

건장하고 호쾌한 대한민국 국민답게 그저 next, 읽진 않았지만 accept , 뭔지 모르겠지만 ok 하면 된다.

이후 재시작 하면 또 뭔갈 물어보기 시작한다. 역시 모르겠다면 그냥 ok,next 하자. 끽해봤자 포맷이지. 쫄지마.


완료되면 메뉴의 windows - android SDK Manager 를 선택하자.

설치가능한 패키지 목록이 나오는데 적당히 필요한 걸 받으면 된다.

이것들은 필요하다면 다시 android SDK Manage를 통해 설치하거나 제거할 수 있다.


사실 여기서만큼의 자신의 쿨함을 조금 자제할 필요가 있다. 모두 선택하면 지옥의 인스톨시간이 닥친다.

최소한 2.2 (API 8) 버전은 받자. 

만약 android SDK Manage 메뉴가 보이지 않는다면 Perspective 가 Java 가 맞는지 확인하자.


위 과정은 이클립스 버전에 따라 조금씩 틀릴 수 있다. 자세한 내용을 원하다면 역시 따로 검색을 하자.





구성


ANE 파일은 네이티브코드, swc, extension.xml 로 구성되어 있다.

네이티브코드는 플랫폼에 따라 .a 혹은 .jar 등이 된다.

실제 기능 구현은 네이티브쪽에서 하고  swc을 통하여 as3와 연결된다.

굳이 지금 이해가 되지 않아도 무슨말인지 곧 알게 될것이다.

백문이 불여일Run.





네이티브코딩(java)


우선 이클립스에서 Android Application Project를 만들자.

이클립스 버전에 따라 조금씩 다를 수 있다.

나는 아래와 같이 설정했다.



지금와서 보니 Tost 가 아니라 Toast 였다..... 이딴 조그마한 실수는 그냥 없던일로.

next를 누르자.



아이콘과 activity 는 ane를 만들 땐 필요가 없으므로 체크 해제 한다. Workspace는 편한 곳으로 설정하면 된다.



이젠 플래시와 네이티브 코드를 연결하기 위한 각종 클래스와 함수를 추가해야 한다.

Flash BUilder 설치 폴더/sdks/버전/lib/androde 폴더에 보면 FlashRuntimeExtension.jar 파일이 있을 것이다.

이를 Libraries 에 추가한다.




xcode 의 경우  FlashRuntimeExtension.h 파일이 필요하다.

 FlashRuntimeExtension.h 파일은 Flash BUilder 설치 폴더/sdks/버전/include 폴더에 있다.


준비가 길었다. 벌써 지치면 곤란하다. 사실은 포스팅하는 나도 지쳐서 그만 할까 싶은 마음이 지금 살짝 듬.

이제 코딩을 시작하자.


우선은  FreeExtension 인터페이스를 구현한 클래스를 생성해야 한다.

ToastExtension 이라는 이름으로 클래스를 생성하겠다.


ToastExtension


이 클래스는 FreContext 를 상속한 클래스의 객체를 반환하는 역할을 한다.

반환되는 객체는 FreContext 를 상속한 ToastContext 클래스이며 as3는 반환되는 이 context 객체를 가지고 사용하게 된다.

당연히 이 ToastContext 클래스는 아직 존재 하지 않음.

만들자.



ToastContext


이 클래스에서 해야 할일은 getFunctions 메서드를 통해 함수목록을 반환하는 것이다.

함수목록은 문자열 , FREFunction 을 구현한 객체 로 매칭이 이루어지는데

이 때 문자열은 나중에 as3에서 호출할 메서드의 이름이 된다.

'toast' 를 통해 실제 호출 될 함수는 ToastFunction 가 되는 거임.

당연히 ToastFunction 클래스는 FREFunction 인터페이스를 구현해야 하며 아직 존재 하지 않는다 ㅋ

만들자.



ToastFunction


여기 call 에서  실제 기능을 구현하면 된다.

첫번째 인자는 context 이며 두번째는 as3에서 함수를 호출했을때 전달되는 인자들이다.

이는 문자열일수도 있고 bool 혹은 int 값일수도 있다. 구현할 기능에 따라 바뀌겠지만 중요한건

바로 쓸 수 없고 네이티브 변수로 바꿔야 된다는 점이다.

이 예제에서는 문자열을 통해 Toast를 띄울 것이므로 getAsString() 을 사용했다.

코드가 모두 간단해서 딱히 설명할게 없다;; 네이티브 쪽 코드는 이것이 끝이다.




마지막으로 jar 파일을 만들면 된다.

src 에 마우스 우클릭을 눌러  Export 메뉴를 선택하자.

java 폴더에 보면 JAR file 이 있을 것이다. 선택하고 next를 누르면 저장할 곳을 지정할 수 있다.

어디든 상관없다. 편한 곳에 저장해두자. 나중에 쓰게 된다.


이제 이 jar 와 as3를 연결시켜줄 swc를 만들 차례이다.





SWC 생성


swc에 속한 as3클래스를 통해 좀전에 만든 java쪽 코드를 사용하게 된다.


Flash Builder 를 실행시키고 Flex Library Project 를 생성한다.

이때 include Adobe AIR libraries 가 체크되어 있는지 꼭 확인하자.




실제로 우리가 코딩때 사용할 클래스를 만들어야 한다.



ToastExtension.as


이게 끝이다. 너무 간단해서 할말을 잃었다.

createExtensionContext 의 첫번째 인자인 extensionID 는 ane를 구별하는 유일한 값이다.

일단 지금은 무엇을 해도 상관은 없으나 구별이 될수 있도록 정하자.

여기서 정한 문자열은 나중에 extension.xml 에서 id로 사용되게 된다.

toast 메서드를 실행하면 context의 call을 호출하여 'toast' 문자열을 넘기는데

좀전에 java로 작성한 ToastContext 클래스의 getFunctions 에서 만든 맵을 통해

ToastFunction 함수가 실행이 된다. 당연히 message 도 전달이 된다.

이런식으로 as3과 네이티브코드가 연결이 되는 것이다.


이제 bin 폴더를 보면 swc가 생성되어 있을 것이다.

만약 없다면  메뉴 Project - Build All 을 눌러 생성하자.

이제 남은 것은 extension.xml 이다.




extension.xml


앞서 만든 swc와 jar 의 관계를 정의하는 것이 바로 이 extension.xml 이다.

xml 구조에 대한 자세한 정보는 Native extension descriptor files 이곳에서 확인하자.




만약 대상플랫폼이 iOS 도 해당된다면 위의 형태로 이루어지게 된다.

id 는 ane 구별하는 유일한 값이다. swc를 만들때 사용했던 createExtensionContext 메서드의 첫번째 인자와 동일해야 한다.

initializer 와 finalizer 는 각각 초기화와 소멸에 관련된 함수를 설정한다.


이 예제의 경우 Android 만을 대상으로 하기 때문에  <platform name="iPhone-ARM"> 노드는 필요가 없다.




여기서는 initializer  는 java  의 com.lpesign.extensions.ToastExtension 가 되겠다.

패키지명까지 써줘야 한다는것을 잊지 말자.

finalizer 는 없어도 될것같은데 설정하는 사람도 있고 아닌 사람도 있어서 잘모르겠다;

어쨌든 다 작성했으면 적당한 곳에 저장하자.





build.xml


여태까지의 작업을 통하여 우리는  jar파일과 swc , extension.xml 을 보유하게 되었다.

재료는 모두 준비되었으니 이제 이것을 퓨젼하여 ane 파일을 만들어야 한다.

쿨한 포스팅이기에 커맨드라인이니 ANT 니 ADT 등에 대한 설명은 일단 모두 패스한다.

여러포스팅에서 이부분에 대한 설명을 해주고 있으나 전혀 관련지식이 없는채로 보면 오히려 혼란에 빠질수도 있다.

우린 과정을 생략하고 바로 돌직구로 간다. 


SWC를 만들 때 생성했던 프로젝트의 bin 폴더에 우리의 재료를 모두 옮긴다.

그리고 root Directory 에 build.xml 이라는 이름으로 xml파일을 하나 만든다.




build.xml 은 아래와 같다.



<property> 부분은 변수로 사용할 것들이다.
SDK_PATH 의 value 값은 각자 Flash Builder 설치 경로에 맞게 수정하자. 

unzip 부분은 만들어진 SWC에서 library.swf 를 뽑아내기 위해서 사용된다.
직접 swc를 압축해제 하여 labrary 를 가져오거나 
Flex Library Compiler 메뉴의 Additional compiler arguments 에 -locale en_US -directory=true -output=swf 를 통하여
생성을 한다면 필요없는 부분이다.

이후 java 노드의 내용은 이게 도대체 뭐지? 싶을테지만 몰라도 그냥 그러려니 하고 넘어가자.

build.xml을 열어둔 화면에서 f11를 누르면 창이 하나 뜰것이다. Ant Build 를 선택한다.

그럼 ane 파일이 bin 폴더에 생성될 것이다.


(짠)


만약 에러가 나거나 ane 파일이 생성 되지 않는다면 같이 생성되었을 build.log 파일을 열어보자. 에러에 대한 정보가 나와있다.


사실 위 build.xml 은 개선의 여지가 있다.

만약 .jar 파일이나 .a파일이 변경되거나 업데이트 된다면 조금 귀찮아 질 것이다.

extension.xml 과 build.xml 이 분리되어 있어 양쪽을 모두 신경써야 한다는 점도 맘에 들지 않는다.


이 포스팅은 ane 파일 생성에 초점을 맞춰기 때문에 이 이상 들어가지 않지만 조금 더 알고 싶다면 

ADT(AIR Debeloper Tool)  이곳을 방문하여 정독까지는 아니더라도 한번은 쭉 읽어보자





사용


사용은 쉽다.


디바이스에 설치하여 화면의 버튼을 누르면 으아앙이 출력될 것이다.

참고로 에뮬레이터나 디바이스가 아니라면 실행이 되지 않는다.


이로써 ane파일을 만들어 보았다.

뭔가 열심히 한것 같지만 사실  ane 계의 헬로우 월드 수준이다 ㅋㅋ 

하지만 이젠 뭘 해야할지, 훌륭한 ane를 만들기위해 무엇을 공부해야 할지 감이 왔으리라 믿는다.



참고블로그

http://sewonist.com/?p=2855

http://rduk.tistory.com/105

http://wooyaggo.tistory.com/394

'ActionScript > AS3.0' 카테고리의 다른 글

페이스북 게임 <용자되기>  (0) 2012.12.08
MP3 Player  (0) 2012.11.15
Message Queueing  (0) 2012.07.16
올플래시 사이트에서 페이지이동할땐? - SWFAddress doc  (0) 2012.07.13
호 그리기 (drawArc). ASCBLibrary  (4) 2012.03.11