"Move ICU from ART APEX to i18n APEX" Attempt 2

The change was previously submitted in https://r.android.com/1283897

"Calling @IntraCoreApi from core-icu4j should not cause Core platform API violation"
https://r.android.com/1299494

Bug: 138994281
Test: m checkbuild on aosp_x86-userdebug
Test: device boots
Change-Id: Idb3e2450fca5d8300aef353fc1e4e99e24f04372
diff --git a/libnativeloader/library_namespaces.cpp b/libnativeloader/library_namespaces.cpp
index d42a4b5..14ba721 100644
--- a/libnativeloader/library_namespaces.cpp
+++ b/libnativeloader/library_namespaces.cpp
@@ -51,6 +51,7 @@
 constexpr const char* kVndkNamespaceName = "vndk";
 constexpr const char* kVndkProductNamespaceName = "vndk_product";
 constexpr const char* kArtNamespaceName = "com_android_art";
+constexpr const char* kI18nNamespaceName = "com_android_i18n";
 constexpr const char* kNeuralNetworksNamespaceName = "com_android_neuralnetworks";
 constexpr const char* kStatsdNamespaceName = "com_android_os_statsd";
 
@@ -272,6 +273,15 @@
     }
   }
 
+  auto i18n_ns = NativeLoaderNamespace::GetExportedNamespace(kI18nNamespaceName, is_bridged);
+  // i18n APEX does not exist on host, and under certain build conditions.
+  if (i18n_ns.ok()) {
+    linked = app_ns->Link(*i18n_ns, i18n_public_libraries());
+    if (!linked.ok()) {
+      return linked.error();
+    }
+  }
+
   // Give access to NNAPI libraries (apex-updated LLNDK library).
   auto nnapi_ns =
       NativeLoaderNamespace::GetExportedNamespace(kNeuralNetworksNamespaceName, is_bridged);