Add jni libicu_jni library into ART APEX

- The library may be moved into i18n APEX in the future

Bug: 138994281
Test: device boots
Change-Id: I9c629224bb318acde744d470e7483a80b2473aa4
diff --git a/build/Android.common_path.mk b/build/Android.common_path.mk
index 9c8a45d..df35bd8 100644
--- a/build/Android.common_path.mk
+++ b/build/Android.common_path.mk
@@ -102,7 +102,7 @@
 ART_HOST_DEX_DEPENDENCIES := $(foreach jar,$(HOST_TEST_CORE_JARS),$(HOST_OUT_JAVA_LIBRARIES)/$(jar).jar)
 ART_TARGET_DEX_DEPENDENCIES := $(foreach jar,$(TARGET_TEST_CORE_JARS),$(TARGET_OUT_JAVA_LIBRARIES)/$(jar).jar)
 
-ART_CORE_SHARED_LIBRARIES := libjavacore libopenjdk libopenjdkjvm libopenjdkjvmti
+ART_CORE_SHARED_LIBRARIES := libicu_jni libjavacore libopenjdk libopenjdkjvm libopenjdkjvmti
 ART_CORE_SHARED_DEBUG_LIBRARIES := libopenjdkd libopenjdkjvmd libopenjdkjvmtid
 ART_HOST_SHARED_LIBRARY_DEPENDENCIES := $(foreach lib,$(ART_CORE_SHARED_LIBRARIES), $(ART_HOST_OUT_SHARED_LIBRARIES)/$(lib)$(ART_HOST_SHLIB_EXTENSION))
 ART_HOST_SHARED_LIBRARY_DEBUG_DEPENDENCIES := $(foreach lib,$(ART_CORE_SHARED_DEBUG_LIBRARIES), $(ART_HOST_OUT_SHARED_LIBRARIES)/$(lib)$(ART_HOST_SHLIB_EXTENSION))
diff --git a/build/Android.gtest.mk b/build/Android.gtest.mk
index 258a8b0..51327b3 100644
--- a/build/Android.gtest.mk
+++ b/build/Android.gtest.mk
@@ -504,6 +504,7 @@
     $$(ART_GTEST_$(1)_TARGET_DEPS) \
     $(foreach file,$(ART_GTEST_$(1)_DEX_DEPS),$(ART_TEST_TARGET_GTEST_$(file)_DEX)) \
     $$(gtest_exe) \
+    $$($(3)TARGET_OUT_SHARED_LIBRARIES)/libicu_jni.so \
     $$($(3)TARGET_OUT_SHARED_LIBRARIES)/libjavacore.so \
     $$($(3)TARGET_OUT_SHARED_LIBRARIES)/libopenjdkd.so \
     $$(foreach jar,$$(TARGET_TEST_CORE_JARS),$$(TARGET_OUT_JAVA_LIBRARIES)/$$(jar).jar)
@@ -562,6 +563,7 @@
   gtest_exe := $(2)
   # Dependencies for all host gtests.
   gtest_deps := $$(HOST_CORE_DEX_LOCATIONS) \
+    $$($(3)ART_HOST_OUT_SHARED_LIBRARIES)/libicu_jni$$(ART_HOST_SHLIB_EXTENSION) \
     $$($(3)ART_HOST_OUT_SHARED_LIBRARIES)/libjavacore$$(ART_HOST_SHLIB_EXTENSION) \
     $$($(3)ART_HOST_OUT_SHARED_LIBRARIES)/libopenjdkd$$(ART_HOST_SHLIB_EXTENSION) \
     $$(gtest_exe) \
diff --git a/build/apex/Android.bp b/build/apex/Android.bp
index 41ada9b..ceb3093 100644
--- a/build/apex/Android.bp
+++ b/build/apex/Android.bp
@@ -166,6 +166,7 @@
     "libexpat",
     "libicui18n",
     "libicuuc",
+    "libicu_jni",
     "libjavacore",
     "libopenjdk",
 ]
diff --git a/build/apex/art_apex_test.py b/build/apex/art_apex_test.py
index 87a9843..e7f3e00 100755
--- a/build/apex/art_apex_test.py
+++ b/build/apex/art_apex_test.py
@@ -539,6 +539,7 @@
     self._checker.check_native_library('libexpat')
     self._checker.check_native_library('libicui18n')
     self._checker.check_native_library('libicuuc')
+    self._checker.check_native_library('libicu_jni')
     self._checker.check_native_library('libpac')
     self._checker.check_native_library('libz')
 
@@ -569,6 +570,7 @@
     self._checker.check_native_library('libexpat-host')
     self._checker.check_native_library('libicui18n-host')
     self._checker.check_native_library('libicuuc-host')
+    self._checker.check_native_library('libicu_jni')
     self._checker.check_native_library('libz-host')
 
 
diff --git a/runtime/runtime.cc b/runtime/runtime.cc
index 0c9aece..ecadf68 100644
--- a/runtime/runtime.cc
+++ b/runtime/runtime.cc
@@ -1856,9 +1856,10 @@
   // methods to be loaded first.
   WellKnownClasses::Init(env);
 
-  // Then set up libjavacore / libopenjdk, which are just a regular JNI libraries with
-  // a regular JNI_OnLoad. Most JNI libraries can just use System.loadLibrary, but
-  // libcore can't because it's the library that implements System.loadLibrary!
+  // Then set up libjavacore / libopenjdk / libicu_jni ,which are just
+  // a regular JNI libraries with a regular JNI_OnLoad. Most JNI libraries can
+  // just use System.loadLibrary, but libcore can't because it's the library
+  // that implements System.loadLibrary!
   {
     std::string error_msg;
     if (!java_vm_->LoadNativeLibrary(
@@ -1876,6 +1877,13 @@
       LOG(FATAL) << "LoadNativeLibrary failed for \"" << kOpenJdkLibrary << "\": " << error_msg;
     }
   }
+  {
+    std::string error_msg;
+    if (!java_vm_->LoadNativeLibrary(
+          env, "libicu_jni.so", nullptr, WellKnownClasses::java_lang_Object, &error_msg)) {
+      LOG(FATAL) << "LoadNativeLibrary failed for \"libicu_jni.so\": " << error_msg;
+    }
+  }
 
   // Initialize well known classes that may invoke runtime native methods.
   WellKnownClasses::LateInit(env);
diff --git a/test/Android.run-test.mk b/test/Android.run-test.mk
index 08f4fd1..8ac0a35 100644
--- a/test/Android.run-test.mk
+++ b/test/Android.run-test.mk
@@ -69,6 +69,7 @@
   $(ART_TEST_LIST_host_$(ART_HOST_ARCH)_libarttestd) \
   $(ART_TEST_LIST_host_$(ART_HOST_ARCH)_libnativebridgetest) \
   $(ART_TEST_LIST_host_$(ART_HOST_ARCH)_libnativebridgetestd) \
+  $(ART_HOST_OUT_SHARED_LIBRARIES)/libicu_jni$(ART_HOST_SHLIB_EXTENSION) \
   $(ART_HOST_OUT_SHARED_LIBRARIES)/libjavacore$(ART_HOST_SHLIB_EXTENSION) \
   $(ART_HOST_OUT_SHARED_LIBRARIES)/libopenjdk$(ART_HOST_SHLIB_EXTENSION) \
   $(ART_HOST_OUT_SHARED_LIBRARIES)/libopenjdkd$(ART_HOST_SHLIB_EXTENSION) \
@@ -88,6 +89,7 @@
   $(ART_TEST_LIST_host_$(2ND_ART_HOST_ARCH)_libarttestd) \
   $(ART_TEST_LIST_host_$(2ND_ART_HOST_ARCH)_libnativebridgetest) \
   $(ART_TEST_LIST_host_$(2ND_ART_HOST_ARCH)_libnativebridgetestd) \
+  $(2ND_ART_HOST_OUT_SHARED_LIBRARIES)/libicu_jni$(ART_HOST_SHLIB_EXTENSION) \
   $(2ND_ART_HOST_OUT_SHARED_LIBRARIES)/libjavacore$(ART_HOST_SHLIB_EXTENSION) \
   $(2ND_ART_HOST_OUT_SHARED_LIBRARIES)/libopenjdk$(ART_HOST_SHLIB_EXTENSION) \
   $(2ND_ART_HOST_OUT_SHARED_LIBRARIES)/libopenjdkd$(ART_HOST_SHLIB_EXTENSION) \