--- a/compiler/rustc_target/src/spec/base/android.rs
+++ b/compiler/rustc_target/src/spec/base/android.rs
@@ -6,7 +6,7 @@
     base.is_like_android = true;
     base.default_dwarf_version = 2;
     base.tls_model = TlsModel::Emulated;
-    base.has_thread_local = false;
+    base.has_thread_local = true;
     base.supported_sanitizers = SanitizerSet::ADDRESS;
     // This is for backward compatibility, see https://github.com/rust-lang/rust/issues/49867
     // for context. (At that time, there was no `-C force-unwind-tables`, so the only solution
--- a/src/bootstrap/src/core/builder/cargo.rs
+++ b/src/bootstrap/src/core/builder/cargo.rs
@@ -1058,10 +1058,11 @@
         // so we can't use it by default in general, but we can use it for tools
         // and our own internal libraries.
         //
-        // Cygwin only supports emutls.
+        // Cygwin and Android only supports emutls.
         if !mode.must_support_dlopen()
             && !target.triple.starts_with("powerpc-")
             && !target.triple.contains("cygwin")
+            && !target.triple.contains("android")
         {
             cargo.env("RUSTC_TLS_MODEL_INITIAL_EXEC", "1");
         }
