NativeBridge: add "linked namespace" semantic corresponding to linker

For dynamic linking perspective, semantics of NativeBridge needs to
align with dynamic linker. This patch adds "linked namespace" semantic
which shares some libraries from one namespace to another.

Bug: 37123321
Test: Fugu: netflix, play movies, youtube
Test: make test-art-host-run-test-115-native-bridge

cherry picked from commit e8fb11dfa1b376124d0a1a349c8800799f25606a

Change-Id: I71ce1dde19d61363d5eb9731fd4795a8c315b3a0
diff --git a/libnativeloader/native_loader.cpp b/libnativeloader/native_loader.cpp
index 74f2f1d..ebd6d4b 100644
--- a/libnativeloader/native_loader.cpp
+++ b/libnativeloader/native_loader.cpp
@@ -183,6 +183,11 @@
         return false;
       }
 
+      if (!NativeBridgeLinkNamespaces(ns, nullptr, public_libraries_.c_str())) {
+          *error_msg = NativeBridgeGetError();
+          return false;
+      }
+
       native_loader_ns = NativeLoaderNamespace(ns);
     }
 
@@ -324,10 +329,10 @@
 
     // and now initialize native bridge namespaces if necessary.
     if (NativeBridgeInitialized()) {
-      initialized_ = NativeBridgeInitNamespace(public_libraries_.c_str(),
-                                               is_native_bridge ? library_path : nullptr);
-      if (!initialized_) {
-        *error_msg = NativeBridgeGetError();
+        initialized_ = NativeBridgeInitAnonymousNamespace(
+            public_libraries_.c_str(), is_native_bridge ? library_path : nullptr);
+        if (!initialized_) {
+            *error_msg = NativeBridgeGetError();
       }
     }