android_app_NativeActivity.cpp revision 74323fd1ab8eb11beea286d5c213c63e4b803141
169969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn/* 269969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn * Copyright (C) 2010 The Android Open Source Project 369969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn * 469969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn * Licensed under the Apache License, Version 2.0 (the "License"); 569969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn * you may not use this file except in compliance with the License. 669969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn * You may obtain a copy of the License at 769969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn * 869969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn * http://www.apache.org/licenses/LICENSE-2.0 969969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn * 1069969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn * Unless required by applicable law or agreed to in writing, software 1169969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn * distributed under the License is distributed on an "AS IS" BASIS, 1269969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1369969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn * See the License for the specific language governing permissions and 1469969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn * limitations under the License. 1569969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn */ 1669969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn 1769969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn#define LOG_TAG "NativeActivity" 1869969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn#include <utils/Log.h> 1969969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn 2069969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn#include "JNIHelp.h" 2169969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn#include <android_runtime/AndroidRuntime.h> 2269969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn#include <android/native_activity.h> 2369969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn 2469969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn#include <dlfcn.h> 2569969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn 2669969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackbornnamespace android 2769969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn{ 2869969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn 2969969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackbornstruct NativeCode { 3074323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn NativeCode(void* _dlhandle, android_activity_create_t* _createFunc) { 3174323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn memset(&activity, sizeof(activity), 0); 3274323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn memset(&callbacks, sizeof(callbacks), 0); 3374323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn dlhandle = _dlhandle; 3474323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn createActivityFunc = _createFunc; 3574323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn surface = NULL; 3674323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn } 3774323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn 3874323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn ~NativeCode() { 3974323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn if (callbacks.onDestroy != NULL) { 4074323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn callbacks.onDestroy(&activity); 4174323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn } 4274323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn if (dlhandle != NULL) { 4374323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn dlclose(dlhandle); 4474323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn } 4574323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn } 4674323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn 4774323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn void setSurface(jobject _surface) { 4874323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn if (surface != NULL) { 4974323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn activity.env->DeleteGlobalRef(surface); 5074323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn } 5174323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn if (_surface != NULL) { 5274323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn surface = activity.env->NewGlobalRef(_surface); 5374323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn } else { 5474323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn surface = NULL; 5574323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn } 5674323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn } 5774323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn 5869969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn android_activity_t activity; 5969969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn android_activity_callbacks_t callbacks; 6069969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn 6169969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn void* dlhandle; 6269969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn android_activity_create_t* createActivityFunc; 6374323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn 6474323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn jobject surface; 6569969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn}; 6669969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn 6769969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackbornstatic jint 6869969e48f2bca9339662dddfacff0bbf6374ed7fDianne HackbornloadNativeCode_native(JNIEnv* env, jobject clazz, jstring path) 6969969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn{ 7069969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn const char* pathStr = env->GetStringUTFChars(path, NULL); 7169969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn NativeCode* code = NULL; 7269969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn 7369969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn void* handle = dlopen(pathStr, RTLD_LAZY); 7469969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn 7569969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn env->ReleaseStringUTFChars(path, pathStr); 7669969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn 7769969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn if (handle != NULL) { 7874323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn code = new NativeCode(handle, (android_activity_create_t*) 7974323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn dlsym(handle, "android_onCreateActivity")); 8069969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn if (code->createActivityFunc == NULL) { 8169969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn LOGW("android_onCreateActivity not found"); 8269969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn delete code; 8369969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn return 0; 8469969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn } 8569969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn code->activity.callbacks = &code->callbacks; 8669969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn code->activity.env = env; 8769969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn code->activity.clazz = clazz; 8869969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn code->createActivityFunc(&code->activity, NULL, 0); 8969969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn } 9069969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn 9169969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn return (jint)code; 9269969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn} 9369969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn 9469969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackbornstatic void 9569969e48f2bca9339662dddfacff0bbf6374ed7fDianne HackbornunloadNativeCode_native(JNIEnv* env, jobject clazz, jint handle) 9669969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn{ 9769969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn if (handle != 0) { 9869969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn NativeCode* code = (NativeCode*)handle; 9969969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn delete code; 10069969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn } 10169969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn} 10269969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn 10369969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackbornstatic void 10469969e48f2bca9339662dddfacff0bbf6374ed7fDianne HackbornonStart_native(JNIEnv* env, jobject clazz, jint handle) 10569969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn{ 10669969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn if (handle != 0) { 10769969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn NativeCode* code = (NativeCode*)handle; 10869969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn if (code->callbacks.onStart != NULL) { 10969969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn code->callbacks.onStart(&code->activity); 11069969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn } 11169969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn } 11269969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn} 11369969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn 11469969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackbornstatic void 11569969e48f2bca9339662dddfacff0bbf6374ed7fDianne HackbornonResume_native(JNIEnv* env, jobject clazz, jint handle) 11669969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn{ 11769969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn if (handle != 0) { 11869969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn NativeCode* code = (NativeCode*)handle; 11969969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn if (code->callbacks.onResume != NULL) { 12069969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn code->callbacks.onResume(&code->activity); 12169969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn } 12269969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn } 12369969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn} 12469969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn 12569969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackbornstatic void 12669969e48f2bca9339662dddfacff0bbf6374ed7fDianne HackbornonSaveInstanceState_native(JNIEnv* env, jobject clazz, jint handle) 12769969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn{ 12869969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn if (handle != 0) { 12969969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn NativeCode* code = (NativeCode*)handle; 13069969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn if (code->callbacks.onSaveInstanceState != NULL) { 13169969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn size_t len = 0; 13269969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn code->callbacks.onSaveInstanceState(&code->activity, &len); 13369969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn } 13469969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn } 13569969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn} 13669969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn 13769969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackbornstatic void 13869969e48f2bca9339662dddfacff0bbf6374ed7fDianne HackbornonPause_native(JNIEnv* env, jobject clazz, jint handle) 13969969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn{ 14069969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn if (handle != 0) { 14169969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn NativeCode* code = (NativeCode*)handle; 14269969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn if (code->callbacks.onPause != NULL) { 14369969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn code->callbacks.onPause(&code->activity); 14469969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn } 14569969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn } 14669969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn} 14769969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn 14869969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackbornstatic void 14969969e48f2bca9339662dddfacff0bbf6374ed7fDianne HackbornonStop_native(JNIEnv* env, jobject clazz, jint handle) 15069969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn{ 15169969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn if (handle != 0) { 15269969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn NativeCode* code = (NativeCode*)handle; 15369969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn if (code->callbacks.onStop != NULL) { 15469969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn code->callbacks.onStop(&code->activity); 15569969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn } 15669969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn } 15769969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn} 15869969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn 15969969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackbornstatic void 16069969e48f2bca9339662dddfacff0bbf6374ed7fDianne HackbornonLowMemory_native(JNIEnv* env, jobject clazz, jint handle) 16169969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn{ 16269969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn if (handle != 0) { 16369969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn NativeCode* code = (NativeCode*)handle; 16469969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn if (code->callbacks.onLowMemory != NULL) { 16569969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn code->callbacks.onLowMemory(&code->activity); 16669969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn } 16769969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn } 16869969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn} 16969969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn 17069969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackbornstatic void 17169969e48f2bca9339662dddfacff0bbf6374ed7fDianne HackbornonWindowFocusChanged_native(JNIEnv* env, jobject clazz, jint handle, jboolean focused) 17269969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn{ 17369969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn if (handle != 0) { 17469969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn NativeCode* code = (NativeCode*)handle; 17569969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn if (code->callbacks.onWindowFocusChanged != NULL) { 17669969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn code->callbacks.onWindowFocusChanged(&code->activity, focused ? 1 : 0); 17769969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn } 17869969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn } 17969969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn} 18069969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn 18174323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackbornstatic void 18274323fd1ab8eb11beea286d5c213c63e4b803141Dianne HackbornonSurfaceCreated_native(JNIEnv* env, jobject clazz, jint handle, jobject surface) 18374323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn{ 18474323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn if (handle != 0) { 18574323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn NativeCode* code = (NativeCode*)handle; 18674323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn code->setSurface(surface); 18774323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn if (code->callbacks.onSurfaceCreated != NULL) { 18874323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn code->callbacks.onSurfaceCreated(&code->activity, 18974323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn (android_surface_t*)code->surface); 19074323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn } 19174323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn } 19274323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn} 19374323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn 19474323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackbornstatic void 19574323fd1ab8eb11beea286d5c213c63e4b803141Dianne HackbornonSurfaceChanged_native(JNIEnv* env, jobject clazz, jint handle, jobject surface, 19674323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn jint format, jint width, jint height) 19774323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn{ 19874323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn if (handle != 0) { 19974323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn NativeCode* code = (NativeCode*)handle; 20074323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn if (code->surface != NULL && code->callbacks.onSurfaceChanged != NULL) { 20174323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn code->callbacks.onSurfaceChanged(&code->activity, 20274323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn (android_surface_t*)code->surface, format, width, height); 20374323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn } 20474323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn } 20574323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn} 20674323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn 20774323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackbornstatic void 20874323fd1ab8eb11beea286d5c213c63e4b803141Dianne HackbornonSurfaceDestroyed_native(JNIEnv* env, jobject clazz, jint handle, jobject surface) 20974323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn{ 21074323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn if (handle != 0) { 21174323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn NativeCode* code = (NativeCode*)handle; 21274323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn if (code->surface != NULL && code->callbacks.onSurfaceDestroyed != NULL) { 21374323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn code->callbacks.onSurfaceDestroyed(&code->activity, 21474323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn (android_surface_t*)code->surface); 21574323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn } 21674323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn code->setSurface(NULL); 21774323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn } 21874323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn} 21974323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn 22069969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackbornstatic const JNINativeMethod g_methods[] = { 22169969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn { "loadNativeCode", "(Ljava/lang/String;)I", (void*)loadNativeCode_native }, 22269969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn { "unloadNativeCode", "(I)V", (void*)unloadNativeCode_native }, 22369969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn { "onStartNative", "(I)V", (void*)onStart_native }, 22469969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn { "onResumeNative", "(I)V", (void*)onResume_native }, 22569969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn { "onSaveInstanceStateNative", "(I)V", (void*)onSaveInstanceState_native }, 22669969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn { "onPauseNative", "(I)V", (void*)onPause_native }, 22769969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn { "onStopNative", "(I)V", (void*)onStop_native }, 22869969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn { "onLowMemoryNative", "(I)V", (void*)onLowMemory_native }, 22969969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn { "onWindowFocusChangedNative", "(IZ)V", (void*)onWindowFocusChanged_native }, 23074323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn { "onSurfaceCreatedNative", "(ILandroid/view/SurfaceHolder;)V", (void*)onSurfaceCreated_native }, 23174323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn { "onSurfaceChangedNative", "(ILandroid/view/SurfaceHolder;III)V", (void*)onSurfaceChanged_native }, 23274323fd1ab8eb11beea286d5c213c63e4b803141Dianne Hackborn { "onSurfaceDestroyedNative", "(ILandroid/view/SurfaceHolder;)V", (void*)onSurfaceDestroyed_native }, 23369969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn}; 23469969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn 23569969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackbornstatic const char* const kNativeActivityPathName = "android/app/NativeActivity"; 23669969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn 23769969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackbornint register_android_app_NativeActivity(JNIEnv* env) 23869969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn{ 23969969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn //LOGD("register_android_app_NativeActivity"); 24069969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn 24169969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn jclass clazz; 24269969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn 24369969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn clazz = env->FindClass(kNativeActivityPathName); 24469969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn LOG_FATAL_IF(clazz == NULL, "Unable to find class android.app.NativeActivity"); 24569969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn 24669969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn return AndroidRuntime::registerNativeMethods( 24769969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn env, kNativeActivityPathName, 24869969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn g_methods, NELEM(g_methods)); 24969969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn} 25069969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn 25169969e48f2bca9339662dddfacff0bbf6374ed7fDianne Hackborn} 252