diff --git a/core/fxge/BUILD.gn b/core/fxge/BUILD.gn
index 23437a1..18b15b7 100644
--- a/core/fxge/BUILD.gn
+++ b/core/fxge/BUILD.gn
@@ -161,9 +161,6 @@
       "android/cfx_androidfontinfo.h",
       "android/fx_android_impl.cpp",
     ]
-
-    # TODO(tsepez): Enable on Android.
-    configs -= [ "../../:pdfium_noshorten_config" ]
   }
 
   if (is_linux || is_chromeos || is_fuchsia) {
diff --git a/core/fxge/android/cfpf_skiafont.cpp b/core/fxge/android/cfpf_skiafont.cpp
index df1139e..fbfdbdd 100644
--- a/core/fxge/android/cfpf_skiafont.cpp
+++ b/core/fxge/android/cfpf_skiafont.cpp
@@ -57,8 +57,9 @@
                     FT_LOAD_NO_SCALE | FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH)) {
     return 0;
   }
-  return FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(GetFaceRec()),
-                       FXFT_Get_Glyph_HoriAdvance(GetFaceRec()));
+  return static_cast<int32_t>(
+      FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(GetFaceRec()),
+                    FXFT_Get_Glyph_HoriAdvance(GetFaceRec())));
 }
 
 int32_t CFPF_SkiaFont::GetAscent() const {
@@ -95,10 +96,10 @@
     FT_Glyph_Get_CBox(glyph, FT_GLYPH_BBOX_PIXELS, &cbox);
     int32_t x_ppem = GetFaceRec()->size->metrics.x_ppem;
     int32_t y_ppem = GetFaceRec()->size->metrics.y_ppem;
-    rtBBox.left = FPF_EM_ADJUST(x_ppem, cbox.xMin);
-    rtBBox.right = FPF_EM_ADJUST(x_ppem, cbox.xMax);
-    rtBBox.top = FPF_EM_ADJUST(y_ppem, cbox.yMax);
-    rtBBox.bottom = FPF_EM_ADJUST(y_ppem, cbox.yMin);
+    rtBBox.left = static_cast<int32_t>(FPF_EM_ADJUST(x_ppem, cbox.xMin));
+    rtBBox.right = static_cast<int32_t>(FPF_EM_ADJUST(x_ppem, cbox.xMax));
+    rtBBox.top = static_cast<int32_t>(FPF_EM_ADJUST(y_ppem, cbox.yMax));
+    rtBBox.bottom = static_cast<int32_t>(FPF_EM_ADJUST(y_ppem, cbox.yMin));
     rtBBox.top = std::min(rtBBox.top, GetAscent());
     rtBBox.bottom = std::max(rtBBox.bottom, GetDescent());
     FT_Done_Glyph(glyph);
@@ -108,16 +109,20 @@
                     FT_LOAD_NO_SCALE | FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH)) {
     return false;
   }
-  rtBBox.left = FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(GetFaceRec()),
-                              FXFT_Get_Glyph_HoriBearingX(GetFaceRec()));
-  rtBBox.bottom = FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(GetFaceRec()),
-                                FXFT_Get_Glyph_HoriBearingY(GetFaceRec()));
-  rtBBox.right = FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(GetFaceRec()),
-                               FXFT_Get_Glyph_HoriBearingX(GetFaceRec()) +
-                                   FXFT_Get_Glyph_Width(GetFaceRec()));
-  rtBBox.top = FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(GetFaceRec()),
-                             FXFT_Get_Glyph_HoriBearingY(GetFaceRec()) -
-                                 FXFT_Get_Glyph_Height(GetFaceRec()));
+  rtBBox.left = static_cast<int32_t>(
+      FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(GetFaceRec()),
+                    FXFT_Get_Glyph_HoriBearingX(GetFaceRec())));
+  rtBBox.bottom = static_cast<int32_t>(
+      FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(GetFaceRec()),
+                    FXFT_Get_Glyph_HoriBearingY(GetFaceRec())));
+  rtBBox.right = static_cast<int32_t>(
+      FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(GetFaceRec()),
+                    FXFT_Get_Glyph_HoriBearingX(GetFaceRec()) +
+                        FXFT_Get_Glyph_Width(GetFaceRec())));
+  rtBBox.top = static_cast<int32_t>(
+      FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(GetFaceRec()),
+                    FXFT_Get_Glyph_HoriBearingY(GetFaceRec()) -
+                        FXFT_Get_Glyph_Height(GetFaceRec())));
   return true;
 }
 
@@ -125,14 +130,18 @@
   if (!m_Face) {
     return false;
   }
-  rtBBox.left = FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(GetFaceRec()),
-                              FXFT_Get_Face_xMin(GetFaceRec()));
-  rtBBox.top = FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(GetFaceRec()),
-                             FXFT_Get_Face_yMin(GetFaceRec()));
-  rtBBox.right = FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(GetFaceRec()),
-                               FXFT_Get_Face_xMax(GetFaceRec()));
-  rtBBox.bottom = FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(GetFaceRec()),
-                                FXFT_Get_Face_yMax(GetFaceRec()));
+  rtBBox.left =
+      static_cast<int32_t>(FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(GetFaceRec()),
+                                         FXFT_Get_Face_xMin(GetFaceRec())));
+  rtBBox.top =
+      static_cast<int32_t>(FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(GetFaceRec()),
+                                         FXFT_Get_Face_yMin(GetFaceRec())));
+  rtBBox.right =
+      static_cast<int32_t>(FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(GetFaceRec()),
+                                         FXFT_Get_Face_xMax(GetFaceRec())));
+  rtBBox.bottom =
+      static_cast<int32_t>(FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(GetFaceRec()),
+                                         FXFT_Get_Face_yMax(GetFaceRec())));
   return true;
 }
 
@@ -149,7 +158,7 @@
 
   auto* info = static_cast<TT_Postscript*>(
       FT_Get_Sfnt_Table(GetFaceRec(), ft_sfnt_post));
-  return info ? info->italicAngle : 0;
+  return info ? static_cast<int32_t>(info->italicAngle) : 0;
 }
 
 uint32_t CFPF_SkiaFont::GetFontData(uint32_t dwTable,
diff --git a/core/fxge/android/cfpf_skiafontmgr.cpp b/core/fxge/android/cfpf_skiafontmgr.cpp
index 88b94e4..6cbb019 100644
--- a/core/fxge/android/cfpf_skiafontmgr.cpp
+++ b/core/fxge/android/cfpf_skiafontmgr.cpp
@@ -65,18 +65,6 @@
   return 0;
 }
 
-uint32_t FPF_GetHashCode_StringA(const char* pStr, int32_t iLength) {
-  if (!pStr)
-    return 0;
-  if (iLength < 0)
-    iLength = strlen(pStr);
-  const char* pStrEnd = pStr + iLength;
-  uint32_t uHashCode = 0;
-  while (pStr < pStrEnd)
-    uHashCode = 31 * uHashCode + tolower(*pStr++);
-  return uHashCode;
-}
-
 enum FPF_SKIACHARSET {
   FPF_SKIACHARSET_Ansi = 1 << 0,
   FPF_SKIACHARSET_Default = 1 << 1,
@@ -135,17 +123,21 @@
   return FPF_SKIACHARSET_Default;
 }
 
-uint32_t FPF_SKIANormalizeFontName(ByteStringView bsfamily) {
-  uint32_t dwHash = 0;
-  int32_t iLength = bsfamily.GetLength();
-  const char* pBuffer = bsfamily.unterminated_c_str();
-  for (int32_t i = 0; i < iLength; i++) {
-    char ch = pBuffer[i];
+uint32_t FPF_GetHashCode_StringA(ByteStringView bsStr) {
+  uint32_t uHashCode = 0;
+  for (char ch : bsStr)
+    uHashCode = 31 * uHashCode + tolower(ch);
+  return uHashCode;
+}
+
+uint32_t FPF_SKIANormalizeFontName(ByteStringView bsFamily) {
+  uint32_t uHashCode = 0;
+  for (char ch : bsFamily) {
     if (ch == ' ' || ch == '-' || ch == ',')
       continue;
-    dwHash = 31 * dwHash + tolower(ch);
+    uHashCode = 31 * uHashCode + tolower(ch);
   }
-  return dwHash;
+  return uHashCode;
 }
 
 uint32_t FPF_SKIAGetFamilyHash(ByteStringView bsFamily,
@@ -159,7 +151,7 @@
   if (FontStyleIsSerif(dwStyle))
     bsFont += "Serif";
   bsFont += static_cast<uint8_t>(uCharset);
-  return FPF_GetHashCode_StringA(bsFont.c_str(), bsFont.GetLength());
+  return FPF_GetHashCode_StringA(bsFont.AsStringView());
 }
 
 bool FPF_SkiaIsCJK(FX_Charset uCharset) {
