Re-generate libandroidicu.so

The command:
./tools/icu4c_srcgen/generate_libandroidicu.py

Change-Id: I69d289b9fc087626710523111a13b5185cbef773
diff --git a/libandroidicu/include/unicode/platform.h b/libandroidicu/include/unicode/platform.h
index ad75b29..2bb2f8b 100644
--- a/libandroidicu/include/unicode/platform.h
+++ b/libandroidicu/include/unicode/platform.h
@@ -828,7 +828,7 @@
 #   define U_EXPORT
 #endif
 
-/* U_CALLCONV is releated to U_EXPORT2 */
+/* U_CALLCONV is related to U_EXPORT2 */
 #ifdef U_EXPORT2
     /* Use the predefined value. */
 #elif defined(_MSC_VER)
diff --git a/libandroidicu/include/unicode/udat.h b/libandroidicu/include/unicode/udat.h
index c3eb651..a0855c3 100644
--- a/libandroidicu/include/unicode/udat.h
+++ b/libandroidicu/include/unicode/udat.h
@@ -962,7 +962,37 @@
 U_CAPI void U_EXPORT2
 udat_setBooleanAttribute(UDateFormat *fmt, UDateFormatBooleanAttribute attr, UBool newValue, UErrorCode* status);
 
+#ifndef U_HIDE_DRAFT_API
+/**
+ * Hour Cycle.
+ * @draft ICU 67
+ */
+typedef enum UDateFormatHourCycle {
+    /**
+     * Hour in am/pm (0~11)
+     * @draft ICU 67
+     */
+    UDAT_HOUR_CYCLE_11,
 
+    /**
+     * Hour in am/pm (1~12)
+     * @draft ICU 67
+     */
+    UDAT_HOUR_CYCLE_12,
+
+    /**
+     * Hour in day (0~23)
+     * @draft ICU 67
+     */
+    UDAT_HOUR_CYCLE_23,
+
+    /**
+     * Hour in day (1~24)
+     * @draft ICU 67
+     */
+    UDAT_HOUR_CYCLE_24
+} UDateFormatHourCycle;
+#endif  /* U_HIDE_DRAFT_API */
 
 #if U_SHOW_CPLUSPLUS_API
 
diff --git a/libandroidicu/include/unicode/udateintervalformat.h b/libandroidicu/include/unicode/udateintervalformat.h
index 86dd678..90fab08 100644
--- a/libandroidicu/include/unicode/udateintervalformat.h
+++ b/libandroidicu/include/unicode/udateintervalformat.h
@@ -14,6 +14,7 @@
 
 #if !UCONFIG_NO_FORMATTING
 
+#include "unicode/ucal.h"
 #include "unicode/umisc.h"
 #include "unicode/uformattedvalue.h"
 
@@ -85,14 +86,12 @@
 struct UDateIntervalFormat;
 typedef struct UDateIntervalFormat UDateIntervalFormat;  /**< C typedef for struct UDateIntervalFormat. @stable ICU 4.8 */
 
-#ifndef U_HIDE_DRAFT_API
 struct UFormattedDateInterval;
 /**
  * Opaque struct to contain the results of a UDateIntervalFormat operation.
- * @draft ICU 64
+ * @stable ICU 64
  */
 typedef struct UFormattedDateInterval UFormattedDateInterval;
-#endif /* U_HIDE_DRAFT_API */
 
 /**
  * Open a new UDateIntervalFormat object using the predefined rules for a
@@ -135,8 +134,6 @@
 U_STABLE void U_EXPORT2
 udtitvfmt_close(UDateIntervalFormat *formatter);
 
-
-#ifndef U_HIDE_DRAFT_API
 /**
  * Creates an object to hold the result of a UDateIntervalFormat
  * operation. The object can be used repeatedly; it is cleared whenever
@@ -144,7 +141,7 @@
  *
  * @param ec Set if an error occurs.
  * @return A pointer needing ownership.
- * @draft ICU 64
+ * @stable ICU 64
  */
 U_CAPI UFormattedDateInterval* U_EXPORT2
 udtitvfmt_openResult(UErrorCode* ec);
@@ -169,7 +166,7 @@
  * @param uresult The object containing the formatted string.
  * @param ec Set if an error occurs.
  * @return A UFormattedValue owned by the input object.
- * @draft ICU 64
+ * @stable ICU 64
  */
 U_CAPI const UFormattedValue* U_EXPORT2
 udtitvfmt_resultAsValue(const UFormattedDateInterval* uresult, UErrorCode* ec);
@@ -178,11 +175,10 @@
  * Releases the UFormattedDateInterval created by udtitvfmt_openResult().
  *
  * @param uresult The object to release.
- * @draft ICU 64
+ * @stable ICU 64
  */
 U_CAPI void U_EXPORT2
 udtitvfmt_closeResult(UFormattedDateInterval* uresult);
-#endif /* U_HIDE_DRAFT_API */
 
 
 #if U_SHOW_CPLUSPLUS_API
@@ -200,7 +196,6 @@
  */
 U_DEFINE_LOCAL_OPEN_POINTER(LocalUDateIntervalFormatPointer, UDateIntervalFormat, udtitvfmt_close);
 
-#ifndef U_HIDE_DRAFT_API
 /**
  * \class LocalUFormattedDateIntervalPointer
  * "Smart pointer" class, closes a UFormattedDateInterval via udtitvfmt_close().
@@ -208,10 +203,9 @@
  *
  * @see LocalPointerBase
  * @see LocalPointer
- * @draft ICU 64
+ * @stable ICU 64
  */
 U_DEFINE_LOCAL_OPEN_POINTER(LocalUFormattedDateIntervalPointer, UFormattedDateInterval, udtitvfmt_closeResult);
-#endif /* U_HIDE_DRAFT_API */
 
 U_NAMESPACE_END
 
@@ -263,23 +257,48 @@
  * UDateIntervalFormat object.
  * @param formatter
  *            The UDateIntervalFormat object specifying the format conventions.
- * @param result
- *            The UFormattedDateInterval to contain the result of the
- *            formatting operation.
  * @param fromDate
  *            The starting point of the range.
  * @param toDate
  *            The ending point of the range.
+ * @param result
+ *            The UFormattedDateInterval to contain the result of the
+ *            formatting operation.
  * @param status
  *            A pointer to a UErrorCode to receive any errors.
- * @draft ICU 64
+ * @draft ICU 67
  */
 U_DRAFT void U_EXPORT2
 udtitvfmt_formatToResult(
                 const UDateIntervalFormat* formatter,
-                UFormattedDateInterval* result,
                 UDate           fromDate,
                 UDate           toDate,
+                UFormattedDateInterval* result,
+                UErrorCode*     status);
+
+/**
+ * Formats a date/time range using the conventions established for the
+ * UDateIntervalFormat object.
+ * @param formatter
+ *            The UDateIntervalFormat object specifying the format conventions.
+ * @param fromCalendar
+ *            The starting point of the range.
+ * @param toCalendar
+ *            The ending point of the range.
+ * @param result
+ *            The UFormattedDateInterval to contain the result of the
+ *            formatting operation.
+ * @param status
+ *            A pointer to a UErrorCode to receive any errors.
+ * @draft ICU 67
+ */
+
+U_DRAFT void U_EXPORT2
+udtitvfmt_formatCalendarToResult(
+                const UDateIntervalFormat* formatter,
+                UCalendar*      fromCalendar,
+                UCalendar*      toCalendar,
+                UFormattedDateInterval* result,
                 UErrorCode*     status);
 #endif /* U_HIDE_DRAFT_API */
 
diff --git a/libandroidicu/include/unicode/udatpg.h b/libandroidicu/include/unicode/udatpg.h
index 9f6f5b1..0c9eed7 100644
--- a/libandroidicu/include/unicode/udatpg.h
+++ b/libandroidicu/include/unicode/udatpg.h
@@ -20,6 +20,7 @@
 #define __UDATPG_H__
 
 #include "unicode/utypes.h"
+#include "unicode/udat.h"
 #include "unicode/uenum.h"
 
 #if U_SHOW_CPLUSPLUS_API
@@ -654,4 +655,26 @@
                              const UChar *skeleton, int32_t skeletonLength,
                              int32_t *pLength);
 
+#if !UCONFIG_NO_FORMATTING
+
+#ifndef U_HIDE_DRAFT_API
+/**
+ * Return the default hour cycle for a locale. Uses the locale that the
+ * UDateTimePatternGenerator was initially created with.
+ * 
+ * Cannot be used on an empty UDateTimePatternGenerator instance.
+ * 
+ * @param dtpg a pointer to UDateTimePatternGenerator.
+ * @param pErrorCode a pointer to the UErrorCode which must not indicate a
+ *                   failure before the function call. Set to U_UNSUPPORTED_ERROR
+ *                   if used on an empty instance.
+ * @return the default hour cycle.
+ * @draft ICU 67
+ */
+U_DRAFT UDateFormatHourCycle U_EXPORT2
+udatpg_getDefaultHourCycle(const UDateTimePatternGenerator *dtpg, UErrorCode* pErrorCode);
+#endif  /* U_HIDE_DRAFT_API */
+
+#endif /* #if !UCONFIG_NO_FORMATTING */
+
 #endif
diff --git a/libandroidicu/include/unicode/uformattedvalue.h b/libandroidicu/include/unicode/uformattedvalue.h
index 0b289e3..07f4281 100644
--- a/libandroidicu/include/unicode/uformattedvalue.h
+++ b/libandroidicu/include/unicode/uformattedvalue.h
@@ -10,8 +10,6 @@
 
 #include "unicode/ufieldpositer.h"
 
-#ifndef U_HIDE_DRAFT_API
-
 /**
  * \file
  * \brief C API: Abstract operations for localized strings.
@@ -31,41 +29,41 @@
  * categories 2^28 and higher or below zero (with the highest bit turned on)
  * are private-use and will not be used by ICU in the future.
  *
- * @draft ICU 64
+ * @stable ICU 64
  */
 typedef enum UFieldCategory {
     /**
      * For an undefined field category.
      * 
-     * @draft ICU 64
+     * @stable ICU 64
      */
     UFIELD_CATEGORY_UNDEFINED = 0,
 
     /**
      * For fields in UDateFormatField (udat.h), from ICU 3.0.
      *
-     * @draft ICU 64
+     * @stable ICU 64
      */
     UFIELD_CATEGORY_DATE,
 
     /**
      * For fields in UNumberFormatFields (unum.h), from ICU 49.
      *
-     * @draft ICU 64
+     * @stable ICU 64
      */
     UFIELD_CATEGORY_NUMBER,
 
     /**
      * For fields in UListFormatterField (ulistformatter.h), from ICU 63.
      *
-     * @draft ICU 64
+     * @stable ICU 64
      */
     UFIELD_CATEGORY_LIST,
 
     /**
      * For fields in URelativeDateTimeFormatterField (ureldatefmt.h), from ICU 64.
      *
-     * @draft ICU 64
+     * @stable ICU 64
      */
     UFIELD_CATEGORY_RELATIVE_DATETIME,
 
@@ -84,14 +82,14 @@
     /**
      * Category for spans in a list.
      *
-     * @draft ICU 64
+     * @stable ICU 64
      */
     UFIELD_CATEGORY_LIST_SPAN = 0x1000 + UFIELD_CATEGORY_LIST,
 
     /**
      * Category for spans in a date interval.
      *
-     * @draft ICU 64
+     * @stable ICU 64
      */
     UFIELD_CATEGORY_DATE_INTERVAL_SPAN = 0x1000 + UFIELD_CATEGORY_DATE_INTERVAL,
 
@@ -108,7 +106,7 @@
  *   2. It allows you to set constraints to use when iterating over field positions.
  *   3. It is used for the newer FormattedValue APIs.
  *
- * @draft ICU 64
+ * @stable ICU 64
  */
 typedef struct UConstrainedFieldPosition UConstrainedFieldPosition;
 
@@ -120,9 +118,9 @@
  *
  * @param ec Set if an error occurs.
  * @return The new object, or NULL if an error occurs.
- * @draft ICU 64
+ * @stable ICU 64
  */
-U_DRAFT UConstrainedFieldPosition* U_EXPORT2
+U_STABLE UConstrainedFieldPosition* U_EXPORT2
 ucfpos_open(UErrorCode* ec);
 
 
@@ -133,9 +131,9 @@
  *
  * @param ucfpos The instance of UConstrainedFieldPosition.
  * @param ec Set if an error occurs.
- * @draft ICU 64
+ * @stable ICU 64
  */
-U_DRAFT void U_EXPORT2
+U_STABLE void U_EXPORT2
 ucfpos_reset(
     UConstrainedFieldPosition* ucfpos,
     UErrorCode* ec);
@@ -145,9 +143,9 @@
  * Destroys a UConstrainedFieldPosition and releases its memory.
  *
  * @param ucfpos The instance of UConstrainedFieldPosition.
- * @draft ICU 64
+ * @stable ICU 64
  */
-U_DRAFT void U_EXPORT2
+U_STABLE void U_EXPORT2
 ucfpos_close(UConstrainedFieldPosition* ucfpos);
 
 
@@ -174,9 +172,9 @@
  * @param ucfpos The instance of UConstrainedFieldPosition.
  * @param category The field category to fix when iterating.
  * @param ec Set if an error occurs.
- * @draft ICU 64
+ * @stable ICU 64
  */
-U_DRAFT void U_EXPORT2
+U_STABLE void U_EXPORT2
 ucfpos_constrainCategory(
     UConstrainedFieldPosition* ucfpos,
     int32_t category,
@@ -207,9 +205,9 @@
  * @param category The field category to fix when iterating.
  * @param field The field to fix when iterating.
  * @param ec Set if an error occurs.
- * @draft ICU 64
+ * @stable ICU 64
  */
-U_DRAFT void U_EXPORT2
+U_STABLE void U_EXPORT2
 ucfpos_constrainField(
     UConstrainedFieldPosition* ucfpos,
     int32_t category,
@@ -227,9 +225,9 @@
  * @param ucfpos The instance of UConstrainedFieldPosition.
  * @param ec Set if an error occurs.
  * @return The field category saved in the instance.
- * @draft ICU 64
+ * @stable ICU 64
  */
-U_DRAFT int32_t U_EXPORT2
+U_STABLE int32_t U_EXPORT2
 ucfpos_getCategory(
     const UConstrainedFieldPosition* ucfpos,
     UErrorCode* ec);
@@ -245,9 +243,9 @@
  * @param ucfpos The instance of UConstrainedFieldPosition.
  * @param ec Set if an error occurs.
  * @return The field saved in the instance.
- * @draft ICU 64
+ * @stable ICU 64
  */
-U_DRAFT int32_t U_EXPORT2
+U_STABLE int32_t U_EXPORT2
 ucfpos_getField(
     const UConstrainedFieldPosition* ucfpos,
     UErrorCode* ec);
@@ -262,9 +260,9 @@
  * @param pStart Set to the start index saved in the instance. Ignored if nullptr.
  * @param pLimit Set to the end index saved in the instance. Ignored if nullptr.
  * @param ec Set if an error occurs.
- * @draft ICU 64
+ * @stable ICU 64
  */
-U_DRAFT void U_EXPORT2
+U_STABLE void U_EXPORT2
 ucfpos_getIndexes(
     const UConstrainedFieldPosition* ucfpos,
     int32_t* pStart,
@@ -282,9 +280,9 @@
  * @param ucfpos The instance of UConstrainedFieldPosition.
  * @param ec Set if an error occurs.
  * @return The current iteration context from ucfpos_setInt64IterationContext.
- * @draft ICU 64
+ * @stable ICU 64
  */
-U_DRAFT int64_t U_EXPORT2
+U_STABLE int64_t U_EXPORT2
 ucfpos_getInt64IterationContext(
     const UConstrainedFieldPosition* ucfpos,
     UErrorCode* ec);
@@ -298,9 +296,9 @@
  * @param ucfpos The instance of UConstrainedFieldPosition.
  * @param context The new iteration context.
  * @param ec Set if an error occurs.
- * @draft ICU 64
+ * @stable ICU 64
  */
-U_DRAFT void U_EXPORT2
+U_STABLE void U_EXPORT2
 ucfpos_setInt64IterationContext(
     UConstrainedFieldPosition* ucfpos,
     int64_t context,
@@ -317,9 +315,9 @@
  * @param category The category to test.
  * @param field The field to test.
  * @param ec Set if an error occurs.
- * @draft ICU 64
+ * @stable ICU 64
  */
-U_DRAFT UBool U_EXPORT2
+U_STABLE UBool U_EXPORT2
 ucfpos_matchesField(
     const UConstrainedFieldPosition* ucfpos,
     int32_t category,
@@ -341,9 +339,9 @@
  * @param start The new inclusive start index.
  * @param limit The new exclusive end index.
  * @param ec Set if an error occurs.
- * @draft ICU 64
+ * @stable ICU 64
  */
-U_DRAFT void U_EXPORT2
+U_STABLE void U_EXPORT2
 ucfpos_setState(
     UConstrainedFieldPosition* ucfpos,
     int32_t category,
@@ -358,7 +356,7 @@
  * An abstract formatted value: a string with associated field attributes.
  * Many formatters format to types compatible with UFormattedValue.
  *
- * @draft ICU 64
+ * @stable ICU 64
  */
 typedef struct UFormattedValue UFormattedValue;
 
@@ -374,9 +372,9 @@
  * @param pLength Output variable for the length of the string. Ignored if NULL.
  * @param ec Set if an error occurs.
  * @return A NUL-terminated char16 string owned by the UFormattedValue.
- * @draft ICU 64
+ * @stable ICU 64
  */
-U_DRAFT const UChar* U_EXPORT2
+U_STABLE const UChar* U_EXPORT2
 ufmtval_getString(
     const UFormattedValue* ufmtval,
     int32_t* pLength,
@@ -404,9 +402,9 @@
  *         and ucfpos_constrainField.
  * @param ec Set if an error occurs.
  * @return TRUE if another position was found; FALSE otherwise.
- * @draft ICU 64
+ * @stable ICU 64
  */
-U_DRAFT UBool U_EXPORT2
+U_STABLE UBool U_EXPORT2
 ufmtval_nextPosition(
     const UFormattedValue* ufmtval,
     UConstrainedFieldPosition* ucfpos,
@@ -426,7 +424,7 @@
  *     LocalUConstrainedFieldPositionPointer ucfpos(ucfpos_open(ec));
  *     // no need to explicitly call ucfpos_close()
  *
- * @draft ICU 64
+ * @stable ICU 64
  */
 U_DEFINE_LOCAL_OPEN_POINTER(LocalUConstrainedFieldPositionPointer,
     UConstrainedFieldPosition,
@@ -436,6 +434,5 @@
 #endif // U_SHOW_CPLUSPLUS_API
 
 
-#endif  /* U_HIDE_DRAFT_API */
 #endif /* #if !UCONFIG_NO_FORMATTING */
 #endif // __UFORMATTEDVALUE_H__
diff --git a/libandroidicu/include/unicode/ulistformatter.h b/libandroidicu/include/unicode/ulistformatter.h
index 20a3c63..1431753 100644
--- a/libandroidicu/include/unicode/ulistformatter.h
+++ b/libandroidicu/include/unicode/ulistformatter.h
@@ -37,37 +37,92 @@
 struct UListFormatter;
 typedef struct UListFormatter UListFormatter;  /**< C typedef for struct UListFormatter. @stable ICU 55 */
 
-#ifndef U_HIDE_DRAFT_API
 struct UFormattedList;
 /**
  * Opaque struct to contain the results of a UListFormatter operation.
- * @draft ICU 64
+ * @stable ICU 64
  */
 typedef struct UFormattedList UFormattedList;
-#endif  /* U_HIDE_DRAFT_API */
 
-#ifndef U_HIDE_DRAFT_API
 /**
  * FieldPosition and UFieldPosition selectors for format fields
  * defined by ListFormatter.
- * @draft ICU 63
+ * @stable ICU 63
  */
 typedef enum UListFormatterField {
     /**
      * The literal text in the result which came from the resources.
-     * @draft ICU 63
+     * @stable ICU 63
      */
     ULISTFMT_LITERAL_FIELD,
     /**
      * The element text in the result which came from the input strings.
-     * @draft ICU 63
+     * @stable ICU 63
      */
     ULISTFMT_ELEMENT_FIELD
 } UListFormatterField;
+
+#ifndef U_HIDE_DRAFT_API
+/**
+ * Type of meaning expressed by the list.
+ *
+ * @draft ICU 67
+ */
+typedef enum UListFormatterType {
+    /**
+     * Conjunction formatting, e.g. "Alice, Bob, Charlie, and Delta".
+     *
+     * @draft ICU 67
+     */
+    ULISTFMT_TYPE_AND,
+
+    /**
+     * Disjunction (or alternative, or simply one of) formatting, e.g.
+     * "Alice, Bob, Charlie, or Delta".
+     *
+     * @draft ICU 67
+     */
+    ULISTFMT_TYPE_OR,
+
+    /**
+     * Formatting of a list of values with units, e.g. "5 pounds, 12 ounces".
+     *
+     * @draft ICU 67
+     */
+    ULISTFMT_TYPE_UNITS
+} UListFormatterType;
+
+/**
+ * Verbosity level of the list patterns.
+ *
+ * @draft ICU 67
+ */
+typedef enum UListFormatterWidth {
+    /**
+     * Use list formatting with full words (no abbreviations) when possible.
+     *
+     * @draft ICU 67
+     */
+    ULISTFMT_WIDTH_WIDE,
+
+    /**
+     * Use list formatting of typical length.
+     * @draft ICU 67
+     */
+    ULISTFMT_WIDTH_SHORT,
+
+    /**
+     * Use list formatting of the shortest possible length.
+     * @draft ICU 67
+     */
+    ULISTFMT_WIDTH_NARROW,
+} UListFormatterWidth;
 #endif /* U_HIDE_DRAFT_API */
 
 /**
  * Open a new UListFormatter object using the rules for a given locale.
+ * The object will be initialized with AND type and WIDE width.
+ *
  * @param locale
  *            The locale whose rules should be used; may be NULL for
  *            default locale.
@@ -86,6 +141,34 @@
 ulistfmt_open(const char*  locale,
               UErrorCode*  status);
 
+#ifndef U_HIDE_DRAFT_API
+/**
+ * Open a new UListFormatter object appropriate for the given locale, list type,
+ * and style.
+ *
+ * @param locale
+ *            The locale whose rules should be used; may be NULL for
+ *            default locale.
+ * @param type
+ *            The type of list formatting to use.
+ * @param width
+ *            The width of formatting to use.
+ * @param status
+ *            A pointer to a standard ICU UErrorCode (input/output parameter).
+ *            Its input value must pass the U_SUCCESS() test, or else the
+ *            function returns immediately. The caller should check its output
+ *            value with U_FAILURE(), or use with function chaining (see User
+ *            Guide for details).
+ * @return
+ *            A pointer to a UListFormatter object for the specified locale,
+ *            or NULL if an error occurred.
+ * @draft ICU 67
+ */
+U_DRAFT UListFormatter* U_EXPORT2
+ulistfmt_openForType(const char*  locale, UListFormatterType type,
+                     UListFormatterWidth width, UErrorCode*  status);
+#endif /* U_HIDE_DRAFT_API */
+
 /**
  * Close a UListFormatter object. Once closed it may no longer be used.
  * @param listfmt
@@ -95,7 +178,6 @@
 U_CAPI void U_EXPORT2
 ulistfmt_close(UListFormatter *listfmt);
 
-#ifndef U_HIDE_DRAFT_API
 /**
  * Creates an object to hold the result of a UListFormatter
  * operation. The object can be used repeatedly; it is cleared whenever
@@ -103,7 +185,7 @@
  *
  * @param ec Set if an error occurs.
  * @return A pointer needing ownership.
- * @draft ICU 64
+ * @stable ICU 64
  */
 U_CAPI UFormattedList* U_EXPORT2
 ulistfmt_openResult(UErrorCode* ec);
@@ -127,7 +209,7 @@
  * @param uresult The object containing the formatted string.
  * @param ec Set if an error occurs.
  * @return A UFormattedValue owned by the input object.
- * @draft ICU 64
+ * @stable ICU 64
  */
 U_CAPI const UFormattedValue* U_EXPORT2
 ulistfmt_resultAsValue(const UFormattedList* uresult, UErrorCode* ec);
@@ -136,11 +218,10 @@
  * Releases the UFormattedList created by ulistfmt_openResult().
  *
  * @param uresult The object to release.
- * @draft ICU 64
+ * @stable ICU 64
  */
 U_CAPI void U_EXPORT2
 ulistfmt_closeResult(UFormattedList* uresult);
-#endif /* U_HIDE_DRAFT_API */
 
 
 #if U_SHOW_CPLUSPLUS_API
@@ -158,7 +239,6 @@
  */
 U_DEFINE_LOCAL_OPEN_POINTER(LocalUListFormatterPointer, UListFormatter, ulistfmt_close);
 
-#ifndef U_HIDE_DRAFT_API
 /**
  * \class LocalUFormattedListPointer
  * "Smart pointer" class, closes a UFormattedList via ulistfmt_closeResult().
@@ -166,10 +246,9 @@
  *
  * @see LocalPointerBase
  * @see LocalPointer
- * @draft ICU 64
+ * @stable ICU 64
  */
 U_DEFINE_LOCAL_OPEN_POINTER(LocalUFormattedListPointer, UFormattedList, ulistfmt_closeResult);
-#endif /* U_HIDE_DRAFT_API */
 
 U_NAMESPACE_END
 
@@ -218,7 +297,6 @@
                 int32_t            resultCapacity,
                 UErrorCode*        status);
 
-#ifndef U_HIDE_DRAFT_API
 /**
  * Formats a list of strings to a UFormattedList, which exposes more
  * information than the string exported by ulistfmt_format().
@@ -243,7 +321,7 @@
  *            operation. See ulistfmt_openResult().
  * @param status
  *            Error code set if an error occurred during formatting.
- * @draft ICU 64
+ * @stable ICU 64
  */
 U_CAPI void U_EXPORT2
 ulistfmt_formatStringsToResult(
@@ -253,7 +331,6 @@
                 int32_t            stringCount,
                 UFormattedList*    uresult,
                 UErrorCode*        status);
-#endif /* U_HIDE_DRAFT_API */
 
 #endif /* #if !UCONFIG_NO_FORMATTING */
 
diff --git a/libandroidicu/include/unicode/uloc.h b/libandroidicu/include/unicode/uloc.h
index c45edad..d877ce4 100644
--- a/libandroidicu/include/unicode/uloc.h
+++ b/libandroidicu/include/unicode/uloc.h
@@ -1034,29 +1034,45 @@
                         UErrorCode *status);
 
 /**
- * enums for the 'outResult' parameter return value
+ * Output values which uloc_acceptLanguage() writes to the 'outResult' parameter.
+ *
  * @see uloc_acceptLanguageFromHTTP
  * @see uloc_acceptLanguage
  * @stable ICU 3.2
  */
 typedef enum {
-  ULOC_ACCEPT_FAILED   = 0,  /* No exact match was found. */
-  ULOC_ACCEPT_VALID    = 1,  /* An exact match was found. */
-  ULOC_ACCEPT_FALLBACK = 2   /* A fallback was found, for example, 
-                                Accept list contained 'ja_JP'
-                                which matched available locale 'ja'. */
+    /**
+     * No exact match was found.
+     * @stable ICU 3.2
+     */
+    ULOC_ACCEPT_FAILED   = 0,
+    /**
+     * An exact match was found.
+     * @stable ICU 3.2
+     */
+    ULOC_ACCEPT_VALID    = 1,
+    /**
+     * A fallback was found. For example, the Accept-Language list includes 'ja_JP'
+     * and is matched with available locale 'ja'.
+     * @stable ICU 3.2
+     */
+    ULOC_ACCEPT_FALLBACK = 2   /*  */
 } UAcceptResult;
 
-
 /**
  * Based on a HTTP header from a web browser and a list of available locales,
  * determine an acceptable locale for the user.
+ *
+ * This is a thin wrapper over C++ class LocaleMatcher.
+ *
  * @param result - buffer to accept the result locale
  * @param resultAvailable the size of the result buffer.
  * @param outResult - An out parameter that contains the fallback status
  * @param httpAcceptLanguage - "Accept-Language:" header as per HTTP.
  * @param availableLocales - list of available locales to match
- * @param status Error status, may be BUFFER_OVERFLOW_ERROR
+ * @param status ICU error code. Its input value must pass the U_SUCCESS() test,
+ *               or else the function returns immediately. Check for U_FAILURE()
+ *               on output or use with function chaining. (See User Guide for details.)
  * @return length needed for the locale.
  * @stable ICU 3.2
  */
@@ -1070,13 +1086,18 @@
 /**
  * Based on a list of available locales,
  * determine an acceptable locale for the user.
+ *
+ * This is a thin wrapper over C++ class LocaleMatcher.
+ *
  * @param result - buffer to accept the result locale
  * @param resultAvailable the size of the result buffer.
  * @param outResult - An out parameter that contains the fallback status
  * @param acceptList - list of acceptable languages
  * @param acceptListCount - count of acceptList items
  * @param availableLocales - list of available locales to match
- * @param status Error status, may be BUFFER_OVERFLOW_ERROR
+ * @param status ICU error code. Its input value must pass the U_SUCCESS() test,
+ *               or else the function returns immediately. Check for U_FAILURE()
+ *               on output or use with function chaining. (See User Guide for details.)
  * @return length needed for the locale.
  * @stable ICU 3.2
  */
diff --git a/libandroidicu/include/unicode/umachine.h b/libandroidicu/include/unicode/umachine.h
index c52984c..1d85855 100644
--- a/libandroidicu/include/unicode/umachine.h
+++ b/libandroidicu/include/unicode/umachine.h
@@ -372,7 +372,7 @@
     typedef char16_t UChar;
 #elif defined(UCHAR_TYPE)
     typedef UCHAR_TYPE UChar;
-#elif defined(__cplusplus)
+#elif (U_CPLUSPLUS_VERSION >= 11)
     typedef char16_t UChar;
 #else
     typedef uint16_t UChar;
diff --git a/libandroidicu/include/unicode/umutablecptrie.h b/libandroidicu/include/unicode/umutablecptrie.h
index f123644..5325d58 100644
--- a/libandroidicu/include/unicode/umutablecptrie.h
+++ b/libandroidicu/include/unicode/umutablecptrie.h
@@ -86,25 +86,6 @@
 U_CAPI void U_EXPORT2
 umutablecptrie_close(UMutableCPTrie *trie);
 
-#if U_SHOW_CPLUSPLUS_API
-
-U_NAMESPACE_BEGIN
-
-/**
- * \class LocalUMutableCPTriePointer
- * "Smart pointer" class, closes a UMutableCPTrie via umutablecptrie_close().
- * For most methods see the LocalPointerBase base class.
- *
- * @see LocalPointerBase
- * @see LocalPointer
- * @stable ICU 63
- */
-U_DEFINE_LOCAL_OPEN_POINTER(LocalUMutableCPTriePointer, UMutableCPTrie, umutablecptrie_close);
-
-U_NAMESPACE_END
-
-#endif
-
 /**
  * Creates a mutable trie with the same contents as the UCPMap.
  * You must umutablecptrie_close() the mutable trie once you are done using it.
@@ -238,4 +219,23 @@
 
 U_CDECL_END
 
+#if U_SHOW_CPLUSPLUS_API
+
+U_NAMESPACE_BEGIN
+
+/**
+ * \class LocalUMutableCPTriePointer
+ * "Smart pointer" class, closes a UMutableCPTrie via umutablecptrie_close().
+ * For most methods see the LocalPointerBase base class.
+ *
+ * @see LocalPointerBase
+ * @see LocalPointer
+ * @stable ICU 63
+ */
+U_DEFINE_LOCAL_OPEN_POINTER(LocalUMutableCPTriePointer, UMutableCPTrie, umutablecptrie_close);
+
+U_NAMESPACE_END
+
+#endif
+
 #endif
diff --git a/libandroidicu/include/unicode/unum.h b/libandroidicu/include/unicode/unum.h
index 5cece02..b03e846 100644
--- a/libandroidicu/include/unicode/unum.h
+++ b/libandroidicu/include/unicode/unum.h
@@ -380,12 +380,10 @@
     UNUM_PERMILL_FIELD,
     /** @stable ICU 49 */
     UNUM_SIGN_FIELD,
-#ifndef U_HIDE_DRAFT_API
-    /** @draft ICU 64 */
+    /** @stable ICU 64 */
     UNUM_MEASURE_UNIT_FIELD,
-    /** @draft ICU 64 */
+    /** @stable ICU 64 */
     UNUM_COMPACT_FIELD,
-#endif  /* U_HIDE_DRAFT_API */
 
 #ifndef U_HIDE_DEPRECATED_API
     /**
@@ -1035,17 +1033,15 @@
    * @stable ICU 51 */
   UNUM_SCALE = 21,
 
-#ifndef U_HIDE_DRAFT_API
   /**
    * Minimum grouping digits; most commonly set to 2 to print "1000" instead of "1,000".
    * See DecimalFormat::getMinimumGroupingDigits().
    *
    * For better control over grouping strategies, use UNumberFormatter.
    *
-   * @draft ICU 64
+   * @stable ICU 64
    */
   UNUM_MINIMUM_GROUPING_DIGITS = 22,
-#endif /* U_HIDE_DRAFT_API */
 
   /** 
    * if this attribute is set to 0, it is set to UNUM_CURRENCY_STANDARD purpose,
@@ -1086,12 +1082,10 @@
    */
   UNUM_PARSE_DECIMAL_MARK_REQUIRED = 0x1002,
 
-#ifndef U_HIDE_DRAFT_API
-
   /**
    * Parsing: if set to 1, parsing is sensitive to case (lowercase/uppercase).
    *
-   * @draft ICU 64
+   * @stable ICU 64
    */
   UNUM_PARSE_CASE_SENSITIVE = 0x1003,
 
@@ -1100,12 +1094,10 @@
    *
    * For better control over sign display, use UNumberFormatter.
    *
-   * @draft ICU 64
+   * @stable ICU 64
    */
   UNUM_SIGN_ALWAYS_SHOWN = 0x1004,
 
-#endif /* U_HIDE_DRAFT_API */
-
 #ifndef U_HIDE_INTERNAL_API
   /** Limit of boolean attributes. (value should
    * not depend on U_HIDE conditionals)
diff --git a/libandroidicu/include/unicode/unumberformatter.h b/libandroidicu/include/unicode/unumberformatter.h
index b27507f..af98ba0 100644
--- a/libandroidicu/include/unicode/unumberformatter.h
+++ b/libandroidicu/include/unicode/unumberformatter.h
@@ -336,7 +336,7 @@
 
     /**
      * Show the minus sign on negative numbers and the plus sign on positive numbers. Do not show a
-     * sign on zero or NaN, unless the sign bit is set (-0.0 gets a sign).
+     * sign on zero, numbers that round to zero, or NaN.
      *
      * @stable ICU 61
      */
@@ -344,9 +344,8 @@
 
     /**
      * Use the locale-dependent accounting format on negative numbers, and show the plus sign on
-     * positive numbers. Do not show a sign on zero or NaN, unless the sign bit is set (-0.0 gets a
-     * sign). For more information on the accounting format, see the ACCOUNTING sign display
-     * strategy.
+     * positive numbers. Do not show a sign on zero, numbers that round to zero, or NaN. For more
+     * information on the accounting format, see the ACCOUNTING sign display strategy.
      *
      * @stable ICU 61
      */
@@ -428,7 +427,7 @@
  * NOTE: This is a C-compatible API; C++ users should build against numberformatter.h instead.
  *
  * @param skeleton The skeleton string, like u"percent precision-integer"
- * @param skeletonLen The number of UChars in the skeleton string, or -1 it it is NUL-terminated.
+ * @param skeletonLen The number of UChars in the skeleton string, or -1 if it is NUL-terminated.
  * @param locale The NUL-terminated locale ID.
  * @param ec Set if an error occurs.
  * @stable ICU 62
@@ -438,23 +437,21 @@
                                UErrorCode* ec);
 
 
-#ifndef U_HIDE_DRAFT_API
 /**
  * Like unumf_openForSkeletonAndLocale, but accepts a UParseError, which will be populated with the
  * location of a skeleton syntax error if such a syntax error exists.
  *
  * @param skeleton The skeleton string, like u"percent precision-integer"
- * @param skeletonLen The number of UChars in the skeleton string, or -1 it it is NUL-terminated.
+ * @param skeletonLen The number of UChars in the skeleton string, or -1 if it is NUL-terminated.
  * @param locale The NUL-terminated locale ID.
  * @param perror A parse error struct populated if an error occurs when parsing. Can be NULL.
  *               If no error occurs, perror->offset will be set to -1.
  * @param ec Set if an error occurs.
- * @draft ICU 64
+ * @stable ICU 64
  */
-U_DRAFT UNumberFormatter* U_EXPORT2
+U_STABLE UNumberFormatter* U_EXPORT2
 unumf_openForSkeletonAndLocaleWithError(
        const UChar* skeleton, int32_t skeletonLen, const char* locale, UParseError* perror, UErrorCode* ec);
-#endif  // U_HIDE_DRAFT_API
 
 
 /**
@@ -532,7 +529,6 @@
 unumf_formatDecimal(const UNumberFormatter* uformatter, const char* value, int32_t valueLen,
                     UFormattedNumber* uresult, UErrorCode* ec);
 
-#ifndef U_HIDE_DRAFT_API
 /**
  * Returns a representation of a UFormattedNumber as a UFormattedValue,
  * which can be subsequently passed to any API requiring that type.
@@ -545,11 +541,10 @@
  * @param uresult The object containing the formatted string.
  * @param ec Set if an error occurs.
  * @return A UFormattedValue owned by the input object.
- * @draft ICU 64
+ * @stable ICU 64
  */
-U_DRAFT const UFormattedValue* U_EXPORT2
+U_STABLE const UFormattedValue* U_EXPORT2
 unumf_resultAsValue(const UFormattedNumber* uresult, UErrorCode* ec);
-#endif  /* U_HIDE_DRAFT_API */
 
 
 /**
diff --git a/libandroidicu/include/unicode/upluralrules.h b/libandroidicu/include/unicode/upluralrules.h
index 48b7eb8..ec8cc81 100644
--- a/libandroidicu/include/unicode/upluralrules.h
+++ b/libandroidicu/include/unicode/upluralrules.h
@@ -156,7 +156,6 @@
                UChar *keyword, int32_t capacity,
                UErrorCode *status);
 
-#ifndef U_HIDE_DRAFT_API
 /**
  * Given a formatted number, returns the keyword of the first rule
  * that applies to the number, according to the supplied UPluralRules object.
@@ -172,14 +171,13 @@
  * @param capacity The capacity of the keyword buffer.
  * @param status A pointer to a UErrorCode to receive any errors.
  * @return The length of the keyword.
- * @draft ICU 64
+ * @stable ICU 64
  */
 U_CAPI int32_t U_EXPORT2
 uplrules_selectFormatted(const UPluralRules *uplrules,
                const struct UFormattedNumber* number,
                UChar *keyword, int32_t capacity,
                UErrorCode *status);
-#endif  /* U_HIDE_DRAFT_API */
 
 #ifndef U_HIDE_INTERNAL_API
 /**
diff --git a/libandroidicu/include/unicode/ureldatefmt.h b/libandroidicu/include/unicode/ureldatefmt.h
index 775b4ca..3afc24b 100644
--- a/libandroidicu/include/unicode/ureldatefmt.h
+++ b/libandroidicu/include/unicode/ureldatefmt.h
@@ -178,25 +178,23 @@
 #endif  /* U_HIDE_DEPRECATED_API */
 } URelativeDateTimeUnit;
 
-#ifndef U_HIDE_DRAFT_API
 /**
  * FieldPosition and UFieldPosition selectors for format fields
  * defined by RelativeDateTimeFormatter.
- * @draft ICU 64
+ * @stable ICU 64
  */
 typedef enum URelativeDateTimeFormatterField {
     /**
      * Represents a literal text string, like "tomorrow" or "days ago".
-     * @draft ICU 64
+     * @stable ICU 64
      */
     UDAT_REL_LITERAL_FIELD,
     /**
      * Represents a number quantity, like "3" in "3 days ago".
-     * @draft ICU 64
+     * @stable ICU 64
      */
     UDAT_REL_NUMERIC_FIELD,
 } URelativeDateTimeFormatterField;
-#endif // U_HIDE_DRAFT_API
 
 
 /**
@@ -255,11 +253,10 @@
 U_STABLE void U_EXPORT2
 ureldatefmt_close(URelativeDateTimeFormatter *reldatefmt);
 
-#ifndef U_HIDE_DRAFT_API
 struct UFormattedRelativeDateTime;
 /**
  * Opaque struct to contain the results of a URelativeDateTimeFormatter operation.
- * @draft ICU 64
+ * @stable ICU 64
  */
 typedef struct UFormattedRelativeDateTime UFormattedRelativeDateTime;
 
@@ -270,9 +267,9 @@
  *
  * @param ec Set if an error occurs.
  * @return A pointer needing ownership.
- * @draft ICU 64
+ * @stable ICU 64
  */
-U_DRAFT UFormattedRelativeDateTime* U_EXPORT2
+U_STABLE UFormattedRelativeDateTime* U_EXPORT2
 ureldatefmt_openResult(UErrorCode* ec);
 
 /**
@@ -287,20 +284,19 @@
  * @param ufrdt The object containing the formatted string.
  * @param ec Set if an error occurs.
  * @return A UFormattedValue owned by the input object.
- * @draft ICU 64
+ * @stable ICU 64
  */
-U_DRAFT const UFormattedValue* U_EXPORT2
+U_STABLE const UFormattedValue* U_EXPORT2
 ureldatefmt_resultAsValue(const UFormattedRelativeDateTime* ufrdt, UErrorCode* ec);
 
 /**
  * Releases the UFormattedRelativeDateTime created by ureldatefmt_openResult.
  *
  * @param ufrdt The object to release.
- * @draft ICU 64
+ * @stable ICU 64
  */
-U_DRAFT void U_EXPORT2
+U_STABLE void U_EXPORT2
 ureldatefmt_closeResult(UFormattedRelativeDateTime* ufrdt);
-#endif  /* U_HIDE_DRAFT_API */
 
 
 #if U_SHOW_CPLUSPLUS_API
@@ -318,7 +314,6 @@
  */
 U_DEFINE_LOCAL_OPEN_POINTER(LocalURelativeDateTimeFormatterPointer, URelativeDateTimeFormatter, ureldatefmt_close);
 
-#ifndef U_HIDE_DRAFT_API
 /**
  * \class LocalUFormattedRelativeDateTimePointer
  * "Smart pointer" class, closes a UFormattedRelativeDateTime via ureldatefmt_closeResult().
@@ -326,10 +321,9 @@
  *
  * @see LocalPointerBase
  * @see LocalPointer
- * @draft ICU 64
+ * @stable ICU 64
  */
 U_DEFINE_LOCAL_OPEN_POINTER(LocalUFormattedRelativeDateTimePointer, UFormattedRelativeDateTime, ureldatefmt_closeResult);
-#endif  /* U_HIDE_DRAFT_API */
 
 U_NAMESPACE_END
 
@@ -371,7 +365,6 @@
                     int32_t               resultCapacity,
                     UErrorCode*           status);
 
-#ifndef U_HIDE_DRAFT_API
 /**
  * Format a combination of URelativeDateTimeUnit and numeric
  * offset using a numeric style, e.g. "1 week ago", "in 1 week",
@@ -393,16 +386,15 @@
  *          A pointer to a UErrorCode to receive any errors. In
  *          case of error status, the contents of result are
  *          undefined.
- * @draft ICU 64
+ * @stable ICU 64
  */
-U_DRAFT void U_EXPORT2
+U_STABLE void U_EXPORT2
 ureldatefmt_formatNumericToResult(
     const URelativeDateTimeFormatter* reldatefmt,
     double                            offset,
     URelativeDateTimeUnit             unit,
     UFormattedRelativeDateTime*       result,
     UErrorCode*                       status);
-#endif  /* U_HIDE_DRAFT_API */
 
 /**
  * Format a combination of URelativeDateTimeUnit and numeric offset
@@ -440,7 +432,6 @@
                     int32_t               resultCapacity,
                     UErrorCode*           status);
 
-#ifndef U_HIDE_DRAFT_API
 /**
  * Format a combination of URelativeDateTimeUnit and numeric offset
  * using a text style if possible, e.g. "last week", "this week",
@@ -465,16 +456,15 @@
  *          A pointer to a UErrorCode to receive any errors. In
  *          case of error status, the contents of result are
  *          undefined.
- * @draft ICU 64
+ * @stable ICU 64
  */
-U_DRAFT void U_EXPORT2
+U_STABLE void U_EXPORT2
 ureldatefmt_formatToResult(
     const URelativeDateTimeFormatter* reldatefmt,
     double                            offset,
     URelativeDateTimeUnit             unit,
     UFormattedRelativeDateTime*       result,
     UErrorCode*                       status);
-#endif  /* U_HIDE_DRAFT_API */
 
 /**
  * Combines a relative date string and a time string in this object's
diff --git a/libandroidicu/include/unicode/urename.h b/libandroidicu/include/unicode/urename.h
index 5b793bb..30f4b7a 100644
--- a/libandroidicu/include/unicode/urename.h
+++ b/libandroidicu/include/unicode/urename.h
@@ -135,6 +135,7 @@
 #define locale_get_default U_ICU_ENTRY_POINT_RENAME(locale_get_default)
 #define locale_set_default U_ICU_ENTRY_POINT_RENAME(locale_set_default)
 #define numSysCleanup U_ICU_ENTRY_POINT_RENAME(numSysCleanup)
+#define rbbi_cleanup U_ICU_ENTRY_POINT_RENAME(rbbi_cleanup)
 #define pl_addFontRun U_ICU_ENTRY_POINT_RENAME(pl_addFontRun)
 #define pl_addLocaleRun U_ICU_ENTRY_POINT_RENAME(pl_addLocaleRun)
 #define pl_addValueRun U_ICU_ENTRY_POINT_RENAME(pl_addValueRun)
@@ -203,6 +204,7 @@
 #define res_read U_ICU_ENTRY_POINT_RENAME(res_read)
 #define res_unload U_ICU_ENTRY_POINT_RENAME(res_unload)
 #define u_UCharsToChars U_ICU_ENTRY_POINT_RENAME(u_UCharsToChars)
+#define u_asciiToUpper U_ICU_ENTRY_POINT_RENAME(u_asciiToUpper)
 #define u_austrcpy U_ICU_ENTRY_POINT_RENAME(u_austrcpy)
 #define u_austrncpy U_ICU_ENTRY_POINT_RENAME(u_austrncpy)
 #define u_caseInsensitivePrefixMatch U_ICU_ENTRY_POINT_RENAME(u_caseInsensitivePrefixMatch)
@@ -896,6 +898,7 @@
 #define udatpg_getBestPatternWithOptions U_ICU_ENTRY_POINT_RENAME(udatpg_getBestPatternWithOptions)
 #define udatpg_getDateTimeFormat U_ICU_ENTRY_POINT_RENAME(udatpg_getDateTimeFormat)
 #define udatpg_getDecimal U_ICU_ENTRY_POINT_RENAME(udatpg_getDecimal)
+#define udatpg_getDefaultHourCycle U_ICU_ENTRY_POINT_RENAME(udatpg_getDefaultHourCycle)
 #define udatpg_getFieldDisplayName U_ICU_ENTRY_POINT_RENAME(udatpg_getFieldDisplayName)
 #define udatpg_getPatternForSkeleton U_ICU_ENTRY_POINT_RENAME(udatpg_getPatternForSkeleton)
 #define udatpg_getSkeleton U_ICU_ENTRY_POINT_RENAME(udatpg_getSkeleton)
@@ -913,6 +916,7 @@
 #define udtitvfmt_close U_ICU_ENTRY_POINT_RENAME(udtitvfmt_close)
 #define udtitvfmt_closeResult U_ICU_ENTRY_POINT_RENAME(udtitvfmt_closeResult)
 #define udtitvfmt_format U_ICU_ENTRY_POINT_RENAME(udtitvfmt_format)
+#define udtitvfmt_formatCalendarToResult U_ICU_ENTRY_POINT_RENAME(udtitvfmt_formatCalendarToResult)
 #define udtitvfmt_formatToResult U_ICU_ENTRY_POINT_RENAME(udtitvfmt_formatToResult)
 #define udtitvfmt_open U_ICU_ENTRY_POINT_RENAME(udtitvfmt_open)
 #define udtitvfmt_openResult U_ICU_ENTRY_POINT_RENAME(udtitvfmt_openResult)
@@ -1053,6 +1057,7 @@
 #define ulistfmt_format U_ICU_ENTRY_POINT_RENAME(ulistfmt_format)
 #define ulistfmt_formatStringsToResult U_ICU_ENTRY_POINT_RENAME(ulistfmt_formatStringsToResult)
 #define ulistfmt_open U_ICU_ENTRY_POINT_RENAME(ulistfmt_open)
+#define ulistfmt_openForType U_ICU_ENTRY_POINT_RENAME(ulistfmt_openForType)
 #define ulistfmt_openResult U_ICU_ENTRY_POINT_RENAME(ulistfmt_openResult)
 #define ulistfmt_resultAsValue U_ICU_ENTRY_POINT_RENAME(ulistfmt_resultAsValue)
 #define uloc_acceptLanguage U_ICU_ENTRY_POINT_RENAME(uloc_acceptLanguage)
@@ -1114,9 +1119,12 @@
 #define ulocdata_open U_ICU_ENTRY_POINT_RENAME(ulocdata_open)
 #define ulocdata_setNoSubstitute U_ICU_ENTRY_POINT_RENAME(ulocdata_setNoSubstitute)
 #define ulocimp_addLikelySubtags U_ICU_ENTRY_POINT_RENAME(ulocimp_addLikelySubtags)
+#define ulocimp_canonicalize U_ICU_ENTRY_POINT_RENAME(ulocimp_canonicalize)
 #define ulocimp_forLanguageTag U_ICU_ENTRY_POINT_RENAME(ulocimp_forLanguageTag)
+#define ulocimp_getBaseName U_ICU_ENTRY_POINT_RENAME(ulocimp_getBaseName)
 #define ulocimp_getCountry U_ICU_ENTRY_POINT_RENAME(ulocimp_getCountry)
 #define ulocimp_getLanguage U_ICU_ENTRY_POINT_RENAME(ulocimp_getLanguage)
+#define ulocimp_getName U_ICU_ENTRY_POINT_RENAME(ulocimp_getName)
 #define ulocimp_getRegionForSupplementalData U_ICU_ENTRY_POINT_RENAME(ulocimp_getRegionForSupplementalData)
 #define ulocimp_getScript U_ICU_ENTRY_POINT_RENAME(ulocimp_getScript)
 #define ulocimp_minimizeSubtags U_ICU_ENTRY_POINT_RENAME(ulocimp_minimizeSubtags)
@@ -1295,7 +1303,6 @@
 #define uprv_convertToPosix U_ICU_ENTRY_POINT_RENAME(uprv_convertToPosix)
 #define uprv_copyAscii U_ICU_ENTRY_POINT_RENAME(uprv_copyAscii)
 #define uprv_copyEbcdic U_ICU_ENTRY_POINT_RENAME(uprv_copyEbcdic)
-#define uprv_currencyLeads U_ICU_ENTRY_POINT_RENAME(uprv_currencyLeads)
 #define uprv_decContextClearStatus U_ICU_ENTRY_POINT_RENAME(uprv_decContextClearStatus)
 #define uprv_decContextDefault U_ICU_ENTRY_POINT_RENAME(uprv_decContextDefault)
 #define uprv_decContextGetRounding U_ICU_ENTRY_POINT_RENAME(uprv_decContextGetRounding)
diff --git a/libandroidicu/include/unicode/utext.h b/libandroidicu/include/unicode/utext.h
index 196056b..37d71a3 100644
--- a/libandroidicu/include/unicode/utext.h
+++ b/libandroidicu/include/unicode/utext.h
@@ -183,25 +183,6 @@
 U_STABLE UText * U_EXPORT2
 utext_close(UText *ut);
 
-#if U_SHOW_CPLUSPLUS_API
-
-U_NAMESPACE_BEGIN
-
-/**
- * \class LocalUTextPointer
- * "Smart pointer" class, closes a UText via utext_close().
- * For most methods see the LocalPointerBase base class.
- *
- * @see LocalPointerBase
- * @see LocalPointer
- * @stable ICU 4.4
- */
-U_DEFINE_LOCAL_OPEN_POINTER(LocalUTextPointer, UText, utext_close);
-
-U_NAMESPACE_END
-
-#endif
-
 /**
  * Open a read-only UText implementation for UTF-8 strings.
  * 
@@ -1599,5 +1580,24 @@
 U_CDECL_END
 
 
+#if U_SHOW_CPLUSPLUS_API
+
+U_NAMESPACE_BEGIN
+
+/**
+ * \class LocalUTextPointer
+ * "Smart pointer" class, closes a UText via utext_close().
+ * For most methods see the LocalPointerBase base class.
+ *
+ * @see LocalPointerBase
+ * @see LocalPointer
+ * @stable ICU 4.4
+ */
+U_DEFINE_LOCAL_OPEN_POINTER(LocalUTextPointer, UText, utext_close);
+
+U_NAMESPACE_END
+
+#endif
+
 
 #endif
diff --git a/libandroidicu/include/unicode/utrace.h b/libandroidicu/include/unicode/utrace.h
index 5afcd9f..5b4a049 100644
--- a/libandroidicu/include/unicode/utrace.h
+++ b/libandroidicu/include/unicode/utrace.h
@@ -177,6 +177,71 @@
     UTRACE_RES_DATA_LIMIT,
 #endif  // U_HIDE_INTERNAL_API
 
+#ifndef U_HIDE_DRAFT_API
+    /**
+     * The lowest break iterator location.
+     * @draft ICU 67
+     */
+    UTRACE_UBRK_START=0x4000,
+
+    /**
+     * Indicates that a character instance of break iterator was created.
+     *
+     * @draft ICU 67
+     */
+    UTRACE_UBRK_CREATE_CHARACTER = UTRACE_UBRK_START,
+
+    /**
+     * Indicates that a word instance of break iterator was created.
+     *
+     * @draft ICU 67
+     */
+    UTRACE_UBRK_CREATE_WORD,
+
+    /**
+     * Indicates that a line instance of break iterator was created.
+     *
+     * Provides one C-style string to UTraceData: the lb value ("",
+     * "loose", "strict", or "normal").
+     *
+     * @draft ICU 67
+     */
+    UTRACE_UBRK_CREATE_LINE,
+
+    /**
+     * Indicates that a sentence instance of break iterator was created.
+     *
+     * @draft ICU 67
+     */
+    UTRACE_UBRK_CREATE_SENTENCE,
+
+    /**
+     * Indicates that a title instance of break iterator was created.
+     *
+     * @draft ICU 67
+     */
+    UTRACE_UBRK_CREATE_TITLE,
+
+    /**
+     * Indicates that an internal dictionary break engine was created.
+     *
+     * Provides one C-style string to UTraceData: the script code of what
+     * the break engine cover ("Hani", "Khmr", "Laoo", "Mymr", or "Thai").
+     *
+     * @draft ICU 67
+     */
+    UTRACE_UBRK_CREATE_BREAK_ENGINE,
+
+#endif  // U_HIDE_DRAFT_API
+
+#ifndef U_HIDE_INTERNAL_API
+    /**
+     * One more than the highest normal break iterator trace location.
+     * @internal The numeric value may change over time, see ICU ticket #12420.
+     */
+    UTRACE_UBRK_LIMIT,
+#endif  // U_HIDE_INTERNAL_API
+
 } UTraceFunctionNumber;
 
 /**
diff --git a/libandroidicu/include/unicode/uvernum.h b/libandroidicu/include/unicode/uvernum.h
index f5d6497..c66776d 100644
--- a/libandroidicu/include/unicode/uvernum.h
+++ b/libandroidicu/include/unicode/uvernum.h
@@ -60,7 +60,7 @@
  *  This value will change in the subsequent releases of ICU
  *  @stable ICU 2.4
  */
-#define U_ICU_VERSION_MAJOR_NUM 66
+#define U_ICU_VERSION_MAJOR_NUM 67
 
 /** The current ICU minor version as an integer.
  *  This value will change in the subsequent releases of ICU
@@ -86,7 +86,7 @@
  *  This value will change in the subsequent releases of ICU
  *  @stable ICU 2.6
  */
-#define U_ICU_VERSION_SUFFIX _66
+#define U_ICU_VERSION_SUFFIX _67
 
 /**
  * \def U_DEF2_ICU_ENTRY_POINT_RENAME
@@ -139,7 +139,7 @@
  *  This value will change in the subsequent releases of ICU
  *  @stable ICU 2.4
  */
-#define U_ICU_VERSION "66.1"
+#define U_ICU_VERSION "67.1"
 
 /**
  * The current ICU library major version number as a string, for library name suffixes.
@@ -152,13 +152,13 @@
  *
  * @stable ICU 2.6
  */
-#define U_ICU_VERSION_SHORT "66"
+#define U_ICU_VERSION_SHORT "67"
 
 #ifndef U_HIDE_INTERNAL_API
 /** Data version in ICU4C.
  * @internal ICU 4.4 Internal Use Only
  **/
-#define U_ICU_DATA_VERSION "66.1"
+#define U_ICU_DATA_VERSION "67.1"
 #endif  /* U_HIDE_INTERNAL_API */
 
 /*===========================================================================
diff --git a/libandroidicu/static_shim/shim.cpp b/libandroidicu/static_shim/shim.cpp
index 52a8aa8..3c5558a 100644
--- a/libandroidicu/static_shim/shim.cpp
+++ b/libandroidicu/static_shim/shim.cpp
@@ -30,6 +30,7 @@
 #include <unicode/uenum.h>
 #include <unicode/ufieldpositer.h>
 #include <unicode/uformattable.h>
+#include <unicode/uformattedvalue.h>
 #include <unicode/ugender.h>
 #include <unicode/uidna.h>
 #include <unicode/uiter.h>