Tip And Tech2012. 1. 5. 13:10

ADT컴파일을 사용하기 위해서는 여러 방법이 있지만 여기서는 윈도우 명령프롬프트를 이용한 방법을 사용한다.
우선 AIR 프로젝트를 만들고 빌드하다보면 자연스레 bin-debug에 swf와 xml등 컴파일에 필요한 파일들이 생성된다.
나는 주로 bin-debug에서 테스트를 하였다.
컴파일 환경 XML파일을 열어 런타임이 3.0 이상인지 확인한다.
<application xmlns="http://ns.adobe.com/air/application/3.1"> XML파일 최상위에 이부분이다.
나의 경우는 3.1을 사용한다.

ADT를 사용하기 위해 기나긴 경로를 모두 적어주어도 좋지만 윈도우 환경 변수로 설정하여 adt명령문을 바로 사용하도록 한다.

컴퓨터 속성에서 고급시스템 설정에 환경변수를 추가한다.


본인의 Flash Builder의 설치 경로에  sdks폴더아래에서 현재 사용하는 SDK의bin폴더를 등록한다. 그러면 어느 경로에서든 접근이 가능해 진다.

작업 중인 프로젝트의 bin-debug폴더로 이동하면 swf와 XXX-app.xml이 있다. xml파일을 열면 <content>노드가 있다.
아마 <content>[This value will be overwritten by Flash Builder in the output app.xml]</content> 이렇게 되어있을 것이다. 값을 같이 있는 swf의 이름으로 변경한다.
예) <content>myApp.swf</content>

이제 컴파일 환경과 재료는 준비 되었다.

실행창에 CMD라고 입력하고 명령프롬프트에 ADT명령문을 입력한다. 프롬프트 위치는 컴파일할 xml과 swf가 있는 곳에서 실행하여야 한다.
adt -package -target apk-captive-runtime -storetype pkcs12 -keystore ../My_cert.p12 myApp.apk myApp-app.xml myApp.swf
참고) http://help.adobe.com/ko_KR/air/build/WS901d38e593cd1bac1e63e3d128cdca935b-8000.html

실행하면 인증서 암호를 입력하라고 한다.
본인의 인증서 암호를 입력하면 완료!! 귀찮으면 -storepass옵션을 AIR_SIGNING_OPTIONS영역에 추가하고 본인의 암호를 적는다.

Ant컴파일러를 사용하여도 좋고 배치파일을 만들어 사용해도 좋다. 나 같은 경우는 배치파일을 만들어 파일명과 옵션만 바꾸어 사용하도록 하였다.

문제1) Could not load keystore file<password may be incorrect> 암호도 맞고 모든게 정산인데 암호가 다르다고 에러가 나는 경우 인증서를 소스폴더에 두지 말고 다른 곳으로 두고 컴파일해 본다. 그래도 안되면 옵션이 잘 못 입력된 것이다.

문제2) Could not generate timestamp: Connection timed out: connect 라며 타임스탬프 서버와의 통신 에러나는 경우 본인의 JRE폴더에 lib폴더에 net.properties파일을 찾아 열어 아래의 항목을 고친다.
java.net.useSystemProxies=false -> java.net.useSystemProxies=true

문제3) 이번 경우가 아닌 AIR컴파일의 경우인데 Could not generate timestamp: handshake alert: unrecognized_name이라고 에러가 나면 -tsa none으로 설정한다.
참고 http://help.adobe.com/ko_KR/air/build/WS5b3ccc516d4fbf351e63e3d118666ade46-7f72.html

이 밖에 ADT 오류 메시지 http://help.adobe.com/ko_KR/air/build/WSBE9908A0-8E3A-4329-8ABD-12F2A19AB5E9.html

Posted by 버터백통
Tip And Tech2012. 1. 4. 16:39

우선 거지 같은 AIR ADT;;;;

ADT는 콘솔을 사용하여 커맨드 입력을 통해 직접 컴파일하고 컴파일 옵션 등을 설정하여 개발자가 컴파일에 관여하는 것이다.
참고 http://help.adobe.com/ko_KR/air/build/WS5b3ccc516d4fbf351e63e3d118666ade46-7fd9.html

또한 AIR3.0이후 버전에서는 apk-captive-runtime 이라는 옵션을 두어서 AIR런타임을 어플리케이션에 포함시켜 컴파일 할 수 있어 별도로 AIR플레이어를 다운 받도록 하지 않아도 된다.
참고 http://help.adobe.com/ko_KR/air/build/WS901d38e593cd1bac-4f1413de12cd45ccc23-8000.html

ADT는 프로그램 폴더에 설치된 Flash Builder의 sdks안에 사용하는 SDK폴더의 bin폴더 안에 들어있다. 이를 사용하기 위해서는 콘솔을 이용해야 하고 번잡한 작업이 필요하다.

우선 PC전체 경로에서 사용하려면 [컴퓨터]-[속성]-[환경변수]에서 Path 항목에 경로 ADT의 경로를 추가한다.
예) C:\Program Files (x86)\Adobe\Adobe Flash Builder 4.5\sdks\flex_sdk_4.6 with AIR 3.1\bin;
이처럼 설정하면 어느 경로에서든 콘솔에서 adt명령을 실행 할 수 있다. 물론 adt뿐만 아니라 bin폴더 안에 있는 ADL이나 MXMLC등도 전역접근이 가능하다.

오토배치 파일을 만든다면 위의 경로를 처음에 잡아주고 adt명령을 CALL할 수 있겠다.
예)
SET ADT_HOME="C:\Program Files (x86)\Adobe\Adobe Flash Builder 4.5\sdks\flex_sdk_4.6 with AIR 3.1\bin\adt"

CALL %ADT_HOME% -package -target apk-captive-runtime  -storetype pkcs12 -keystore ../codesign.p12  myApp.apk  myApp-app.xml  myApp.swf icons

주의 사항을 살펴보면 아래와 같다.
인증파일은 절대 src또는 코드가 있는 souce폴더에 같이 두면 안된다.
위의 예에서 처럼 한단계 위의 경로에 codesign.p12를 두었다. 또는 평소 관리하는 인증서 폴더에 저장하고 -keystrore의 경로를 설정하여도 된다.

런타임은 최소 2.0이상 이여야 한다.
xml파일의 제일 위에 있는 <application xmlns="http://ns.adobe.com/air/application/3.1">항목을 보면 최소 2.0이여야 한다. 이코드는 3.1버전을 의미한다.
참고 http://help.adobe.com/ko_KR/air/build/WSfffb011ac560372f-5d0f4f25128cc9cd0cb-7ffd.html

아래 경로는 ADT를 이용한 컴파일의 자세한 설명이다.
http://www.petefreitag.com/item/667.cfm

ADT쓰기에 많이 불편하고 리눅스 스럽다;;;; 꽤 비싼 비용을 들여 사용하기엔 상당히 불만족스럽다는 얘기다. 생각컨데 머지않아 이러한 컴파일 옵션들이 Flash Builder에 포함되어서 나오지 않을까 싶다. 
Posted by 버터백통
Android2011. 10. 10. 17:45

안드로이드란 모바일 장치에 포함된 OS와 미들웨어 주요 어플리케이션들을 말한다.
안드로이드 SDK에는 안드로이드 플랫폼위에서 실행할 어플리케이션 개발에 필요한 툴과 API를 제공한다. 개발언어는 Java를 사용한다.

* 특징
컴퍼넌트의 재사용과 재배치를 지원한다.
달빅(Dalvik)가상 머신으로 모바일기기에 최적화를 지원한다.
오픈소스인
웹킷엔진을 기반으로한  통합브라우저를 사용한다.
2D그래픽라이브러리와 OpenGL ES 1.0 스펙의 3D(하드웨어 가속 포함)를 지원한 최적화된 그래픽을 지원한다.
Data구조로는 SQLite를 지원한다.
오디오,비디오,이미지(Mpeg, H.264, MP3, AAC, AMR, JPG, PNG, GIF)를 지원한다.
GSM통신법을 지원한다.(장치마다 다를 수 있다)
블루투스, EDGE, 3G와 Wifi를 지원한다.
카메라, GPS, 나침반, 가속도계를 지원한다.(장치마다 다르다)
풍부한 개발 환경을 지원한다.(에뮬레이터, 디버그툴, 메모리와 성능 프로파일러, 이클립스 플러그인)

* 안드로이드 구조
아래표는 안드로이드OS의 주요 컴퍼넌트를 보여주고있다. 각 섹션은 하단에 자세히 보여주고 있다.



* 어플리케이션
안드로이드는 배처럼 안에 이메일 클라이언트, SMS, 달력, 지도, 웹브라우저 등등을 만들어 올릴 수 있다. 이 모든 어플리케이션은 자바 프로그래밍을 통해 만든다.

* 어플리케이션 프레임워크
안드로이드는 개발자에게 매우 풍부하고 혁신적인 개발 플랫폼을 제공한다. 또한 지역정보(LBS), 백그라운드 서비스, 알람 설정, 상태바에 정보를 알리는 등등 그 이상의 기능 활용에 자유롭고 유리하다.

개발자는 프레임워크에서 제공하는 코어 어클리케이션의 API까지 모두 접근이 가능하다.
어플리케이션 구조는 간단하며 컴퍼넌트의 재사용이 가능하도록 설계되었다. 어떤 어플리케이션은 그 자체로 사용이 가능하고 어떤 컴퍼넌트는 구성요소로서 조합하여 기능을 발휘한다. 이같은 메카니즘은 유저가 override나 재구성할 수 있도록 허용하고 있다.

밑단의 모든 어플리케이션은 시스템과 기능을 설정할 수 있다.
- 제공하는 View들은 풍부한 확장이 가능하게 설정할 수 있고 어플리케이션을 빌드하는데 일반적으로 사용한다. 이들은 리스트와 그리드, 문자, 버튼, 웹브라우저등을 포함한다.
- Content Provider들을 통해 다른 어플리케이션간에 데이터 공유/교환이 가능하다.
- 리소스 매니저를 통해 문자와 그래픽, 레이아웃 파일등을 코드없이 접근이 가능하다.(리소스를 추가하면 자동으로 XML에 추가되어 사용하게 된다. 대부분 정해진 이름의 폴더를 만들어 사용하게된다.)
- 알림매니저를 통해 모든 어플리케이션의 상태바에서 노출이 가능하다.
- Activity 매니저를 통해 어플리케이션의 수명과 네비게이션을 관리한다.(실제 안드로이드는 Activity라는 View단위로 화면을 구성하게 되며 일반적으론 Intent라는 클래스를 새로운뷰를 호출하고 관리한다.)

* 라이브러리
안드로이드시스템은 실제로 C/C++라이브러리들을 포함하고있다. 이러한 것들은 안드로이드 프레임워크를 통해 개발자에게 노출된다.
- 시스템  C 라이브러리 : 임베디드 리눅스 기반에 대한 표준 C 시스템 라이브러리 (libc)의 BSD 구현.
- 미디어 라이브러리 : PacketVideo의 OpenCORE를 기반으로 한다. OpenCORE는 MPEG4, H.264, MP3, AAC, AMR, JPG, PNG를 포함한 대부분의 오디오와 비디오 포맷과 정적 이미지 파일에 대하여 재생과 레코딩을 제공한다.
- Surface 매니저 : 2D와 3D의 복합적인 어플리케이션의 디스플레이 하부 시스템으로 접근 관리한다.
- LibWebCore :  안드로이드 웹브라우저와 웹뷰를 제공하는 웹브라우저 엔진이다.
- SGL : 2D의 하부 그래픽 엔진이다.
- 3D 라이브러리 : OpenGL ES 1.0을 구현한다. OpenGL ES 1.0는 하드웨어(그래픽카드)의 3D 가속을 사용할 수 있게 하며 높은 퍼포먼스를 자랑한다.
- FreeType : 비트맵과 벡터 폰트를 렌더링한다.
- SQLite : 관계형 데이터베이스 엔진으로 가장 가볍고 강력하다. 모든 어플리케이션이 이용할 수 있다.


* 안드로이드 런타임
안드로이드의 코어 라이브러리는 모두 자바의 코어라이브러리의 기능을 제공한다. 모든 안드로이드 어플리케이션은 달빅가상머신(Dalvik virtual machine)의 인스턴스로 해당 인스턴스 프로세스 위에서 실행된다. 달빅은 한개의 장치에서 여러개의 프로세스가 실행시에 매우 효율적이다. 달빅은 Dalvik virtual machine(.dex)라는 파일을 사용하여 메모리 사용과 사용된 흔적을 최소한으로 최적화 할 수 있다. (VM은 자바언어로 컴파일된 클래스들을 .dex 포맷으로 변환하여 실행한다)
달빅은 리눅스 커널을 기반으로 low-level 메모리 관리와 쓰레드의 하위 기능을 관리한다.

* 리눅스 커널
안드로이드는 리눅스 버전 2.6에서 제공하는 서비스와 보안, 메모리 관리, 프로세스관리, 네트워크 스택, 드라이버 모델 등을 사용/준수한다.

Posted by 버터백통