Reland "Adjust build and test scripts for handling ICU prebuilts."

Test: run-tests, buildbot-build.sh, run-libcore-tests, run-libjdwp-tests, gtests (on device and host)
Test: gart/tools/golem/build-target.sh, and art/build/apex/runtests.sh.
Bug: 157734636
Bug: 129332183

Change-Id: I77ee0f07fb2d73dff6465da905c966bffa2c5d47
diff --git a/Android.mk b/Android.mk
index 08afe7a..776906d 100644
--- a/Android.mk
+++ b/Android.mk
@@ -468,8 +468,15 @@
 .PHONY: build-art
 build-art: build-art-host build-art-target
 
+# For host, we extract the ICU data from the apex and install it to HOST_OUT/I18N_APEX.
+host-i18n-data-file := $(HOST_OUT)/$(I18N_APEX)/etc
+$(host-i18n-data-file): $(TARGET_OUT)/apex/$(I18N_APEX).apex $(HOST_OUT)/bin/deapexer
+	$(call extract-from-apex,$(I18N_APEX))
+	mkdir -p $(HOST_OUT)/$(I18N_APEX)/
+	cp -R $(TARGET_OUT)/apex/$(I18N_APEX)/etc/ $(HOST_OUT)/$(I18N_APEX)/
+
 .PHONY: build-art-host
-build-art-host:   $(HOST_OUT_EXECUTABLES)/art $(ART_HOST_DEPENDENCIES) $(HOST_CORE_IMG_OUTS)
+build-art-host:   $(HOST_OUT_EXECUTABLES)/art $(ART_HOST_DEPENDENCIES) $(HOST_CORE_IMG_OUTS) $(host-i18n-data-file)
 
 .PHONY: build-art-target
 build-art-target: $(TARGET_OUT_EXECUTABLES)/art $(ART_TARGET_DEPENDENCIES) $(TARGET_CORE_IMG_OUTS)
@@ -657,16 +664,6 @@
 # ART APEX.
 
 # Also include:
-# - a copy of the ICU prebuilt .dat file in /system/etc/icu on target
-#   (see module `icu-data-art-test-i18n`); and
-# so that it can be found even if the ART APEX is not available, by setting the
-# environment variable `ART_TEST_ANDROID_ART_ROOT` to "/system" on device. This
-# is a temporary change needed until Golem fully supports the ART APEX.
-#
-# TODO(b/129332183): Remove this when Golem has full support for the
-# ART APEX.
-
-# Also include:
 # - a copy of the time zone data prebuilt files in
 #   /system/etc/tzdata_module/etc/tz and /system/etc/tzdata_module/etc/icu
 #   on target, (see modules `tzdata-art-test-tzdata`,
@@ -688,7 +685,6 @@
                         $(ART_TARGET_SHARED_LIBRARY_BENCHMARK) \
                         $(TARGET_OUT_SHARED_LIBRARIES)/libz.so \
                         libartpalette-system \
-                        icu-data-art-test-i18n \
                         tzdata-art-test-tzdata tzlookup.xml-art-test-tzdata \
                         tz_version-art-test-tzdata icu_overlay-art-test-tzdata \
                         standalone-apex-files
diff --git a/build/Android.common_path.mk b/build/Android.common_path.mk
index 3ff2612..801a448 100644
--- a/build/Android.common_path.mk
+++ b/build/Android.common_path.mk
@@ -67,7 +67,7 @@
 
 ART_CORE_SHARED_LIBRARIES := libjavacore libopenjdk libopenjdkjvm libopenjdkjvmti
 ART_CORE_SHARED_DEBUG_LIBRARIES := libopenjdkd libopenjdkjvmd libopenjdkjvmtid
-ART_HOST_CORE_SHARED_LIBRARIES := $(ART_CORE_SHARED_LIBRARIES) libandroidicu-host libicuuc-host libicui18n-host libicu_jni
+ART_HOST_CORE_SHARED_LIBRARIES := $(ART_CORE_SHARED_LIBRARIES) libicuuc-host libicui18n-host libicu_jni
 ART_HOST_SHARED_LIBRARY_DEPENDENCIES := $(foreach lib,$(ART_HOST_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))
 ifdef HOST_2ND_ARCH
diff --git a/build/Android.gtest.mk b/build/Android.gtest.mk
index a71ce41..7331033 100644
--- a/build/Android.gtest.mk
+++ b/build/Android.gtest.mk
@@ -176,6 +176,7 @@
   # Dependencies for all host gtests.
   gtest_deps := $$(ART_HOST_DEX_DEPENDENCIES) \
     $$(ART_TEST_HOST_GTEST_DEPENDENCIES) \
+    $$(HOST_OUT)/$$(I18N_APEX)/etc \
     $$(HOST_BOOT_IMAGE_JARS) \
     $$($(3)ART_HOST_OUT_SHARED_LIBRARIES)/libicu_jni$$(ART_HOST_SHLIB_EXTENSION) \
     $$($(3)ART_HOST_OUT_SHARED_LIBRARIES)/libjavacore$$(ART_HOST_SHLIB_EXTENSION) \
@@ -254,7 +255,7 @@
   gtest_suffix :=
 endef  # define-art-gtest-rule-host
 
-ART_TEST_HOST_GTEST_DEPENDENCIES :=
+ART_TEST_HOST_GTEST_DEPENDENCIES := $(host-i18n-data-file)
 ART_TEST_TARGET_GTEST_DEPENDENCIES := $(TESTING_ART_APEX)
 
 # Add the additional dependencies for the specified test
@@ -306,7 +307,7 @@
 ifeq ($(ART_BUILD_TARGET),true)
   $(foreach name,$(ART_TARGET_GTEST_NAMES), $(eval $(call add-art-gtest-dependencies,$(name),)))
   ART_TEST_TARGET_GTEST_DEPENDENCIES += \
-    libicu_jni.com.android.i18n \
+    com.android.i18n \
     libjavacore.com.android.art.testing \
     libopenjdkd.com.android.art.testing \
     com.android.art.testing \
diff --git a/tools/bootjars.sh b/tools/bootjars.sh
index 5516bfb..6c39d31 100755
--- a/tools/bootjars.sh
+++ b/tools/bootjars.sh
@@ -113,7 +113,12 @@
     if [[ $jar == "conscrypt" ]]; then
       echo "$intermediates_dir/JAVA_LIBRARIES/${jar}.com.android.conscrypt_intermediates/classes.jar"
     elif [[ $jar == "core-icu4j" ]]; then
-      echo "$intermediates_dir/JAVA_LIBRARIES/${jar}.com.android.i18n_intermediates/classes.jar"
+      # The location of ICU is different on an unbundled build.
+      if [[ -f "$intermediates_dir/JAVA_LIBRARIES/${jar}.com.android.i18n_intermediates/classes.jar" ]]; then
+        echo "$intermediates_dir/JAVA_LIBRARIES/${jar}.com.android.i18n_intermediates/classes.jar"
+      else
+        echo "$intermediates_dir/JAVA_LIBRARIES/${jar}_intermediates/classes.jar"
+      fi
     else
       echo "$intermediates_dir/JAVA_LIBRARIES/${jar}.com.android.art.testing_intermediates/classes.jar"
     fi
diff --git a/tools/buildbot-build.sh b/tools/buildbot-build.sh
index dd8c188..80f771f 100755
--- a/tools/buildbot-build.sh
+++ b/tools/buildbot-build.sh
@@ -91,8 +91,8 @@
   make_command="build/soong/soong_ui.bash --make-mode $j_arg $extra_args $showcommands build-art-target-tests $common_targets"
   make_command+=" libnetd_client-target toybox sh"
   make_command+=" debuggerd su gdbserver"
-  # vogar requires the class files for conscrypt.
-  make_command+=" conscrypt"
+  # vogar requires the class files for conscrypt and ICU.
+  make_command+=" conscrypt core-icu4j"
   make_command+=" ${ANDROID_PRODUCT_OUT#"${ANDROID_BUILD_TOP}/"}/system/etc/public.libraries.txt"
   # Targets required to generate a linker configuration for device within the
   # chroot environment. The *.libraries.txt targets are required by