Add a link from runtime ns to the neuralnetworks ns

libneuralnetworks.so could be preloaded by libnativeloader. In that case,
it should be accessible from libnativeloader which runs in the
art namespace.

Bug: 141847343
Test: m, device boots
Test: run vm-tests-tf
Change-Id: I68507d5f00e4e60bc18ea9ffd5093b019d2ec559
diff --git a/build/apex/ld.config.txt b/build/apex/ld.config.txt
index 523532b..cadddc2 100644
--- a/build/apex/ld.config.txt
+++ b/build/apex/ld.config.txt
@@ -8,7 +8,7 @@
 dir.art = /apex/com.android.art/bin/
 
 [art]
-additional.namespaces = platform,conscrypt,art
+additional.namespaces = platform,conscrypt,art,neuralnetworks
 
 # The default namespace here only links to other namespaces, in particular "art"
 # where the real library loading takes place. Any outgoing links from "art" also
@@ -41,12 +41,13 @@
 # odex files are in /system/framework. dalvikvm has to be able to dlopen the
 # files for CTS.
 namespace.art.permitted.paths += /system/framework
-namespace.art.links = platform
+namespace.art.links = platform,neuralnetworks
 # Need allow_all_shared_libs because libart.so can dlopen oat files in
 # /system/framework and /data.
 # TODO(b/130340935): Use a dynamically created linker namespace similar to
 # classloader-namespace for oat files, and tighten this up.
 namespace.art.link.platform.allow_all_shared_libs = true
+namespace.art.link.neuralnetworks.shared_libs = libneuralnetworks.so
 
 ###############################################################################
 # "platform" namespace
@@ -117,3 +118,24 @@
 namespace.conscrypt.link.platform.shared_libs += libm.so
 namespace.conscrypt.link.platform.shared_libs += libdl.so
 namespace.conscrypt.link.platform.shared_libs += liblog.so
+
+###############################################################################
+# "neuralnetworks" APEX namespace
+#
+# This namespace is for libraries within the NNAPI APEX.
+###############################################################################
+namespace.neuralnetworks.isolated = true
+namespace.neuralnetworks.visible = true
+
+namespace.neuralnetworks.search.paths = /apex/com.android.neuralnetworks/${LIB}
+namespace.neuralnetworks.asan.search.paths = /apex/com.android.neuralnetworks/${LIB}
+namespace.neuralnetworks.links = platform
+namespace.neuralnetworks.link.platform.shared_libs  = libc.so
+namespace.neuralnetworks.link.platform.shared_libs += libcgrouprc.so
+namespace.neuralnetworks.link.platform.shared_libs += libdl.so
+namespace.neuralnetworks.link.platform.shared_libs += liblog.so
+namespace.neuralnetworks.link.platform.shared_libs += libm.so
+namespace.neuralnetworks.link.platform.shared_libs += libnativewindow.so
+namespace.neuralnetworks.link.platform.shared_libs += libneuralnetworks_packageinfo.so
+namespace.neuralnetworks.link.platform.shared_libs += libsync.so
+namespace.neuralnetworks.link.platform.shared_libs += libvndksupport.so