Re-enable Android tests in CIBW workflow (#6001)

* Re-enable Android tests in CIBW workflow

* Skip subprocess tests on Android

* Remove Android workarounds no longer necessary with current cibuildwheel version

* Skip more subprocess tests on Android
diff --git a/.github/workflows/tests-cibw.yml b/.github/workflows/tests-cibw.yml
index 5dfb5dc..bf53431 100644
--- a/.github/workflows/tests-cibw.yml
+++ b/.github/workflows/tests-cibw.yml
@@ -70,24 +70,6 @@
       if: contains(matrix.runs-on, 'macos')
       run: echo "CIBW_TEST_COMMAND=" >> "$GITHUB_ENV"
 
-    # Temporarily disable Android tests on ubuntu-latest due to emulator issues.
-    # See https://github.com/pybind/pybind11/pull/5914.
-    - name: "NOTE: Android tests are disabled on ubuntu-latest"
-      if: contains(matrix.runs-on, 'ubuntu')
-      run: |
-        echo "CIBW_TEST_COMMAND=" >> "$GITHUB_ENV"
-        echo '::warning::Android cibuildwheel tests are disabled on ubuntu-latest (CIBW_TEST_COMMAND is empty). See PR 5914.'
-
-    # https://github.blog/changelog/2024-04-02-github-actions-hardware-accelerated-android-virtualization-now-available/
-    - name: Enable KVM for Android emulator
-      if: contains(matrix.runs-on, 'ubuntu')
-      run: |
-        echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
-        sudo udevadm control --reload-rules
-        sudo udevadm trigger --name-match=kvm
-
-    - run: pipx install patchelf
-
     - uses: pypa/cibuildwheel@v3.3
       env:
         CIBW_PLATFORM: android
diff --git a/tests/env.py b/tests/env.py
index 790a010..12acde7 100644
--- a/tests/env.py
+++ b/tests/env.py
@@ -4,6 +4,8 @@
 import sys
 import sysconfig
 
+import pytest
+
 ANDROID = sys.platform.startswith("android")
 IOS = sys.platform.startswith("ios")
 LINUX = sys.platform.startswith("linux")
@@ -50,6 +52,9 @@
     import sys
     import textwrap
 
+    if ANDROID or IOS or sys.platform.startswith("emscripten"):
+        pytest.skip("Requires subprocess support")
+
     code = textwrap.dedent(code).strip()
     try:
         for _ in range(rerun):  # run flakily failing test multiple times
diff --git a/tests/test_custom_type_setup.py b/tests/test_custom_type_setup.py
index 4c6b951..a200b02 100644
--- a/tests/test_custom_type_setup.py
+++ b/tests/test_custom_type_setup.py
@@ -2,7 +2,6 @@
 
 import gc
 import os
-import sys
 import weakref
 
 import pytest
@@ -52,10 +51,6 @@
     gc_tester(obj)
 
 
-@pytest.mark.skipif(
-    env.IOS or sys.platform.startswith("emscripten"),
-    reason="Requires subprocess support",
-)
 @pytest.mark.skipif("env.PYPY or env.GRAALPY")
 def test_py_cast_useable_on_shutdown():
     """Test that py::cast works during interpreter shutdown.
diff --git a/tests/test_gil_scoped.py b/tests/test_gil_scoped.py
index 84a7a99..fc998b0 100644
--- a/tests/test_gil_scoped.py
+++ b/tests/test_gil_scoped.py
@@ -168,6 +168,9 @@
 
 
 def _run_in_process(target, *args, **kwargs):
+    if env.ANDROID or env.IOS or sys.platform.startswith("emscripten"):
+        pytest.skip("Requires subprocess support")
+
     test_fn = target if len(args) == 0 else args[0]
     # Do not need to wait much, 10s should be more than enough.
     timeout = 0.1 if test_fn is _intentional_deadlock else 10