한번 더 포스팅한다. 이 빌어먹을 것 때문에 얼마나 많은 시간을 소비하였는가....ㅡㅡ;;;
<<xxx.c>>
#include <jni.h>
...
JavaVM *g_VM;
JNIEnv *_env;
jclass jNativesCls;
...
<<xxxx.java>>...
JNIEXPORT void JNICALL Java_net_fhtagn_moob_MoobRenderer_nativeResize
(JNIEnv *env, jobject thiz, jint w, jint h) {
...
// 2. Java에서 사용할 method가 선언되어있는 클래스 적어넣기(패키지명 + 클래스명)
// 3. JavaVM pointer를 현재 스레드에 장착(설명 : http://aroundck.tistory.com/569)
...
...
// 1. JNI사용을 위한, VM얻기
env->GetJavaVM(&g_VM);
if( _env == NULL ) {
_env = env;
}
if( g_VM == NULL ) {
_env->GetJavaVM(&g_VM );
}
// 2. Java에서 사용할 method가 선언되어있는 클래스 적어넣기(패키지명 + 클래스명)
if( jNativesCls == NULL ) {
jNativesCls = env->FindClass("net/fhtagn/moob/Moob"); }
// 3. JavaVM pointer를 현재 스레드에 장착(설명 : http://aroundck.tistory.com/569)
g_VM->AttachCurrentThread (&env, NULL);
// 4. 해당 Method의 상세 설정(AIP별 자세한 설정은 jni.pdf를 참고)
jmethodID mid = env->GetStaticMethodID(jNativesCls,
"OrientationCheck",
"()I" ); // <- 특히 이놈 설정 주의!!
if (mid == NULL) {
return ;
}
// 5. 해당 함수 사용(AIP별 자세한 설정은 jni.pdf를 참고)
env->CallStaticIntMethod(jNativesCls, mid);
...
}
public class Moob extends Activity{
private GLSurfaceView mGLView;
static Configuration mConfig;
static int mode;
static {
System.loadLibrary("moob");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mGLView = new MoobGLSurface(this);
mGLView.setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
setContentView(mGLView);
mConfig = getResources().getConfiguration();
//Force landscape
//setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
@Override
protected void onPause() {
super.onPause();
mGLView.onPause();
}
@Override
protected void onResume() {
super.onResume();
mGLView.onResume();
}
// 현제 단말기의 가로, 세로모드 얻어오기
// JNI사용을 위해 무조건적으로 static 사용 권장!!
public static int OrientationCheck() {
// TODO Auto-generated method stub
// Configuration mConfig = getResources().getConfiguration();
if( mConfig.orientation == android.content.res.Configuration.ORIENTATION_LANDSCAPE){
Log.d("Orientation is", " ORIENTATION_LANDSCAPE ");
mode = android.content.res.Configuration.ORIENTATION_LANDSCAPE; // 2
return mode;
}else if( mConfig.orientation == android.content.res.Configuration.ORIENTATION_PORTRAIT){
Log.d("Orientation is", " ORIENTATION_PORTRAIT ");
mode = android.content.res.Configuration.ORIENTATION_PORTRAIT; // 1
return mode;
}
return -1;
}
==================================================================================================================
여기서 가장 중요하다고 생각되는건, java에서 쓸 method가 static으로 선언되어야 된다는 점!!!!!
이것때문에 몇일 개 삽질했음....ㅡㅡ;;;
'6. With IT > 6.2 NDK' 카테고리의 다른 글
(.data+0x0) multiple definition of 변수 에러 (0) | 2012.06.18 |
---|---|
정적라이브러리 동적라이브러리 (0) | 2012.06.16 |
NDK-static library빌드 관련... (0) | 2012.03.06 |
Native to Android (0) | 2012.02.18 |
android-ndk-r7오류 (0) | 2012.02.12 |