오랫만에 시간이 조금 남아서 ANE에 대해서 간단히 포스팅 해 보도록 할까 합니다.
기본적으로 AIR라는 녀석은 AIR runtime 위에서 돌아가게 됩니다. 따라서 일반적인 OS 단에서 제공하는 녀석들에 제약이 따르게 되겠죠.
이러한 제약을 뛰어넘기 위해서 존재하는 것이 바로 ANE Air Native Extension 이 되겠습니다.
자세한 내용은 Adobe 사이트를 참고해 보시면 될 것 같구요.
이녀석이 어떻게 돌아가는지를 개략적으로 설명해 보려고 합니다. 사실 이러한 내용보다는 구현에 초첨을 맞추어 포스팅 된 내용들이 인터넷 상에는 참 많이 존재하는데요. 직접 안드로이드 ANE를 만들어 보면서 설명하도록 하겠습니다.
먼저 저는 가난한 녀석이기 때문에 안드로이드 기기밖에 없기 때문에 안드로이드를 기준으로 설명합니다.
개발환경은 다음과 같습니다.
Adobe Flash Builder 4.7
ADT(eclipse)
정도가 됩니다. 그럼 하나씩 시작해 보도록 하겠습니다.
물론 참고사이트는 남자는 코딩님.. 사이트를 보셔도 될 것 같습니다. 같은 내용으로 진행 될 것이구요. 조금 더 자세하게 설명하여 취미로 개발하시는 분들을 위한 내용이라고 생각하시면 될 듯 합니다.
그럼 시작하죠
먼저 ADT를 실행시켜 봅시다.
일단 ADT 에서 프로젝트를 생성하는데요. 안드로이드로 생성해 주도록 합니다. 저는 다음과 같이 주었습니다.
그리고 Next를 누르게 되면
요렇게 나오는데 위에서 2가지 체크를 해제해 줍니다. 이건.. 이렇게 이해하시면 됩니다. 우리가 만드는 어플은 AIR 입니다. 하지만 우리가 AIR 의 ANE를 사용하기 때문에 안드로이드 프로그래밍을 해야 하는데요. 안드로이드 어플리케이션 프로젝트를 생성하게 되면 자동으로 Activity 와 어플의 아이콘이 나타나게 됩니다. 하지만 우리의 어플의 경우에는 AIR에서 이 부분을 처리하게 됩니다.
참고로 안드로이드 프로그래밍에서 Activity 는 하나의 화면이라고 생각하시면 됩니다. 즉, 우리는 우리의 AIR 어플의 화면을 보여줄 것이지… 안드로이드 어플의 화면을 보여줄 것이 아니기때문에 이 체크를 해제해 주도록 합니다.
물론 나중에 여러가지 이벤트를 위해서는 아무래도 activity를 상속하여 다른 화면으로 연결해야 할 경우도 생기지만 지금은 기본이기때문이 이렇게 진행하도록 하죠.
이제 제일 중요한 부분입니다.
우리의 플래시와 안드로이드를 연결하기 위한 부분입니다. 이부분에서 안드로이드의 라이브러리를 추가해 주어야 합니다. 프로젝트에서 우클릭을 한 후 맨 아래쪽의 프로퍼티를 클릭하면 다음과 같은 창이 생성됩니다.
요기에서 Add External JARs 를 클릭해서 자신의 플래시 빌더나 sdk 의 경로를 찾아가야 합니다.
제 경로는 이렇습니다.
C:\Program Files\Adobe\Adobe Flash Builder 4.7 (64 Bit)\sdks\4.6.0\lib\android
자신에게 맞는 경로로 찾아가면 다음과 같은 파일이 보일것입니다.
FlashRuntimeExtensions.jar
요 녀석입니다. 이녀석을 클릭한 후 확인 입니다. 그러면 위와 같은 창이 바뀌었을 것입니다. 그 후 OK를 누릅니다.
그 후 class 파일을 추가해 주도록 하겠습니다. Class 파일은 다음과 같이 만들겠습니다.
다음과 같습니다. 일단 간단히 설명해 보도록 하죠.
패키지는 As문법과 java 문법을 조금 해 보셨으면 아셨을 테니 패스하겠습니다만. 이녀석을 어떻게 정해주느냐가 중요합니다. 나중에 쓰게 될 것이거든요.
그리고 이녀석은 토스트 기능을 넣을 테니 이렇게 해주면 될 것이구요.
그다음 중요한 부분입니다. 우리가 만드는 클래스의 경우에는 FREExtension 인터페이를 구현해야 합니다. 따라서 위의 빨간 사각형 부분을 만들어 주셔야 합니다. 그리고 아래에서 우리는 main 메소드가 필요없으니 체크 해제 하시고 finish를 눌러 주시면 되겠습니다. 그러면 다음과 같은 코드가 보이실 겁니다.
자동으로 생성되는 코드들은 우리가 인터페이스를 구현해야할 메소드들이 되겠습니다만. 간단하게 말씀드리면 처음의 메소드는 createContext 메소드만 다루어주면 문제가 없을 것입니다.
이녀석은 어떤일을 하는 것이냐 하면요.
우리가 flash 에서 이녀석을 부르게 됩니다. ANE를 한번이라도 다루어 보셨다면 아마 As에서 안드로이드 콘텍스트를 가지고 코딩을 해 보셨을 텐데요. 이녀석이 바로 그 콘텍스트를 반환하는 녀석이 되겠습니다.
따라서 우리는 이녀석을 호출하였을 경우 우리의 Context를 반환해야 합니다. 따라서 다음과 같이 코드를 작성하게 됩니다.
저는 반환하는 클래스를 MainContext라고 하겠습니다.(아시겠지만 이름은 자기 맘대로 정하시면 됩니다^^) 반환형이 FREContext인 녀석을 반환하게 되겠지요.
그리고 그냥 초보분들을 위한 팁을 이야기 해 보자면. 다음과 같이 코딩을 하면 아래에 빨간줄이 생기면서 에러를 발생시킬 것입니다. 요기서 컨트롤+1 을 눌러 주시면 바로 Class를 생성할 수 있게 됩니다.
이렇게 이렇게 되겠지요. 여기서에 우리는 FREContext를 확장해서 만들게 되겠습니다. Finish를 눌러 주시면
다음과 같은 코드가 생성되는 것을 보실 수 있을 것입니다. 우리는 getFunctions를 재정의 해서 코드를 작성해야 합니다.
그렇다면 FRECOntext가 하는 일은 무엇일까요? 이녀석은 우리가 사용할 클래스드를을 미리 연결해 놓는 녀석이라고 생각하시면 됩니다. 우리가 사용해야할 몇가지 기능들이 여기에 정의되는 것이 지요.
간단하게 생각하면 우리가 사용할 함수들을 여기에 미리 Map 에 넣어두는 것입니다. 그렇게 되면 As에서 그 함수들을 호출할 수 있게 되는 것이죠.
우리는 간단한 Toast를 만들 것이기 때문에 하나의 함수만 정의하겠습니다만. 여러가지 기능을 담고 싶으시다면 당연히 여기에 넣으시면 될 것입니다.
이렇게 작성이 되게 됩니다. Map 이라는 녀석은 자료구조쪽이라… 일단 java를 보시길 권장해드리구요. 굳이 java랑 친하게 지내지 않겠다! 라고 하시는 분은 이렇게 20행 처럼 코딩해 주시면 됩니다.
간단하게 설명하면 map이란 녀석은 Key 와 Value 로 구성됩니다. Map에서 Key에 해당하는 녀석을 부르면 거기에 맞는 value가 나온다고 생각하시면 됩니다. 또한 이때 Key는 우리가 AS에서 부르게 될 녀석이기 때문에 잘 생각하셔서 넣어주시면 되겠습니다. 구현은 아까와 마찬가지로 일단 지르고 보는거죠.
그렇게 되면 빨갛게 되면서 에러를 만듭니다. 왜냐하면 그런 클래스가 없거든요. 왜 없느냐? 구현해야 하니까요..ㅜㅜ 그리고 한가지 더… 아래쪽에 return null 이 되어 있는데요. 요기에서 우리의 map을 반환해야 합니다. 따라서 다음과 같이 고쳐주도록 하겠습니다.
그리고 에러가 난 부분에 가서 Ctrl + 1을 눌러서 클래스를 생성하도록 합니다.
다음과 같은 창이 생성되는데요. 우리가 만들 MakeToast라는 클래스는 인터페이스인 FREFunction 를 구현해야 합니다. 뭐 별다른건 없구요 바로 Finish 입니다.
다음과 같은 코드가 생성이 됩니다.
자 여기에서 부터가 진짜에요. 잘 보셔야 해요.
일단 매계변수를 살펴보죠… FREContext 형이 옵니다. 아까도 말씀드렸던 부분이거든요. 우리의 AIR 앱은 하나의 콘텍스트라고 생각하시면 됩니다. 여기에서 arg0에 있는 것이 바로 우리의 콘텍스트가 될 것입니다. 우리는 이 위에 뭔가 작업을 할 것이니까 눈여겨 봐 두시구요. 그다음에 중요한 녀석이 바로 FREObject[] 입니다. 이녀석의 FREObject 형인데요. 우리가 AS에서 전달해 주는 값이 이런 타입으로 오게 됩니다. 따라서 우리가 어떠한 겂을 보내던지 FREObject 형식의 배열로 오게 됩니다. Arg1에요. 따라서 우리가 어떠한 값을 여기에 던지게 되면 우리는 그 값을 불러다가 형 변환이 필요하게 됩니다. 형 변환을 하는 메소드는 다음과 같습니다.
getAsBool
getAsInt
getAsString
…
이런 녀석들을 가지고 불러오게 됩니다. 일단 우리는 이 쪽으로 텍스트를 던질 것입니다. 따라서 getAsString 메소드를 사용해야 하겠지요. 다음과 같이 구현해 보도록 하겠습니다.
그런데 문제가 있습니다. 이렇게 해 주었을 경우에… 에러가 표시됩니다. 사실 여기에 던질 수 있는 것들이 원채 많기 때문에 try catch 로 구현해 주어야 합니다. 따라서 우리의 단축키인 Ctrl+1 을 누질러 보세요.
그러면 try catch로 감싸기가 있습니다. 클릭해 주시면 자동으로 완성해 줍니다.
이렇게요.. 지금까지 한 것은 우리가 받은 변수를 msg 라는 String 타입으로 저장을 한 부분입니다. 그러면 이제 메세지를 띄워 주도록 해 봅시다.
Toast.makeText(arg0.getActivity(), msg, Toast.LENGTH_SHORT).show();
이렇게 해 주도록 하죠.
Toast.makeText라는 메소드의 경우에는 3가지 매계변수를 받습니다. 첫번째가 콘텍스트 두번째가 메세지, 세번째가 시간입니다. 그런데 한가지 궁금증은 왜 arg0이 콘텍스트라고 했으면서 바로 적용을 못하는가 인데요. 사실 이녀석의 타입은 FREContext 입니다. 따라서 바로 적용은 안되구요. 여기에서 getActivity를 통해서 activity를 반환하게 됩니다. 그런데 context와 activity의 관계가 궁금하시다면… 안드로이드 프로그래밍에대해서 공부해 주세요~ ㅎ
자 이렇게 되면 안드로이드 부분은 끝이 난 것입니다.
간단하죠?
이녀석을 다시 플래시 쪽으로 옮겨가야 합니다.
Src 폴더를 클릭한 후에.. 우클릭 하셔서 export 를 선택합니다.
JAR file 선택하시구요.
적당한 이름을 주신 후에…(경로는 맘대로입니다..) 끗 입니다.
여기까지가 안드로이드 부분의 끝입니다… 다음 내용은 다음 시간에 하는 것이 인지상정!
다음 부분에서 찾아 뵙도록 하죠.
'Flash with Adobe AIR' 카테고리의 다른 글
Starling-Hungry Hero-05 (0) | 2015.02.16 |
---|---|
Starling-Hungry Hero-04 (0) | 2015.02.16 |
Starling-Hungry Hero-03 (0) | 2015.02.16 |
Starling-HungryHero-02 (0) | 2015.02.16 |
ANE for Android -2 (0) | 2015.02.11 |