summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Yong WU <yong.wu@intel.com> 2014-07-28 21:20:18 +0800
committer Calin Juravle <calin@google.com> 2014-08-15 10:18:40 +0100
commit03c866020b46079afe895dd90f2d60bda06dbe05 (patch)
treeb28458915368fe3b89f381cb72f769f5a81e818d
parent219b53567376bdccba16ca55af8ac2633a924c1b (diff)
Integrate NativeActivity with NativeBridge interfaces
Bug: 16884833 Change-Id: I73aab8e212860ba5aee9444d801806d3da326a41
-rw-r--r--core/jni/Android.mk3
-rw-r--r--core/jni/android_app_NativeActivity.cpp26
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;