gh-145616: Detect Android sysconfig ABI correctly on 32-bit ARM Android on 64-bit ARM kernel (GH-145617)
When Python is running on 32-bit ARM Android on a 64-bit ARM kernel, `os.uname().machine` is `armv8l`. Such devices run the same userspace code as `armv7l` devices, so apply the same `armeabi_v7a` Android ABI to them, which works.
diff --git a/Lib/sysconfig/__init__.py b/Lib/sysconfig/__init__.py
index 6507a7b..1418293 100644
--- a/Lib/sysconfig/__init__.py
+++ b/Lib/sysconfig/__init__.py
@@ -694,11 +694,15 @@ def get_platform():
release = get_config_var("ANDROID_API_LEVEL")
# Wheel tags use the ABI names from Android's own tools.
+ # When Python is running on 32-bit ARM Android on a 64-bit ARM kernel,
+ # 'os.uname().machine' is 'armv8l'. Such devices run the same userspace
+ # code as 'armv7l' devices.
machine = {
"x86_64": "x86_64",
"i686": "x86",
"aarch64": "arm64_v8a",
"armv7l": "armeabi_v7a",
+ "armv8l": "armeabi_v7a",
}[machine]
elif osname == "linux":
# At least on Linux/Intel, 'machine' is the processor --
diff --git a/Lib/test/test_sysconfig.py b/Lib/test/test_sysconfig.py
index e43f91e..6cd568e 100644
--- a/Lib/test/test_sysconfig.py
+++ b/Lib/test/test_sysconfig.py
@@ -375,6 +375,7 @@ def test_get_platform(self):
'i686': 'x86',
'aarch64': 'arm64_v8a',
'armv7l': 'armeabi_v7a',
+ 'armv8l': 'armeabi_v7a',
}.items():
with self.subTest(machine):
self._set_uname(('Linux', 'localhost', '3.18.91+',
@@ -583,6 +584,7 @@ def test_android_ext_suffix(self):
"i686": "i686-linux-android",
"aarch64": "aarch64-linux-android",
"armv7l": "arm-linux-androideabi",
+ "armv8l": "arm-linux-androideabi",
}[machine]
self.assertEndsWith(suffix, f"-{expected_triplet}.so")
diff --git a/Misc/NEWS.d/next/Library/2026-03-07-02-44-52.gh-issue-145616.x8Mf23.rst b/Misc/NEWS.d/next/Library/2026-03-07-02-44-52.gh-issue-145616.x8Mf23.rst
new file mode 100644
index 0000000..131570a
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2026-03-07-02-44-52.gh-issue-145616.x8Mf23.rst
@@ -0,0 +1 @@
+Detect Android sysconfig ABI correctly on 32-bit ARM Android on 64-bit ARM kernel