Open mzabani opened 1 year ago
Not a maintainer, but still an interesting issue. What CPU model are you running?
I'm running an AMD Ryzen 9 5950X 16-Core Processor with KVM enabled.
Hey @mzabani I cannot reproduce it here! The emulator is launched.
NFO | Android emulator version 31.3.14.0 (build_id 9322596) (CL:N/A)
emulator: INFO: Found systemPath /nix/store/4rajkmxxg1zj6l2gbirqcamv6xhixl79-androidsdk/libexec/android-sdk/system-images/android-33/google_apis_playstore/x86_64/
INFO | Duplicate loglines will be removed, if you wish to see each indiviudal line launch with the -log-nofilter flag.
WARNING | Failed to process .ini file /home/hadi/.android/avd/cmdline-created-android.avd/quickbootChoice.ini for reading.
WARNING | cannot add library /nix/store/pqv3rgrv790myywlk8qlcrvf50h7mj3k-emulator-31.3.14/libexec/android-sdk/emulator/qemu/linux-x86_64/lib64/vulkan/libvulkan.so: failed
INFO | added library /nix/store/pqv3rgrv790myywlk8qlcrvf50h7mj3k-emulator-31.3.14/libexec/android-sdk/emulator/lib64/vulkan/libvulkan.so
ERROR | Failed to create Vulkan instance.
queryCoreProfileSupport: swap interval not found
INFO | configAndStartRenderer: setting vsync to 60 hz
INFO | Sending adb public key [QAAAAFsEUvktdJTa16hcU3PHtcYPukNnFM40omsyANfyvDtEf2iGv22Xlo8NWsTUN39qpPgQFpvNfsPcYNLgfpdP+Y7b/Lp+vT4GJs6ya1OnotYt2nrLg1vWxZY473QAGyXsWObf5DKsjHv9ixiRLj6VxwOzwsXNb4ZpJL50XDn+TyqcUOLXcXetxULN26A5pcWifEQdHIfMF+QxncVYZ8V3mJb6Z34sUzAtiLaXkzUQdnoL7VfgXHGDs7XGlQH8q75yIaOYSvlwBhImjvWUEOZdFTe2uoncAE5NQoepozHBW7qVQIW4yp+BFtsFLO2d7ZseI55vW9LtM6dXpaavH23xsbJvCMauglH9UTYXg7z97olYhDtHAPpr4aHj/Uc5StNJE4bZaCgOkjYX3PB+2w4Jcgrsv9xFH0BP8AY40yiv8YO2AyF6Z0ZEZ7YKKPZOrggNcW8vvaSB1TJ1FnttAcg6dbfudKFtM6wb4I9dMEvXNNlsbZKF32DTRKy02/Z1W7zgTzQKJpR1I7aZTYDvCVI4S1jdWt0w98PPStvsQiG7NmbpSs9I851Rw8J5SyxPQWwwvbwr9l75pKWDQ4rw2lZcrS1FQFA5bVClwNL6zodNMu6LxIt7lZBOf7C73umWgU4Wfl8x86HKUw7wEqADLmWp4CP59UQ+FX5BLYJVsXXMsGqIXVe7RAEAAQA= hadi@unknown]
INFO | injectedQemuChannel!
INFO | Informing listeners of injection.
INFO | Rootcanal has been activated.
WARNING | *** No gRPC protection active, consider launching with the -grpc-use-jwt flag.***
INFO | Started GRPC server at 127.0.0.1:8554, security: Local, auth: none
INFO | Advertising in: /run/user/1000/avd/running/pid_108813.ini
INFO | setDisplayConfigs w 320 h 640 dpiX 160 dpiY 160
ERROR | Unable to connect to adb daemon on port: 5037
INFO | Your emulator is out of date, please update by launching Android Studio:
- Start Android Studio
- Select menu "Tools > Android > SDK Manager"
- Click "SDK Tools" tab
- Check "Android Emulator" checkbox
- Click "OK"
glTexImage2D: got err pre :( 0x502 internal 0x8229 format 0x1903 type 0x1401
glTexImage2D: got err pre :( 0x502 internal 0x8058 format 0x1908 type 0x1401
glTexImage2D: got err pre :( 0x506 internal 0x8058 format 0x1908 type 0x1401
INFO | boot completed
INFO | boot time 122084 ms
INFO | Increasing screen off timeout, logcat buffer size to 2M.
ERROR | Unable to connect to adb daemon on port: 5037
INFO | Revoking microphone permissions for Google App.
Have no clue why it's working differently! I searched and found https://stackoverflow.com/questions/15023592/llvm-cannot-select-intrinsic-llvm-spu-si-sf, so I guess it's a problem related to LLVM+CLANG, where in my shell I found
CC=gcc
Still have no clue!
Thanks for the quick answer! I also have CC=gcc
in my environment.
One thing I noticed different in the outputs of our runs is mine has the following line:
INFO | Info: Warning: Ignoring XDG_SESSION_TYPE=wayland on Gnome. Use QT_QPA_PLATFORM=wayland to run on Wayland anyway. ((null):0, (null))
I tried setting that environment variable but got a different error (and running the emulator under nix develop -i
triggers this error as well):
$ QT_QPA_PLATFORM=wayland emulator -avd cmdline-created-android
INFO | Android emulator version 31.3.14.0 (build_id 9322596) (CL:N/A)
emulator: INFO: Found systemPath /nix/store/4rajkmxxg1zj6l2gbirqcamv6xhixl79-androidsdk/libexec/android-sdk/system-images/android-33/google_apis_playstore/x86_64/
INFO | Duplicate loglines will be removed, if you wish to see each indiviudal line launch with the -log-nofilter flag.
INFO | Info: Warning: Ignoring XDG_SESSION_TYPE=wayland on Gnome. Use QT_QPA_PLATFORM=wayland to run on Wayland anyway. ((null):0, (null))
INFO | Warning: Could not find the Qt platform plugin "wayland" in "/nix/store/pqv3rgrv790myywlk8qlcrvf50h7mj3k-emulator-31.3.14/libexec/android-sdk/emulator/lib64/qt/plugins" ((null):0, (null))
Fatal: This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.
Available platform plugins are: xcb.
((null):0, (null))
INFO | Fatal: This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.
Available platform plugins are: xcb.
((null):0, (null))
Aborted (core dumped)
Which is strange, since it says it's ignoring XDG_SESSION_TYPE again, but then crashes with a very different error.
Suspecting my graphical stack, I tried using -no-window
, and indeed it doesn't crash (only last lines pasted):
$ emulator -avd cmdline-created-android -no-window
...
...
INFO | setDisplayConfigs w 320 h 640 dpiX 160 dpiY 160
INFO | boot completed
INFO | boot time 19692 ms
INFO | Increasing screen off timeout, logcat buffer size to 2M.
INFO | Revoking microphone permissions for Google App.
So it seems it might be Wayland + my GPU/driver?
Oh, before I finish this, I discovered a new option and tried it, and it worked! It's emulator -avd cmdline-created-android -gpu swiftshader_indirect
.
I wonder if we should dismiss all of this as a non-supported LLVM thing in my driver/graphical stack or not? Or if at least nix develop -i
should've worked?
I can reproduce the error on my setup as well. Here is my flake.nix
{
description = "Flutter devshell";
inputs = { flake-utils.url = "github:numtide/flake-utils"; };
outputs = { self, nixpkgs, flake-utils }:
flake-utils.lib.eachDefaultSystem (system:
let
pkgs = import nixpkgs {
inherit system;
config = {
android_sdk.accept_license = true;
allowUnfree = true;
};
};
buildToolsVersion = "28.0.3";
androidComposition = pkgs.androidenv.composeAndroidPackages {
buildToolsVersions = [ buildToolsVersion ];
platformVersions = [ "28" "31" ];
abiVersions = [ "x86_64" ];
includeEmulator = true;
includeSystemImages = true;
systemImageTypes = [ "google_apis_playstore" ];
useGoogleAPIs = true;
};
androidSdk = androidComposition.androidsdk;
in {
devShell = with pkgs;
mkShell {
ANDROID_SDK_ROOT = "${androidSdk}/libexec/android-sdk";
buildInputs = [ flutter androidSdk jdk11 ];
};
});
}
here is what happens when I do emulator -avd "Pixel6Pro"
INFO | Android emulator version 31.3.14.0 (build_id 9322596) (CL:N/A)
emulator: INFO: Found systemPath /nix/store/r7kss2pcdiqrsnv46q8x4cxad48359ig-androidsdk/libexec/android-sdk/system-images/android-28/google_apis_playstore/x86_64/
INFO | Duplicate loglines will be removed, if you wish to see each indiviudal line launch with the -log-nofilter flag.
queryCoreProfileSupport: swap interval not found
INFO | configAndStartRenderer: setting vsync to 60 hz
WARNING | cannot add library /nix/store/cma58q6n83hdhn4bv4gzfmpabg4z2nbr-emulator-31.3.14/libexec/android-sdk/emulator/qemu/linux-x86_64/lib64/vulkan/libvulkan.so: failed
INFO | added library /nix/store/cma58q6n83hdhn4bv4gzfmpabg4z2nbr-emulator-31.3.14/libexec/android-sdk/emulator/lib64/vulkan/libvulkan.so
WARNING | *** No gRPC protection active, consider launching with the -grpc-use-jwt flag.***
INFO | Started GRPC server at 127.0.0.1:8554, security: Local, auth: none
INFO | Advertising in: /run/user/1000/avd/running/pid_43588.ini
INFO | setDisplayConfigs w 1440 h 3120 dpiX 560 dpiY 560
WARNING | change of renderer detected.
WARNING | EGL config mismatch, fallback to default configs
LLVM ERROR: Cannot select: intrinsic %llvm.x86.sse41.pblendvb
also it works if I use -gpu swiftshader_indirect
Interesting. @Tanish2002 what GPU do you have and what driver are you using? Are you on Wayland or on X?
I'm on Wayland, using the amdgpu
driver with a Radeon RX 6700 XT card:
$ lspci -v
09:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Navi 22 [Radeon RX 6700/6700 XT/6750 XT / 6800M/6850M XT] (rev c1) (prog-if 00 [VGA controller])
Subsystem: ASRock Incorporation Device 5222
Flags: bus master, fast devsel, latency 0, IRQ 100, IOMMU group 18
Memory at d0000000 (64-bit, prefetchable) [size=256M]
Memory at e0000000 (64-bit, prefetchable) [size=2M]
I/O ports at e000 [size=256]
Memory at fca00000 (32-bit, non-prefetchable) [size=1M]
Expansion ROM at 000c0000 [disabled] [size=128K]
Capabilities: <access denied>
Kernel driver in use: amdgpu
Kernel modules: amdgpu
I wonder if some other graphical driver would work.. I might have to try it out some time.
This error
Available platform plugins are: xcb.
((null):0, (null))
INFO | Fatal: This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.
Available platform plugins are: xcb.
((null):0, (null))
Aborted (core dumped)
reminds me that I already had a similar problem! I'm not sure how did I solve it in the end, but did you try to enable libvirtd
? Based on https://nixos.wiki/wiki/Libvirt you need to add
virtualisation.libvirtd.enable = true;
in the configuration.nix
file of NixOS. Then add your user to libvirtd
group.
I have libvirtd enabled and my user belongs to the libvirtd
group, so I think sadly it's something else.
I ran the emulator with QT_DEBUG_PLUGINS=1
set and found that xcb might be kind of a red herring since it's actually loaded like many other plugins that appear in stdout:
INFO | Debug: QFactoryLoader::QFactoryLoader() looking at "/nix/store/pqv3rgrv790myywlk8qlcrvf50h7mj3k-emulator-31.3.14/libexec/android-sdk/emulator/lib64/qt/plugins/platforms/libqxcb.so" ((null):0, (null))
INFO | Debug: Got keys from plugin meta data ("xcb") ((null):0, (null))
However, I think the key in the original error is that xcb is a platform plugin, and indeed it's the only one in the folder:
$ ls /nix/store/pqv3rgrv790myywlk8qlcrvf50h7mj3k-emulator-31.3.14/libexec/android-sdk/emulator/lib64/qt/plugins/platforms/
libqxcb.so
So my hypothesis is that running this on XWayland is broken, but not on pure X, but that still doesn't cover why that strange LLVM error is happening. I do have qt5 installed independently, but I don't see any wayland-like platform there:
$ ls /nix/store/w1700kgv91n8aliqc0zmww4ijhq4sh4c-qtbase-5.15.5-bin/lib/qt-5.15.5/plugins/platforms
libqeglfs.so libqlinuxfb.so libqminimalegl.so libqminimal.so libqoffscreen.so libqvnc.so libqxcb.so
There is a qtwayland
in nixpkgs, but the names of the libraries in that don't resemble something that could work. Also, I don't know how to make the emulator look for platform plugins in other folders anyway. Some people in the internet mention a QT_QPA_PLATFORM_PLUGIN_PATH
variable for that, but it seems to be ignored when I set it.
Anyway, this is starting to look like a XWayland/QT bug. I'm not sure if I'll keep investigating as I found a workaround, but I'll keep posting in case I do.
I also have this problem and the workaround I found is to use either:
-gpu guest
or
-gpu swiftshader_indirect
when calling the emulator
idk why, but
-gpu guest
works here, thank you!!!
I managed to get it working without changing GPU settings by adding vulkan-loader
and libGL
to a FHS environment (although I'm not sure if a FHS environment is required).
Note that -gpu guest
/ -gpu swiftshader_indirect
are both software rendering and probably a lot more inefficient. I believe the issue is simply that the emulator tries to get -gpu host
GPU hardware acceleration working, but can't find Vulkan and OpenGL.
@K900 helped me with this issue in Matrix channel today when suggested defining LD_LIBRARY_PATH
in shell:
LD_LIBRARY_PATH="${pkgs.libglvnd}/lib";
LD_LIBRARY_PATH="${pkgs.libglvnd}/lib";
This worked for me!
My working flake:
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
flake-utils.url = "github:numtide/flake-utils";
};
outputs = { self, nixpkgs, flake-utils }:
flake-utils.lib.eachDefaultSystem (system:
let
pkgs = import nixpkgs {
inherit system;
config = {
android_sdk.accept_license = true;
allowUnfree = true;
};
};
androidComposition = pkgs.androidenv.composeAndroidPackages {
cmdLineToolsVersion = "11.0";
toolsVersion = "26.1.1";
platformToolsVersion = "34.0.4";
buildToolsVersions = [ "34.0.0" ];
includeEmulator = true;
emulatorVersion = "32.1.14";
platformVersions = [ "34" ];
includeSources = false;
includeSystemImages = true;
systemImageTypes = [ "google_apis_playstore" ];
abiVersions = [ "x86_64" ];
cmakeVersions = [ ];
includeNDK = false;
useGoogleAPIs = false;
useGoogleTVAddOns = false;
includeExtras = [];
extraLicenses = [
"android-sdk-preview-license"
"android-googletv-license"
"android-sdk-arm-dbt-license"
"google-gdk-license"
"intel-android-extra-license"
"intel-android-sysimage-license"
"mips-android-sysimage-license"
];
};
androidsdk = androidComposition.androidsdk;
in
with pkgs;
{
devShells.default = mkShell {
buildInputs = [
androidsdk
flutter
jdk17
];
ANDROID_SDK_ROOT = "${androidsdk}/libexec/android-sdk";
LD_LIBRARY_PATH="${pkgs.libglvnd}/lib";
};
}
);
}
Running X on an RX 6950XT and a Ryzen 5 3600 with KVM enabled.
This issue has been mentioned on NixOS Discourse. There might be relevant details there:
https://discourse.nixos.org/t/how-to-extend-environment-variables-in-modules/55492/9
Describe the bug
Segmentation fault when launching Android emulator provided by
androidenv.composeAndroidPackages
environment from command line.Steps To Reproduce
Use the following flake.nix:
Run
nix develop
Create an AVD with
avdmanager create avd -n cmdline-created-android -k "system-images;android-33;google_apis_playstore;x86_64"
without a custom hardware profile.Run the emulator with
emulator -avd cmdline-created-android
and wait for the segmentation fault.Expected behavior
I was expecting to see Android running inside the emulator without any errors.
Additional context
The output of the emulator is:
Notify maintainers
Didn't know how to find a
meta.maintainers
list, so citing from recent git history of this file: @hadilq @jakobkukla @VergeDX @ArtturinMetadata
Please run
nix-shell -p nix-info --run "nix-info -m"
and paste the result.