From 4c83a6b1ff4578e5e41335d5c0731e36259eddf4 Mon Sep 17 00:00:00 2001 From: Malcolm Smith Date: Thu, 24 Apr 2025 17:14:42 +0100 Subject: [PATCH] Miscellaneous cleanups --- Android/README.md | 8 +++++--- Android/android.py | 20 +++++++++----------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/Android/README.md b/Android/README.md index 789bcbe5edff44..6cabd6ba5d6844 100644 --- a/Android/README.md +++ b/Android/README.md @@ -25,11 +25,13 @@ it: `android-sdk/cmdline-tools/latest`. * `export ANDROID_HOME=/path/to/android-sdk` -The `android.py` script also requires the following commands to be on the `PATH`: +The `android.py` script will automatically use the SDK's `sdkmanager` to install +any packages it needs. + +The script also requires the following commands to be on the `PATH`: * `curl` * `java` (or set the `JAVA_HOME` environment variable) -* `tar` ## Building @@ -97,7 +99,7 @@ similar to the `Android` directory of the CPython source tree. The Python test suite can be run on Linux, macOS, or Windows: * On Linux, the emulator needs access to the KVM virtualization interface, and - a DISPLAY environment variable pointing at an X server. + a DISPLAY environment variable pointing at an X server. Xvfb is acceptable. The test suite can usually be run on a device with 2 GB of RAM, but this is borderline, so you may need to increase it to 4 GB. As of Android diff --git a/Android/android.py b/Android/android.py index 1b20820b784371..3f48b42aa17571 100755 --- a/Android/android.py +++ b/Android/android.py @@ -138,19 +138,19 @@ def make_build_python(context): run(["make", "-j", str(os.cpu_count())]) -def unpack_deps(host): +def unpack_deps(host, prefix_dir): deps_url = "https://github.com/beeware/cpython-android-source-deps/releases/download" for name_ver in ["bzip2-1.0.8-2", "libffi-3.4.4-3", "openssl-3.0.15-4", "sqlite-3.49.1-0", "xz-5.4.6-1"]: filename = f"{name_ver}-{host}.tar.gz" download(f"{deps_url}/{name_ver}/{filename}") - run(["tar", "-xf", filename]) + shutil.unpack_archive(filename, prefix_dir) os.remove(filename) def download(url, target_dir="."): out_path = f"{target_dir}/{basename(url)}" - run(["curl", "-Lf", "-o", out_path, url]) + run(["curl", "-Lf", "--retry", "5", "--retry-all-errors", "-o", out_path, url]) return out_path @@ -162,8 +162,7 @@ def configure_host_python(context): prefix_dir = host_dir / "prefix" if not prefix_dir.exists(): prefix_dir.mkdir() - os.chdir(prefix_dir) - unpack_deps(context.host) + unpack_deps(context.host, prefix_dir) os.chdir(host_dir) command = [ @@ -241,16 +240,15 @@ def setup_sdk(): # the Gradle wrapper is not included in the CPython repository. Instead, we # extract it from the Gradle GitHub repository. def setup_testbed(): - # The Gradle version used for the build is specified in - # testbed/gradle/wrapper/gradle-wrapper.properties. This wrapper version - # doesn't need to match, as any version of the wrapper can download any - # version of Gradle. - version = "8.9.0" paths = ["gradlew", "gradlew.bat", "gradle/wrapper/gradle-wrapper.jar"] - if all((TESTBED_DIR / path).exists() for path in paths): return + # The wrapper version isn't important, as any version of the wrapper can + # download any version of Gradle. The Gradle version actually used for the + # build is specified in testbed/gradle/wrapper/gradle-wrapper.properties. + version = "8.9.0" + for path in paths: out_path = TESTBED_DIR / path out_path.parent.mkdir(exist_ok=True)