diff --git a/cibuildwheel/platforms/android.py b/cibuildwheel/platforms/android.py index e2866840..e706ccaa 100644 --- a/cibuildwheel/platforms/android.py +++ b/cibuildwheel/platforms/android.py @@ -190,7 +190,7 @@ def setup_env( """ log.step("Setting up build environment...") build_frontend = build_options.build_frontend.name - use_uv = build_frontend == "build[uv]" + use_uv = build_frontend in {"build[uv]", "uv"} uv_path = find_uv() if use_uv and uv_path is None: msg = "uv not found" @@ -228,8 +228,8 @@ def setup_env( android_env = setup_android_env(config, python_dir, venv_dir, build_env) # Install build tools - if build_frontend not in {"build", "build[uv]"}: - msg = "Android requires the build frontend to be 'build'" + if build_frontend not in {"build", "build[uv]", "uv"}: + msg = "Android requires the build frontend to be 'build' or 'uv'" raise errors.FatalError(msg) call(*pip, "install", "build", *constraint_flags(dependency_constraint), env=build_env) @@ -442,22 +442,44 @@ def before_build(state: BuildState) -> None: def build_wheel(state: BuildState) -> Path: log.step("Building wheel...") built_wheel_dir = state.build_path / "built_wheel" - call( - "python", - "-m", - "build", - state.options.package_dir, - "--wheel", - "--no-isolation", - "--skip-dependency-check", - f"--outdir={built_wheel_dir}", - *get_build_frontend_extra_flags( - state.options.build_frontend, - state.options.build_verbosity, - state.options.config_settings, - ), - env=state.android_env, - ) + match state.options.build_frontend.name: + case "build" | "build[uv]": + call( + "python", + "-m", + "build", + state.options.package_dir, + "--wheel", + "--no-isolation", + "--skip-dependency-check", + f"--outdir={built_wheel_dir}", + *get_build_frontend_extra_flags( + state.options.build_frontend, + state.options.build_verbosity, + state.options.config_settings, + ), + env=state.android_env, + ) + case "uv": + uv_path = find_uv() + assert uv_path is not None + call( + uv_path, + "build", + state.options.package_dir, + "--wheel", + "--no-build-isolation", + f"--out-dir={built_wheel_dir}", + *get_build_frontend_extra_flags( + state.options.build_frontend, + state.options.build_verbosity, + state.options.config_settings, + ), + env=state.android_env, + ) + case x: + msg = f"Invalid build backend {x!r}" + raise AssertionError(msg) built_wheels = list(built_wheel_dir.glob("*.whl")) if len(built_wheels) != 1: diff --git a/test/conftest.py b/test/conftest.py index 7416139f..ad8ccff1 100644 --- a/test/conftest.py +++ b/test/conftest.py @@ -178,8 +178,6 @@ def build_frontend_env(request: pytest.FixtureRequest) -> dict[str, str]: if platform in {"pyodide", "ios", "android"} and frontend == "pip": pytest.skip(f"Can't use pip as build frontend for {platform}") - if platform == "android" and frontend == "uv": - pytest.skip(f"Can't use uv as build frontend for {platform}") if platform == "pyodide" and frontend in {"build[uv]", "uv"}: pytest.skip("Can't use uv with pyodide yet") uv_path = find_uv() diff --git a/test/test_android.py b/test/test_android.py index 6d6539ab..eb16e2b1 100644 --- a/test/test_android.py +++ b/test/test_android.py @@ -128,7 +128,7 @@ def test_frontend_good(tmp_path, build_frontend_env): assert wheels == [f"spam-0.1.0-cp313-cp313-android_21_{native_arch.android_abi}.whl"] -@pytest.mark.parametrize("frontend", ["pip", "uv"]) +@pytest.mark.parametrize("frontend", ["pip"]) def test_frontend_bad(frontend, tmp_path, capfd): new_c_project().generate(tmp_path) with pytest.raises(CalledProcessError):