상세 컨텐츠

본문 제목

Android 안드로이드 - 오픈지엘 (Java OpenGL) vs (JNI OpenGL) vs (NativeActivity OpenGL)

스마트기기개발관련/OpenGL (그래픽, 게임)

by AlrepondTech 2012. 10. 24. 11:40

본문

반응형

 

 

 

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

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

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

 

 

 

 

출처: http://cafe.naver.com/semogamekit/80

(Java OpenGL) vs (JNI OpenGL) vs (NativeActivity OpenGL

1) Java OpenGL : Java 로 프로그래밍하여 Java 바인딩된 OpenGL 함수사용
2) JNI OpenGL : Java에서 컨텍스트만 만들고 실제 GL 함수는 외부 C,C++ 함수로 so 파일로 만든뒤에,
            Java클래스에서 호출한다.
3) NativeActivity OpenGL : Java를 전혀 사용하지않고, C/C++만을 이용해서 개발한다.
              Android-9 부터 나온 제작방법으로  "ndk/samples/native-activity" 예제이용
---------------------------------------------------------------------------
1)은 Java를 전적으로 사용해야 되서 멀티플랫폼지원하는 게임개발형식에 적합하지않다.               
2)외부 윈도우 제작만 Java로 하고 OpenGL함수를 이용해서  C,C++로 개발.
  (현재 세모게임킷의 개발상태이지만, Java JNI 코드 소스가 포함되어있다.)
3)100% C,C++ 소스코드로 개발할 수 있어서, 2)와 달리 JNI관련소스가 필요 없다.
  android api9 (v2.3)부터 사용가능

 
안드로이드 업로드하기위해서 세모모바일 게임킷을 2),3) 형태로 포팅하여 성능및 기타를 확인함.
  성능면에서 2) 60fps, 3) 45fps 정도 나옴
  (3)은 싱글쓰래드로 설정되어 있고, 2)는 GLthread를 분리해서 최적화가 되어 있는것으로 보임.
  3)을 이용해서 세모게임킷을 설정하는것이 구조상으로는 최적이나, 성능상으로 2)번만큼 나오지 않아서 사용을 보류함.
  3)방식에 멀티쓰래드를 지원하여 2)과 동일한 성능이 나온다면 충분히 사용가능함.    

3)방식이 구글에의하면 센서부분에 dramatical performance gains 가 있다고 설명 되어 있지만, 단일 쓰래드 방식이고 OpenGL최적화가 되어 있지 않아서
  JNI방식보다 성능이 떨어지게 나왔음.(NativeActivity에서 최적 성능을 위해 GLthread를 멀티쓰래드로 구성개발접근도 필요해 보임)
  http://developer.android.com/about/versions/android-2.3-highlights.html#gaming
  
  "Native input and sensor events: Applications that use native code can now receive and process input and sensor events directly in their native code, which dramatically improves efficiency and responsiveness."

---------------------------------------------------------------------------
현재는 SemoGameKit 안드로이드 2.2 기준으로 개발하였으나, 차근차근 아래와 같이 접근해 나가면 좋을거같음..
1) Native-Activity 상태에서 OpenGL ES 최적화(멀티쓰래드지원)를 통한 JNI와 동일 성능 획득
2) JNI를 사용하지 않고, Native방식의 엔진소스정리(더 간단해짐)-EGL 이용 콘텍스트 정리
3) 센서 및 2.3 게임플랫폼의 장점을 최대한 이용한 엔진 설계(PThred이용, OpenSL 이용)


첨부파일에 동일하게 실행되는 3가지 프로젝트 예제가 있음.
 

 

 

javagl.zip
다운로드

 

jnigl_with_jni.zip
다운로드

 

android.app.nativeactivity.zip
다운로드

 

 

 

 

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

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

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

 

 

 

반응형

 

728x90

 

 

 

 

 

출처: 

http://saintw.blog.me/100085514647

 

 

Android Native Development Kit(NDK)

 

 

1. 소개

 가. Dalvik 가상머신에서 동작하는데 안드로이드 어플리케이션에서 C와 C++과 같은 Native Code를 이용한 개발을 할 수 있도록 해준다.

 나. JNI - 명확한 기준이 없었음, 사용하기 복잡.

 다. 멀티미디어, 그래픽 등의 처리에 꼭 필요한 기능 제공.

 라. 오직 안드로이드 플랫폼 1.5버전 혹은 그 이후 버전에서만 사용 가능.

 마. 지원 운영체제

  1) Windows XP(32-bit) or Vista(32 or 64bit)

  2) Mac OS X10.4.8 or late (x86 only)

  3) Linux (32 or 64bit, tested on Linux Ubuntu Dapper Drake)

 

 

2. 제공

 가. C, C++ 소스에서 Native Code 라이브러리를 제작하는데 사용할 수 있는 tools와 빌드 파일.

 나. 안드로이드 디바이스에 배포될 수 있는 어플리케이션 패키지 파일(apks)안에 native 라이브러리를 embed하는 방법.

 다. 안드로이드 1.5 이후 릴리즈에 제공하게될 모든 안드로이드 플랫폼에서 지원할 native 시스템 헤더와 라이브러리.

 라. 문서, 샘플, 튜토리얼.

 마. 1.5NDK, Release 1 에서의 제공.

  1) 인스터럭션 셋을 지원.

  2) libc (표준 C 라이브러리)

  3) libm (표준 수학 라이브러리)

  4) JNI(Java Native Interface) 인터페이스.

  5) libz, ZLib 압축 라이브러리.

  6) liblog (Android logging)

  7) 최소한의 C++해더 셋

 

 

3. 주의사항

 가. 모든 안드로이드의 어플리케이션에 적합하지 않을 것.

 나. NDK를 사용한 어플리케이션은 복잡해질 우려가 있음.

 다. 호환성이 떨어짐.

 라. 프레임웍 API에 접근할 수 없고, 디버그가 어려움.

 마. NDK로 생산된 라이브러리를 사용하는 어플리케이이 작용하는 플랫폼의 호환성에 고려해야 한다.
  (Platform compatibilty considerations that affect application using libraries produced with the NDK.)

 

 

4. 사용하면 좋을 곳

 가. self - contained

 나. signal processing, 물리 시뮬레이션과 같이 많은 메모리를 차지하지 않는 CPU-intensive 처리

 

 

5. 한계

 가. C에서 실행되는 메소드를 단순히 재코딩 하는것 으로는 성능향상에 큰 도움이 되지 않는다.

 나. NDK가 native-only 어플리케이션 개발은 힘들다. (Please note that the NDK does not enable you to develop native-only application)

 다. 안드로이드의 첫 번째 런타임은 Dalvik 가상머신에 있다.

 

 

6. 호환성을 보장하는 방법( application using a native library produced with the NDK)

 가. 해당 매니페스트 파일에 android:minSdkVersion="3" 속성과 함께 <users-library> 엘리먼트를 반드시 선언.

 

 

7. 사용법

 가. Android NDK 다운로드 후, make와 gcc 패키지를 필수로 포함하여 Cygwin설치한다.

 나. Cygwin Bash Shell을 통해 프로젝트 혹은 솔루션에 접근하여 빌드 후 이클립스로 프로젝트를 불러와 실행시킨다.

 

 

 

 

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

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

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

 

 

 

 

반응형


관련글 더보기

댓글 영역