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


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

 

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


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

gpio 컨트롤관련하여 ledservice 가 바로 죽어 버리는현상이 나오는... [2]

  • biokk
  • 2015-01-17
  • 조회 수 224

ndk onTransact 함수에 대한 질문인데요 [1]

  • ice179
  • 2015-02-07
  • 조회 수 247

android binder 의 onTransact(uint32_t code, ...)의 code값은 ... [1]

  • ice179
  • 2015-01-29
  • 조회 수 290

ledservice , 라이브러리 추가 관련한 질문입니다 [3]

  • ice179
  • 2015-02-04
  • 조회 수 341

ndk 함수에서 c언어 동작은 onTransact 에서만 동작하나요? [3]

  • ice179
  • 2015-02-03
  • 조회 수 362

안드로이드 ndk gpio컨트롤 하기 질문입니다. [2]

  • ice179
  • 2015-01-16
  • 조회 수 433

3장 계산기 에러 file [2]

gpio 컨트롤 예제질문입니다. [3]

  • biokk
  • 2015-01-21
  • 조회 수 647

ndk 라이브러리추가 하는 질문입니다 [8]

  • ice179
  • 2015-02-11
  • 조회 수 820

ndk를 이용하여 일반 안드로이드 어플을 만들수가 있나요? [3]

  • biokk
  • 2015-07-25
  • 조회 수 1024

pluscalc 질문입니다. [1]

[예제17.ffmpeg를 활용한 player] ffmpeg를 활용한 player file

ffmpeg 예제에 대해 문의 드립니다. [1]

ics에서 OpenSL의 Playback Rate 안됨 [1]

NDK 에서 BYTE 나 BOOL 등은 사용 못하는지요? [1]

[예제15.Native_Thread] Native Thread 예제 file

[예제07/08.MethodCall] Native에서 JAVA의 Method를 호출하는 예... file

[예제14.JNI_onLoad] JNI_OnLoad 예제 file

ffmpeg 빌드관련 질문드립니다 file [6]

[예제16.GPIO제어] App. 에서 H/W 제어하는 예제 (native bind... file

사용자 로그인