From 03c866020b46079afe895dd90f2d60bda06dbe05 Mon Sep 17 00:00:00 2001 From: Yong WU Date: Mon, 28 Jul 2014 21:20:18 +0800 Subject: [PATCH] Integrate NativeActivity with NativeBridge interfaces Bug: 16884833 Change-Id: I73aab8e212860ba5aee9444d801806d3da326a41 --- core/jni/Android.mk | 3 ++- core/jni/android_app_NativeActivity.cpp | 26 ++++++++++++++++++++------ 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/core/jni/Android.mk b/core/jni/Android.mk index e4fad0910479..b5e068da73b0 100644 --- a/core/jni/Android.mk +++ b/core/jni/Android.mk @@ -209,7 +209,8 @@ LOCAL_SHARED_LIBRARIES := \ libjpeg \ libusbhost \ libharfbuzz_ng \ - libz + libz \ + libnativebridge ifeq ($(USE_OPENGL_RENDERER),true) LOCAL_SHARED_LIBRARIES += libhwui diff --git a/core/jni/android_app_NativeActivity.cpp b/core/jni/android_app_NativeActivity.cpp index 9c44093904fb..633a207f8ad8 100644 --- a/core/jni/android_app_NativeActivity.cpp +++ b/core/jni/android_app_NativeActivity.cpp @@ -38,6 +38,8 @@ #include "android_view_InputChannel.h" #include "android_view_KeyEvent.h" +#include "nativebridge/native_bridge.h" + #define LOG_TRACE(...) //#define LOG_TRACE(...) ALOG(LOG_DEBUG, LOG_TAG, __VA_ARGS__) @@ -251,17 +253,29 @@ loadNativeCode_native(JNIEnv* env, jobject clazz, jstring path, jstring funcName const char* pathStr = env->GetStringUTFChars(path, NULL); NativeCode* code = NULL; - + bool needNativeBridge = false; + void* handle = dlopen(pathStr, RTLD_LAZY); - + if (handle == NULL) { + if (NativeBridgeIsSupported(pathStr)) { + handle = NativeBridgeLoadLibrary(pathStr, RTLD_LAZY); + needNativeBridge = true; + } + } env->ReleaseStringUTFChars(path, pathStr); - + if (handle != NULL) { + void* funcPtr = NULL; const char* funcStr = env->GetStringUTFChars(funcName, NULL); - code = new NativeCode(handle, (ANativeActivity_createFunc*) - dlsym(handle, funcStr)); + if (needNativeBridge) { + funcPtr = NativeBridgeGetTrampoline(handle, funcStr, NULL, 0); + } else { + funcPtr = dlsym(handle, funcStr); + } + + code = new NativeCode(handle, (ANativeActivity_createFunc*)funcPtr); env->ReleaseStringUTFChars(funcName, funcStr); - + if (code->createActivityFunc == NULL) { ALOGW("ANativeActivity_onCreate not found"); delete code; -- 2.11.0