포럼 회원으로 등록하신분만 다운로드가 가능합니다. 최대 업로드 가능한 용량은 20MB 입니다.

안녕하세요.

 

요즘 안드로이드 책이랑 몇가지를 정리하면서 간단하게 다시 함 정리할 겸해서 간단한 문서를 올려봅니다

 

Android에 대해서 여러가지 개발방법이 있습니다.

 

SDK, NDK, PDK 등등.....

(각각, Software Development Kit, Native Development Kit, Platform Development Kit)

 

0. 우선

제가 첨부한 파일을 먼저 보시고요.


1. SDK 를 이용한 개발방법
- Application을 개발할 때 사용합니다.
- emulator를 이용한 개발 방법이 되겠습니다.
- Android 소스를 볼 필요는 거의 없을 듯 하네요...^^
- PC에서 개발이 가능하고, 주로 JAVA API를 이용한 개발 방법이 되겠습니다.


※ Android 2.0서부터는 SDK가지고만 개발하기 힘들게 되어 있습니다.
예를 들어서 Multimedia player같은 경우 동작하지 않습니다(2.01부턴가 확실하지는 않네요....ㅎ)

이 경우 Android PDK를 손봐야 하는 것으로 알고 있습니다.


2. NDK를 이용한 개발 방법
- NDK는 asm/C/C++ Library를 Android에서 쉽게 이용할 수 있는 Application level의 툴입니다.
- JAVA class와 JNI관련 method를 등록해야하는 부분이 예전의 C/C++ 개발 엔지니어들이 접근하기
  불편하기 때문에 그 부분을 자동화 한 것입니다.
- 위의 두가지 내용이 NDK의 사용용도라고 보시면 될 듯 합니다.
 
- 대부분의 엔지니어들이 잘 못 알고 있는 부분이 이 부분일 듯 합니다.
- NDK가지고는 Hardware제어가 불가능 하다고 보시면 됩니다 ==> 혹시 성공하신 분 있으면 방법 좀....쩝

- NDK의 경우 open되어 있는 부분이 너무나 적기 때문에 실제로 JAVA를 많이 이용하셔야 하는데
다행히 1.6 Android 버전서부터는 OpenGL을 오픈해줘서 video쪽은 사용이 가능하지만
여전히 audio부분은 JAVA를 이용하셔야 합니다.

 

- 참, 근래 SDL 포팅된 소스를 보면 audio 이 부분도 C/C++에서 접근할 수 있도록 trick을 써 놓기는 했습니다.ㅎㅎ

- 대부분의 게임은 이걸루 포팅될 가능성이 아주 높습니다.
==> 예전 개발 소스들이 거의 C/C++/ASM일테니깐요

 

3. PDK를 이용한 방법

- PDK는 안드로이드 소스를 가지고 개발하는 것입니다.
- 주로 포팅쪽에 가깝습니다
- 하드웨어 관련 application등의 개발은 이것으로 할 수 밖에 없다고 보여집니다.
- 1/2번의 개발방법을 다 사용이 가능한 만능이라고 볼 수 있죠
- 하지만, 봐야할 양이 엄청나고, 리눅스를 이용한 컴팔환경서부터 헉......소리 납니다.
- 그러므로 힘들죠....쩝

 

4. PDK의 동작방식 설명(첨부 문서에서의 개발방법 2/3을 보시면 됩니다)

 

1> 개발방법 2: native service를 이용한 방법
- 주로 안드로이드 내부의 각종 서비스들은 이런 방법으로 되어 있습니다.
- 멀티미디어, video/audio/camera관련등 속도와 관련된 부분은 대부분 이것을 이용하도록 되어있습니다.
- 각종 native service들이 직접 HAL을 통해서 hardware를 제어하는 구조입니다.
- 속도 관련/하드웨어 제어관련 서비스들이 이런 방식으로 짜겠죠?

 

2> 개발방법 3: native서비스가 아닌 java service에서 JNI통해서 직접 hal로 접근하는 방법
- 아주 안 좋은 방법중의 하나이지만, 기존의 특정 일을 처리하는 daemon process를 이용해야만 하는경우입니다.
- 하드웨어를 제어하는 방법 중 하나입니다.
- 주로 RIL, wifi, bluetooth가 이것에 속하게 되겠지요.
- 즉, 기존의 리눅스용 프로그램이 존재할 경우 android가 그 프로그램의 client역할을 하는 것입니다.
- 해서 기존의 리눅스용 프로그램 사용법을 아주아주 잘 알아야 합니다.

- 아주 안좋은 방법중의 하나라고 위에서 설명한 이유는 하드웨어 제어를 만일 daemon을 통하지 않고
직접할 경우 system이 멈춰버리는 경우까지 나올 수 있기 때문입니다. UI가 멈춰버리는 문제가 발생할 수도 있습니다.

- 하지만, daemon들로 주로 socket을 이용해서 접근하기 때문에 위의 멈추는 부분은 거의 없다고 봐야죠...^^

 

대략 이런 방법으로 개발할 수 있다고 보여집니다.

aesop에 오시는 분들은 주로 PDK를 이용한 방법을 많이 사용하시겠지만, 가끔 NDK때문에 질문이 들어와서
간단하게 정리해서 글을 올려봅니다.

그럼....


장석원

2010.02.22 07:28:24
*.152.226.94

안드로이드는 새로운 분야라 공부할께 너무 많은것 같아서 엄두가 안나는게 요즘 생각이구요 ...

 

안드로이트 커널포팅 & 어플 제작 ...    만만하게 보고 덤빌 분야가 아니라서 .....

 

안드로이드 시작 가장 효과적으로 공부하는 방법이 궁금하네요 ???

 

 

 

김상범

2010.02.22 07:51:12
*.146.5.169

자료 감사합니다.

개인적으로는 응용프로그램보다는 커널 포팅과 드라이버 개발에 관심이 많은데,  저 같은 경우에는 PDK와 NDK 중심으로 공부를 하는게 좋을까요?

6410에 커널을 올리고 안드로이드를 실행하는 것 까지는 진행을 해 보았는데, 이제 무엇을 해 보는 것이 좋을지 난감하네요.

 

진태영

2010.02.22 12:25:35
*.209.52.25

자료 감사요~ ^^

고현철

2010.02.22 18:49:09
*.140.0.217

porting관련이면 PDK를 공부하시는게 좋습니다.


PDK를 하게 되면 자연히 NDK는 자동으로 하게 되어 있습니다.

해서 PDK가 NDK를 포함하는 구조라고 보시면 됩니다.


NDK의 제약사항이 PDK에서는 그냥 풀리게 되거든요.

=========================================================


NDK의 경우는 기존에 가지고 있던 C/C++ 소스가 있을 경우 개발하기 좀 편하도록 한 구조입니다.

플랫폼을 손대지 않을 경우는 이것을 쓰시면 좋을 듯 하네요.

뱀틴

2010.02.22 19:03:10
*.184.149.59

감사드립니다

 

저 같은 경우는 SDK를 이용한 응용 프로그램 개발 위주로 할 듯 싶은데..

 

만약 안드로이드 메인 화면(바탕 화면) 조작 같은 경우.. PDK쪽도 손을 대야 되겠죠?..

고현철

2010.02.22 20:05:27
*.140.0.217

안드로이드 메인화면 조작의 경우는 아마도 SDK에서 될겁니다.


저도 해보지는 않았지만요.......그런 app가 존재하는 것으로 알고 있습니다.

최종환

2010.02.22 19:03:11
*.140.0.217

pdk가 ndk를 포함하고 거기에 더 확장이 된듯합니다.,

ndk로 할때는 java만들고 헤더 파일 만들고 so만들어서 또 java 이클립스로 컴파일하고.복잡 했는데

pdk가 지원하는 ndk 방식은 한방에 해결이 가능 하더군요

ndk를 보다 pdk에서 해 보니 더 간단하고 편한듯 합니다.

 

jacket

2010.02.22 20:59:41
*.240.208.60

제가 serial port로 값을 받아서 Java 어플에서 처리를 해야 하는데

리눅스에서 작성한 어플리케이션에 포함된 header file이 모두 NDK 에도 있었습니다.

이런경우 NDK로 serial port data를 조작하는 어플리케이션을 짤 수 있나요?

왠지 될 것 같기는 한데요...

지금 안드로이드 커널에서 ttyUSB0로 인식되고 커널에서 값도 받아들입니다.

전호철

2010.02.22 23:21:52
*.140.0.217

Driver의 Permission만 허가해주면 

Android JAVA APP -> NDK로 만든 Library -> Driver 

로 접근 가능합니다.


즉. 퍼미션만 해결하면 됩니다.

고도리

2010.02.22 23:19:46
*.140.0.217

NDK로는 거의 불가능 할겁니다.

 

NDK는 application쪽 얘기지, Hardware쪽을 다룰 수 있는 방법이 없다라고 보시면 됩니다.

permission같은 문제가 발생하거든요...^^

jacket

2010.02.23 02:12:23
*.240.208.60

퍼미션을 해결할려면 system/core/init/device.c 파일의 perm 구조체 초기화 부분만 건들면 되나요?

ttyUSB0 가 sysfs 에 등록이 되는 것 같아서 안드로이드에서 찾아서 초기화 할 것 같거든요.

아님 건들 부분이 더 있나요?

전호철

2010.02.23 19:16:29
*.140.0.217

system/core/init/device.c 파일에서 해당 드라이버에 대한 퍼미션을 어플에서 접근 가능하게 설정해 주시고 돌리면 됩니다. 제가 해보니까 잘 돌아가네요 ㅋ

jacket

2010.02.23 20:00:11
*.240.208.60

답변 감사드립니다. 혹시 시간되시면 어떤식으로 퍼미션 소스를 수정하셨는지 부탁드립니다.

tty 부분을 AID_APP로 하면 되는지 확실히는 모르겠네요.

조준영

2010.02.24 02:20:48
*.244.221.2

정답은 드라이버를 읽을 때 필요한 node의 퍼미션을 조정하면 됩니다.  문제는 이런 퍼미션 정보들은  system/core/init/device.c 에 들어 있구요. 고도리님이 조금 잘못아신듯..

최종환

2010.02.24 02:35:45
*.140.0.217

조준영님이 잘 못 이해하신듯 합니다.

어짜피 system/core/init/device.c는 PDK쪽에 있으니 NDK에서만 으로는 수정 할수가 없을거 같은데요

강제로 chmod로 변경 해 주면 되겠지만.

또 언급된 permission 에러라는게 /dev/xxx 노드의  permission 권한이 없어서 에러가 아니라.

NDK쪽에서 JAVA를 통해 jni통래 SurfaceFliner쪽  부분을 접근하면

/ServiceManager(  176): Permission failure:
> android.permission.ACCESS_SURFACE_FLINGER from uid=10046 pid=554
와 같은 에러 메시지가 발생합니다.

Maneifest.xml쪽에 ACCESS_SURFACE_FLINGER 를 추가해도 어플과 같은 유저레벨에서는 system level에 접근을

일부러 막아 놓은듯 합니다.

이쪽 permission 에러를 말한거 같습니다.

고현철

2010.02.24 02:41:31
*.140.0.217

android에서의 permission은 두가지 입니다.

 

1. Linux쪽의 permission을 사용하는 경우와

2. Application permmssion 문제입니다.

 

저는 두가지 다 얘기를 한 겁니다.

 

device driver를 작성할때 아무나 읽을 수 있게 작성하는 경우도 있고, root만 읽을 수 있게 하는 경우가 있습니다.

보통은 device driver를 아무나 read/write 하는 경우가 드물죠...

 

그리고 android mechanism상 직접 app에서 device driver를 호출하게 되는 경우 device driver에서 stall되는 경우를 대비해서 직접은 제어하는 것을 권장하지 않습니다.

 

제가 말씀 드리는 부분은 위와 관련되어서 어떻게 처리하느냐 하는 것입니다.

 

그리고, NDK에서 device driver를 제어하는 것도 가능할지는 모르지만, 그런 부분은 PDK쪽에서 처리하는게 정상이라는 얘기지요.

 

처리할 경우도 그냥 처리하는게 아니라, 안드로이드가 하는 방식대로 처리하는게 좋다는 얘기고요.

 

 

 

검린

2010.02.24 05:25:58
*.144.166.219

자료 감사합니다.

이영민

2010.02.25 06:05:44
*.156.243.216

자료 감사히보고있습니다

신쇼

2010.02.25 22:32:05
*.85.122.225

많은 도움이 될 수 있는 자료입니다..

고맙습니다!!!

과니

2010.03.03 00:00:40
*.111.135.254

자료 감사합니다.

이제 막!~ 시작을 하고 있는데요...

생각보다 할게 너무 많네요.ㅎㅎ 자료가 많은 도움이 될듯 합니다.

열심맨

2010.05.19 01:16:12
*.117.199.100

이제 처음으로 보고 확인합니다. 좋은 자료와 수고를 들인 자료임에도 이렇게 공개해주셔서 감사합니다

김병기

2010.06.18 01:04:05
*.251.187.183

감사합니다.

 

dkdk

2010.11.04 05:12:52
*.68.22.222

정말 좋은 정보 감사드려용. 초보라서 단방 리해하기는 힘들거라서 질문인데요. 답변 부탁드립니다.

안드로이드 mvv210보드에 포팅한후에 hyper terminal에서 주는 지령인 swapon,echo등과 같은것들을 보드의 안드로이드UI에서 혹은 키보드를 리용해서 하려는데 이건 NDK 인가요,PDK인가요? 포팅 겨우하고나서 아무것도 몰라서 그래요.경험있으신분들  자료부탁드리고요 아니면 무얼,무얼 해야하는지 가르쳐주세요. 싸이트라도...부탁드립니다.

고도리

2010.11.04 11:28:43
*.112.84.175

음........그것은 일반 리눅스 관련입니다.

 

swapon/echo 등은 일반 리눅스 명령이기도 하고, 안드로이드에서도 사용할 수 있는 명령입니다.

 

이런 경우는 NDK/PDK를 나누기는 그렇지만, 엄밀히는 PDK의 영역이라고 보시면 됩니다

 

어떤 부분이 어떻게 필요한지 질답게시판에 자세히 적어주시면 자세히 답변을 드리겠습니다.

List of Articles
번호 제목 글쓴이 날짜 조회 수
34 안드로이드 멀티미디어(Android Multimedia) 간단한 정리 사이트 고도리 2020-01-19 227
33 iperf-2.0.4 for android file 고도리 2013-01-23 4581
32 Android Serial(COM)Port 사용 하기(Odroid -T) file [6] stshyoung 2011-04-08 18449
31 흔들어서 전화 받기 file [2] 루비아빠 2011-02-18 10607
30 안드로이드용 skype 어플리케이션 정식버전. file 유형목 2010-10-07 11272
29 안드로이드 choosecombo howto [4] 최규호 2010-05-15 14556
28 구글 안드로이드 오픈코어 S/W 분석 사이트 링크 ... 장석원 2010-03-27 13381
27 The dedexer disassembler file [2] 최종환 2010-03-02 12810
26 Understanding the Dalvik bytecode with the Dedexer tool file [1] 최종환 2010-03-02 12956
25 Android Key Generate 프로그램 file 최종환 2010-03-02 12398
24 droiddraw.org 라는 싸이트가 있네요 전호철 2010-02-26 12117
» Android 포팅 및 개발방법 개요 file [24] 고도리 2010-02-22 22732
22 AndroidOptimizationStudies file [4] 최종환 2010-02-22 11434
21 Developing for Android file [6] 최종환 2010-02-22 11933
20 Android Doom~ file [10] 최종환 2010-02-09 13336
19 구글 크롬 OS 다운로드 [1] 김충헌 2009-11-21 21863
18 Google Chrome OS 다운이 가능 한거같군요 [1] 최종환 2009-11-21 12515
17 Google Chrome OS vmware 이미지 돌려 본것입니다. file 최종환 2009-11-21 13214
16 Android Binder Examples file 김재훈 2009-04-09 17466
15 Apress - Android Essentials (2008) file 김재훈 2009-04-08 11862

사용자 로그인