diff --git a/android_icu4j/api/intra/current.txt b/android_icu4j/api/intra/current.txt
index e3c443a..a1e0810 100644
--- a/android_icu4j/api/intra/current.txt
+++ b/android_icu4j/api/intra/current.txt
@@ -102,7 +102,6 @@
 package com.android.i18n.timezone {
 
   public final class ZoneInfoData {
-    method public com.android.i18n.timezone.ZoneInfoData createCopy();
     method public com.android.i18n.timezone.ZoneInfoData createCopyWithRawOffset(int);
     method public static com.android.i18n.timezone.ZoneInfoData createFromSerializationFields(String, java.io.ObjectInputStream.GetField) throws java.io.IOException;
     method public static com.android.i18n.timezone.ZoneInfoData createZoneInfo(String, java.nio.ByteBuffer) throws java.io.IOException;
diff --git a/android_icu4j/libcore_bridge/src/java/com/android/i18n/timezone/ZoneInfoData.java b/android_icu4j/libcore_bridge/src/java/com/android/i18n/timezone/ZoneInfoData.java
index efc903d..57f341e 100644
--- a/android_icu4j/libcore_bridge/src/java/com/android/i18n/timezone/ZoneInfoData.java
+++ b/android_icu4j/libcore_bridge/src/java/com/android/i18n/timezone/ZoneInfoData.java
@@ -775,14 +775,6 @@
     }
 
     /**
-     * Create a deep copy of this object.
-     */
-    @libcore.api.IntraCoreApi
-    public ZoneInfoData createCopy() {
-        return new ZoneInfoData(this);
-    }
-
-    /**
      * Create a deep copy of this object with a new raw offset.
      */
     @libcore.api.IntraCoreApi
@@ -794,13 +786,11 @@
      * Returns the times (in seconds) at which the offsets changes for any reason, whether that is a
      * change in the offset from UTC or a change in the DST.
      *
-     * WARNING: This API is exposed only for app compat usage in {@link libcore.util.ZoneInfo}. The
-     * data is read-only. Do not write any data into the returned array, which is an internal
-     * data structure.
+     * WARNING: This API is exposed only for app compat usage in @link libcore.util.ZoneInfo}.
      */
     @libcore.api.IntraCoreApi
     public long[] getTransitions() {
-        return mTransitions;
+        return mTransitions == null ? null : mTransitions.clone();
     }
 
     /**
diff --git a/android_icu4j/libcore_bridge/src/java/com/android/i18n/timezone/ZoneInfoDb.java b/android_icu4j/libcore_bridge/src/java/com/android/i18n/timezone/ZoneInfoDb.java
index 9fbf0d3..f5fa160 100644
--- a/android_icu4j/libcore_bridge/src/java/com/android/i18n/timezone/ZoneInfoDb.java
+++ b/android_icu4j/libcore_bridge/src/java/com/android/i18n/timezone/ZoneInfoDb.java
@@ -382,8 +382,9 @@
   public ZoneInfoData makeZoneInfoData(String id) {
     checkNotClosed();
     ZoneInfoData zoneInfoData = cache.get(id);
-    // The object from the cache is cloned because TimeZone / ZoneInfo are mutable.
-    return zoneInfoData == null ? null : zoneInfoData.createCopy();
+    // The object from the cache is not cloned because ZoneInfoData is immutable.
+    // Note that zoneInfoData can be null here.
+    return zoneInfoData;
   }
 
   @libcore.api.CorePlatformApi
diff --git a/android_icu4j/testing/src/com/android/i18n/test/timezone/ZoneInfoDataTest.java b/android_icu4j/testing/src/com/android/i18n/test/timezone/ZoneInfoDataTest.java
index 7a7472a..29a5d28 100644
--- a/android_icu4j/testing/src/com/android/i18n/test/timezone/ZoneInfoDataTest.java
+++ b/android_icu4j/testing/src/com/android/i18n/test/timezone/ZoneInfoDataTest.java
@@ -632,24 +632,6 @@
     }
   }
 
-  public void testCreateCopy() throws Exception {
-    long[][] transitions = {
-            { 0, 0 },
-            { 5, 1 },
-            { 2000, 2 },
-    };
-    int[][] types = {
-            { 1800, 0 },
-            { 3600, 1 },
-            { 5400, 0 }
-    };
-    ZoneInfoData zoneInfoData = createZoneInfoData(transitions, types);
-    ZoneInfoData copy = zoneInfoData.createCopy();
-    assertNotSame(zoneInfoData, copy);
-    assertTrue("zoneInfoData does not have the same rule as its copy",
-            zoneInfoData.hasSameRules(copy));
-  }
-
   public void testCreateCopyWithRawOffset() throws Exception {
     long[][] transitions = {
             { 0, 0 },
