OSDN Git Service

Integrate NativeActivity with NativeBridge interfaces
authorYong WU <yong.wu@intel.com>
Mon, 28 Jul 2014 13:20:18 +0000 (21:20 +0800)
committerCalin Juravle <calin@google.com>
Fri, 15 Aug 2014 09:18:40 +0000 (10:18 +0100)
Bug: 16884833

Change-Id: I73aab8e212860ba5aee9444d801806d3da326a41

core/jni/Android.mk
core/jni/android_app_NativeActivity.cpp

index e4fad09..b5e068d 100644 (file)
@@ -209,7 +209,8 @@ LOCAL_SHARED_LIBRARIES := \
        libjpeg \
        libusbhost \
        libharfbuzz_ng \
-       libz
+       libz \
+       libnativebridge
 
 ifeq ($(USE_OPENGL_RENDERER),true)
        LOCAL_SHARED_LIBRARIES += libhwui
index 9c44093..633a207 100644 (file)
@@ -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;