diff options
| author | 2014-07-28 21:20:18 +0800 | |
|---|---|---|
| committer | 2014-08-15 10:18:40 +0100 | |
| commit | 03c866020b46079afe895dd90f2d60bda06dbe05 (patch) | |
| tree | b28458915368fe3b89f381cb72f769f5a81e818d | |
| parent | 219b53567376bdccba16ca55af8ac2633a924c1b (diff) | |
Integrate NativeActivity with NativeBridge interfaces
Bug: 16884833
Change-Id: I73aab8e212860ba5aee9444d801806d3da326a41
| -rw-r--r-- | core/jni/Android.mk | 3 | ||||
| -rw-r--r-- | 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; |