android / android/android-test
[Bazel] Python dependency on @google_apputils//:apputils not working
- Dominant language
- Java
- Stars
- 1.2k
- Forks
- 342
- Avg merge
- 11h 29m
- Merged PRs (30d)
- 2
Description
### Description
I'm trying to start a `android_device` through Bazel, defined this way:
```
load("@rules_android//android:rules.bzl", "android_device")
android_device(
name = "pixel_api_23_x86",
cache = 64,
default_properties = "pixel.properties",
horizontal_resolution = 1080,
ram = 2048,
screen_density = 441,
system_image = "@androidsdk//:emulator_images_android_23_x86",
tags = ["requires-kvm"],
vertical_resolution = 1920,
vm_heap = 64,
)
```
With in my `WORKSPACE`:
```
android_sdk_repository(
name = "androidsdk",
)
http_archive(
name = "rules_android",
sha256 = "6461c1c5744442b394f46645957d6bd3420eb1b421908fe63caa03091b1b3655",
strip_prefix = "rules_android-0.1.1",
url = "https://github.com/bazelbuild/rules_android/archive/v0.1.1.tar.gz",
)
# ...
http_archive(
name = "android_test_support",
sha256 = "0c5d67ea781c25d9400394279a12eac3d75eda09cabe8ef73c0185575ec90e4d",
strip_prefix = "android-test-androidx-test-1.3.0",
url = "https://github.com/android/android-test/archive/androidx-test-1.3.0.tar.gz",
)
load("@android_test_support//:repo.bzl", "android_test_repositories")
android_test_repositories()
```
And in my `.bazelrc`, as Python 3 is the default on my OS (Archlinux):
```
build --host_force_python=PY2
test --host_force_python=PY2
```
I then try to start my device:
```
bazel run -s //java/fr/enoent/android/devices:pixel_api_23_x86 -- --action=start
INFO: Invocation ID: edb1e337-509d-495c-90be-80ee8e8c3af1
DEBUG: /home/kernald/.cache/bazel/_bazel_kernald/551cfa9086d3d42cb8d718a9a97333ef/external/rules_python/python/pip.bzl:61:10: DEPRECATED: the pip_repositories rule has been replaced with pip_install, please see rules_python 0.1 release notes
INFO: Analyzed target //java/fr/enoent/android/devices:pixel_api_23_x86 (0 packages loaded, 0 targets configured).
INFO: Found 1 target...
SUBCOMMAND: # //java/fr/enoent/android/devices:pixel_api_23_x86 [action 'Creating Android image for //java/fr/enoent/android/devices:pixel_api_23_x86', configuration: c3c69cb4faf4425f09ab76fd33874f8875e3c84703bc9f472a65d1af99857697, execution platform: @local_config_platform//:host]
(cd /home/kernald/.cache/bazel/_bazel_kernald/551cfa9086d3d42cb8d718a9a97333ef/execroot/fr_enoent && \
exec env - \
bazel-out/host/bin/external/android_test_support/tools/android/emulator/unified_launcher_head '--action=boot' '--density=441' '--memory=2048' '--cache=64' '--vm_size=64' '--generate_output_dir=bazel-out/k8-fastbuild/bin/java/fr/enoent/android/devices/pixel_api_23_x86_images' '--skin=1080x1920' '--source_properties_file=external/androidsdk/system-images/android-23/default/x86/source.properties' '--system_images=external/androidsdk/system-images/android-23/default/x86/NOTICE.txt external/androidsdk/system-images/android-23/default/x86/advancedFeatures.ini external/androidsdk/system-images/android-23/default/x86/build.prop external/androidsdk/system-images/android-23/default/x86/kernel-qemu external/androidsdk/system-images/android-23/default/x86/kernel-ranchu external/androidsdk/system-images/android-23/default/x86/ramdisk.img external/androidsdk/system-images/android-23/default/x86/system.img external/androidsdk/system-images/android-23/default/x86/userdata.img' --flag_configured_android_tools '--adb=external/androidsdk/platform-tools/adb' '--emulator_x86=external/androidsdk/emulator/emulator' '--emulator_arm=external/androidsdk/emulator/emulator' '--adb_static=external/bazel_tools/tools/android/fail.sh' '--mksdcard=external/androidsdk/emulator/mksdcard' '--empty_snapshot_fs=bazel-out/host/bin/external/bazel_tools/tools/android/emulator/snapshots.img' '--bios_files=external/androidsdk/emulator/lib/pc-bios/bios-256k.bin,external/androidsdk/emulator/lib/pc-bios/bios.bin,external/androidsdk/emulator/lib/pc-bios/efi-e1000.rom,external/androidsdk/emulator/lib/pc-bios/efi-e1000e.rom,external/androidsdk/emulator/lib/pc-bios/efi-virtio.rom,external/androidsdk/emulator/lib/pc-bios/kvmvapic.bin,external/androidsdk/emulator/lib/pc-bios/linuxboot.bin,external/androidsdk/emulator/lib/pc-bios/linuxboot_dma.bin,external/androidsdk/emulator/lib/pc-bios/multiboot.bin,external/androidsdk/emulator/lib/pc-bios/vgabios-cirrus.bin,external/androidsdk/emulator/lib/pc-bios/vgabios-stdvga.bin,external/androidsdk/emulator/lib/pc-bios/vgabios-virtio.bin' --nocopy_system_images --single_image_file '--android_sdk_path=external/androidsdk' '--platform_apks=' '--default_properties_file=java/fr/enoent/android/devices/pixel.properties')
ERROR: /home/kernald/dev/monos/java/fr/enoent/android/devices/BUILD:3:15: Creating Android image for //java/fr/enoent/android/devices:pixel_api_23_x86 failed: (Exit 1): unified_launcher_head failed: error executing command bazel-out/host/bin/external/android_test_support/tools/android/emulator/unified_launcher_head '--action=boot' '--density=441' '--memory=2048' '--cache=64' '--vm_size=64' ... (remaining 17 argument(s) skipped)
Use --sandbox_debug to see verbose messages from the sandbox unified_launcher_head failed: error executing command bazel-out/host/bin/external/android_test_support/tools/android/emulator/unified_launcher_head '--action=boot' '--density=441' '--memory=2048' '--cache=64' '--vm_size=64' ... (remaining 17 argument(s) skipped)
Use --sandbox_debug to see verbose messages from the sandbox
Traceback (most recent call last):
File "/home/kernald/.cache/bazel/_bazel_kernald/551cfa9086d3d42cb8d718a9a97333ef/sandbox/linux-sandbox/2370/execroot/fr_enoent/bazel-out/host/bin/external/android_test_support/tools/android/emulator/unified_launcher_head.runfiles/android_test_support/tools/android/emulator/unified_launcher.py", line 39, in
from tools.android.emulator import emulated_device
File "/home/kernald/.cache/bazel/_bazel_kernald/551cfa9086d3d42cb8d718a9a97333ef/sandbox/linux-sandbox/2370/execroot/fr_enoent/bazel-out/host/bin/external/android_test_support/tools/android/emulator/unified_launcher_head.runfiles/android_test_support/tools/android/emulator/emulated_device.py", line 55, in
from google.apputils import stopwatch
ImportError: No module named apputils
If you want to add certificates to the emulator, Please install MCrypt library using sudo apt-get install python-mcrypt .
Target //java/fr/enoent/android/devices:pixel_api_23_x86 failed to build
Use --verbose_failures to see the command lines of failed build steps.
INFO: Elapsed time: 0.425s, Critical Path: 0.21s
INFO: 2 processes: 2 internal.
ERROR: Build failed. Not running target
FAILED: Build did NOT complete successfully
```
What's interesting is that `unified_launcher_head` [does indeed have that missing dependency](https://github.com/android/android-test/blob/androidx-test-1.3.0/tools/android/emulator/BUILD.bazel#L121-L136). If I install locally `google-apputils`, I then get a failed import for `protobuf`. Everything then works fine (I mean the emulator is dying, but at least it starts...) if I install `protobuf` manually. Are Bazel users expected to install those dependencies manually?
### Steps to Reproduce
### Expected Results
The emulator should start
### Actual Results
The emulator fails to start because of missing Python dependencies
### AndroidX Test and Android OS Versions
1.3.0 (same with 1.4.0-alpha05)
### Link to a public git repo demonstrating the problem:
Contributor guide
Research direction
Start with tools/android/emulator/BUILD.bazel, especially the unified_launcher_head dependencies around lines 121-136, then inspect unified_launcher.py and emulated_device.py. Reproduce the Bazel run command and verify whether the declared Python dependencies are available in the sandbox. Done means the emulator launcher starts without manually installing google-apputils or protobuf.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- android, python
- Domain
- build-system, mobile-dev
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 30/100