서적에 관한 질문 및 오류 등을 문의 할 수 있으며, 저자로부터 직접 답변을 받을 수 있습니다.


이상하게 댓글 등록이 안되서 글로 남김니다.

 

전호철님께서 바꿔보라고 하신데로 바꿔서 해도 아래와 같이 에러가 발생합니다.


Compile++ thumb  : alienblaster <= main.cc
jni/alienblaster/src/main.cc: In function 'SDL_Surface* loadSurface(std::string)':
jni/alienblaster/src/main.cc:190:77: error: invalid static_cast from type 'std::string {aka std::basic_string<char>}' to type 'char const*'
make: *** [obj/local/armeabi/objs/alienblaster/src/main.o] Error 1


그래서 190라인을 주석처리하고 했더니 warning만 3개 뜨고 컴파일이 되서

libalienblaster.so가 생성되네요.


그렇지만 libalienblaster.so를 libs/armeabi에 복사해서 android project를 build, lunch해도

앱이 실행됐다가 바로 종료되버리네요.

로그캣에는 다음과 같은 에러가 표시됩니다.


12-26 10:24:21.550: A/libc(642): Fatal signal 11 (SIGSEGV) at 0x0000000c (code=1), thread 663 (Thread-11123)


12-26 10:24:22.058: W/InputDispatcher(307): channel '427e5728 net.hybridego.game/net.hybridego.game.ExSDL (server)' ~ Consumer closed input channel or an error occurred.  events=0x9
12-26 10:24:22.058: E/InputDispatcher(307): channel '427e5728 net.hybridego.game/net.hybridego.game.ExSDL (server)' ~ Channel is unrecoverably broken and will be disposed!

 


그리고 제가 아래에 조언을 구했었는데

답변 주신것은 감사하지만 제가 상황설명을 제대로 못한 것 같아서 다시 조언 부탁드립니다.

 

Android에서 native를 이용하지 않고

Android의 View를 상속받아 onDraw에서 Canvas의 drawLines, drawPath,

drawBitmap, drawText 메소드를 사용하여 벡터방식의 지도를 그리는 소스가 있습니다.

 

이 부분을 NDK를 이용하여 native로 포팅을 하고 싶습니다.

그런데 제가 NDK나 C쪽은 잘몰라서 조언을 구했던 것입니다.


bitmap-plasma처럼 native에서 bitmap을 받아서 픽셀마다 특정색을 처리하는 것은 너무 저수준이라

적용하기 어렵습니다.

bitmap이나 view에 Line을 그리고, Text를 그리고, Bitmap을 그릴려고 하면

openGL ES를 써야하는 것인지, SDL을 써야하는 것인지를 물었던 것입니다.

아니면 openGL ES, SDL을 쓰지 않고도 C의 다른 라이브러리를 써서 가능한지...


바쁘시겠지만 답변주시면 감사하겠습니다.

그럼 즐거운 연말되시고 새해복많이 받으세요~!


민민

2013.01.02 19:56:08
*.236.24.201

답변이 없으시군요.

어쩌면 우문이었을지도 모르겠네요.

 

책의 5.3을 보니까 "안드로이드 자바 애플리케이션에서 Paint, Canvas로 그림을 그리면

안드로이드 내부에서 skia 라이브러리를 사용한다"고 되어 있는데

결국 2D 그래픽도 안드로이드 내부적으로 native를 사용하고 있다는 얘기 같네요.

이게 맞다면 NDK를 사용해도 별다른 속도 향상은 없을 것 같습니다.

 

그리고 프로젝트에서 한 프레임을 그리는데 수만번 호출되는 함수가 있는데

이 함수에서 삼각함수를 사용하여 계산을 하거든요.

이부분을 NDK로 구현해봤는데 속도 향상이 전혀 없더라구요. 오히려 더걸리네요.

삼각함수 부분도 이미 안드로이드 내부적으로 native로 구현이 되어있던지,

삼각함수는 C나 Java나 별 차이가 없던지 그런가 봅니다.

NDK에 너무 환상을 가졌었나봐요.

고도리

2013.01.03 07:51:37
*.200.239.210

음....질문이 올라온지 제대로 파악을 못했었네요.


Android에서의 display는 최종단에서는 OpenGL ES를 쓰는게 기본입니다.

단, 동영상 관련 부분은 Overlay(Ginberbread)혹은 HWComposer(ICS이후)를 사용할 수 있습니다.


하지만, 일반 UI는 최종 출력을 OpenGL을 사용하기 때문에 display를 많이 하는 app의 경우는 NDK가 더 느려질 가능성이 있습니다(함수 호출의 영향 때문에)


다만, 연산량이 많거나 데이터를 많이 쓰는 app의 경우와 원래 c/c++로 되어 있던 library를 사용하는 경우는 NDK가 더 적합한 개발방법이 아닐까 합니다.


NDK를 이용해서 속도를 높일 수 있는 경우는 위와 같은데....


예를 들어, 

메모리 복사가 많은 경우 혹은 메모리 연산량이 많은 경우는 armv7 이후서부터는 NEON등을 사용할 수 있어서 이 경우는 연산의 속도에서 큰 향상이 있습니다.


이런 경우에 사용을 하는 것이라고 보시면 됩니다.


display가 많은 app의 경우는 OpenGL ES를 쓰는게 더 나을 듯 합니다.

제임스59

2013.08.29 07:57:42
*.170.73.30

안녕하세요?

위의 문제중 실행후 잠시후 종료되는 것 해결 되셨나요?

나도 같은 문제가 있어서요...

로그캣은 좀 다르게 표시됩니다만....

 

List of Articles
번호 제목 글쓴이 날짜 조회 수sort

PDK를 이용하여 안드로이드 프레임워크 so파일 참조에 관해서 질문있... [7]

예제를 따라하던 중 Android.mk 파일로 APK파일 생성 후 설치시 ... [6]

ndk 38페이지 질문_repo file [1]

안드로이드의 모든것 분석과 포팅 교재 관련 [2]

  • nexus26
  • 2011-07-05
  • 조회 수 10562

[Linux와 Android] 001 - 임베디드 시스템에 대하여 file

다시 질문 드립니다.ㅜㅜ apk 설치문제입니다. [3]

책 관련해서 질문이 있습니다. [1]

  • winpih
  • 2011-07-13
  • 조회 수 9030

안드로이드 init의 특징에 대해 질문있습니다. [2]

117쪽 ueventd 실행 부분.. [1]

475페이지 그림 외 건의 사항.. [2]

[Linux와 Android] 002 - UNIX/Linux system 개요 file

[Linux와 Android] 002 - UNIX/Linux system 개요(Continue......

p186. Gingerbread 센서 구조의 간략한 설명 요청드립니다. [3]

  • forone
  • 2011-08-25
  • 조회 수 8429

NDK를 이용한 camera 제어 예제에 대해 문의 드립니다. [7]

  • 죽유
  • 2013-01-11
  • 조회 수 8047

chapter7 안드로이드 오디오 서브시스템 에서 궁금한게 있습니다 [1]

개발환경 설정 중 문의사항입니다. file [1]

아래 [SDL 예제관련 에러 질문입니다.] 이어서... [3]

  • 민민
  • 2012-12-26
  • 조회 수 7753

책이 나온내용이지만 좀 다른예기일수도 잇네요 [1]

RGB 부분에 대해서 질문이 있습니다. [1]

  • ys2cdh
  • 2012-01-05
  • 조회 수 7380

JNI로 휴대폰 디바이스 번호를 구하려고 합니다 file [3]

  • fox8306
  • 2012-09-19
  • 조회 수 6878

사용자 로그인