Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

android-studio: set ANDROID_EMULATOR_USE_SYSTEM_LIBS #33634

Merged
merged 1 commit into from Jan 16, 2018

Conversation

Ma27
Copy link
Member

@Ma27 Ma27 commented Jan 9, 2018

Motivation for this change

This change sets an environment variable to ensure that Android Studio
uses the correct drivers to avoid any breackage when trying to run a
native application on a virtual device.

Things done
  • Tested using sandboxing (nix.useSandbox on NixOS, or option build-use-sandbox in nix.conf on non-NixOS)
  • Built on platform(s)
    • NixOS
    • macOS
    • other Linux distributions
  • Tested via one or more NixOS test(s) if existing and applicable for the change (look inside nixos/tests)
  • Tested compilation of all pkgs that depend on this change using nix-shell -p nox --run "nox-review wip"
  • Tested execution of all binary files (usually in ./result/bin/)
  • Fits CONTRIBUTING.md.

@orivej
Copy link
Contributor

orivej commented Jan 9, 2018

mesa store path should not be in LD_LIBRARY_PATH because the libraries should come from /run/opengl-driver/lib (or /run/opengl-driver-32/lib).

@orivej
Copy link
Contributor

orivej commented Jan 9, 2018

And mesa does not provide any binaries, so this PR does not seem to have any effect.

@Ma27
Copy link
Member Author

Ma27 commented Jan 9, 2018

thanks for your response!

mesa store path should not be in LD_LIBRARY_PATH because the libraries should come from /run/opengl-driver/lib (or /run/opengl-driver-32/lib).

Please keep in mind that android-studio lives in a chrooted FHS environment (see #16752 for further reference), so I think it's actually valid in this case as Android Studio obviously loves hard-coded paths that need to be fixed using such an approach.

And mesa does not provide any binaries, so this PR does not seem to have any effect.

The thing is: without this change I receive an error log like this:

3:32 PM	Executing tasks: [:app:assembleDebug]

3:32 PM	Emulator: libGL error: unable to load driver: i965_dri.so

3:32 PM	Emulator: libGL error: driver pointer missing

3:32 PM	Emulator: libGL error: failed to load driver: i965

3:32 PM	Emulator: libGL error: unable to load driver: i965_dri.so

3:32 PM	Emulator: libGL error: driver pointer missing

3:32 PM	Emulator: libGL error: failed to load driver: i965

3:32 PM	Emulator: libGL error: unable to load driver: swrast_dri.so

3:32 PM	Emulator: libGL error: failed to load driver: swrast

3:32 PM	Emulator: X Error of failed request:  BadValue (integer parameter out of range for operation)

3:32 PM	Emulator: Major opcode of failed request:  155 (GLX)

3:32 PM	Emulator: Minor opcode of failed request:  24 (X_GLXCreateNewContext)

3:32 PM	Emulator: Value in failed request:  0x0

3:32 PM	Emulator: Serial number of failed request:  64

3:32 PM	Emulator: Current serial number in output stream:  65

3:32 PM	Emulator: emulator: ERROR: Missing initial data partition file: /home/ma27/.android/avd/Nexus_5X_API_27.avd/userdata.img

3:32 PM	Emulator: Process finished with exit code 1

3:32 PM	Gradle build finished with 2 warnings(s) in 6s 378ms

When this change is checked out, the emulator starts perfectly fine. However I'm not 100% certain why this works as well and I have some exams this week, so I won't be able to debug this properly (however we could have a look at this on the weekend if possible and I'd also create some reproduction instructions for you that should make it easier to reason about this :))

@Ma27 Ma27 force-pushed the android-studio/support-virtual-devices branch from db24710 to 889e0a5 Compare January 14, 2018 16:57
@Ma27
Copy link
Member Author

Ma27 commented Jan 14, 2018

@orivej I just managed to have a second look at the problem.

At first, I'm not sure how the mesa package solved the problem, I just checked it by killing all state directories of Android Studio in my home directory and recreated the environment using a rebuilt android-studio package including mesa.
After some more research I found a more suitable solution (https://stackoverflow.com/a/40790339). By adding the ANDROID_EMULATOR_USE_SYSTEM_LIBS variable to the wrapper I just managed to get android-studio running again and without the change (and cleared state dirs in ~/ the driver errors appeared again.)

This change sets an environment variable to ensure that Android Studio
uses the correct drivers to avoid any breackage when trying to run a
native application on a virtual device.

Without proper configuration `android-studio` would be unable to load
the drivers for the AVD and yield messages like this:

```
3:32 PM	Executing tasks: [:app:assembleDebug]

3:32 PM	Emulator: libGL error: unable to load driver: i965_dri.so

3:32 PM	Emulator: libGL error: driver pointer missing

3:32 PM	Emulator: libGL error: failed to load driver: i965

3:32 PM	Emulator: libGL error: unable to load driver: i965_dri.so

3:32 PM	Emulator: libGL error: driver pointer missing

3:32 PM	Emulator: libGL error: failed to load driver: i965

3:32 PM	Emulator: libGL error: unable to load driver: swrast_dri.so

3:32 PM	Emulator: libGL error: failed to load driver: swrast

3:32 PM	Emulator: X Error of failed request:  BadValue (integer parameter out of range for operation)

3:32 PM	Emulator: Major opcode of failed request:  155 (GLX)

3:32 PM	Emulator: Minor opcode of failed request:  24 (X_GLXCreateNewContext)

3:32 PM	Emulator: Value in failed request:  0x0

3:32 PM	Emulator: Serial number of failed request:  64

3:32 PM	Emulator: Current serial number in output stream:  65

3:32 PM	Emulator: emulator: ERROR: Missing initial data partition file: /home/ma27/.android/avd/Nexus_5X_API_27.avd/userdata.img

3:32 PM	Emulator: Process finished with exit code 1

3:32 PM	Gradle build finished with 2 warnings(s) in 6s 378ms
```

For further reference have a look at the following StackOverflow
message: https://stackoverflow.com/a/40790339
@Ma27 Ma27 force-pushed the android-studio/support-virtual-devices branch from 889e0a5 to 17dcd33 Compare January 14, 2018 17:36
@Ma27 Ma27 changed the title android-studio: add mesa to the runtime path android-studio: set ANDROID_EMULATOR_USE_SYSTEM_LIBS Jan 14, 2018
@fpletz fpletz merged commit 13b4f44 into NixOS:master Jan 16, 2018
@Ma27 Ma27 deleted the android-studio/support-virtual-devices branch January 16, 2018 17:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants