diff options
Diffstat (limited to 'pkgs/development/mobile/androidenv/emulate-app.nix')
-rw-r--r-- | pkgs/development/mobile/androidenv/emulate-app.nix | 44 |
1 files changed, 27 insertions, 17 deletions
diff --git a/pkgs/development/mobile/androidenv/emulate-app.nix b/pkgs/development/mobile/androidenv/emulate-app.nix index eb39d854d1fb7..9c843fa8c3735 100644 --- a/pkgs/development/mobile/androidenv/emulate-app.nix +++ b/pkgs/development/mobile/androidenv/emulate-app.nix @@ -1,5 +1,10 @@ {stdenv, androidsdk}: -{name, app, platformVersion ? "8", abiVersion ? "armeabi-v7a", useGoogleAPIs ? false, enableGPU ? false, package, activity}: +{ name, app ? null +, platformVersion ? "8", abiVersion ? "armeabi-v7a", useGoogleAPIs ? false +, enableGPU ? false, extraAVDFiles ? [] +, package ? null, activity ? null}: + +assert app != null -> package != null && activity != null; let androidsdkComposition = androidsdk { @@ -28,7 +33,7 @@ stdenv.mkDerivation { # We have to look for a free TCP port - echo "Looking for a free TCP port in range 5554-5584" + echo "Looking for a free TCP port in range 5554-5584" >&2 for i in $(seq 5554 2 5584) do @@ -41,56 +46,61 @@ stdenv.mkDerivation { if [ -z "$port" ] then - echo "Unfortunately, the emulator port space is exhausted!" + echo "Unfortunately, the emulator port space is exhausted!" >&2 exit 1 else - echo "We have a free TCP port: $port" + echo "We have a free TCP port: $port" >&2 fi export ANDROID_SERIAL="emulator-$port" # Create a virtual android device - yes "" | ${androidsdkComposition}/libexec/android-sdk-*/tools/android create avd -n device -t ${if useGoogleAPIs then "'Google Inc.:Google APIs:"+platformVersion+"'" else "android-"+platformVersion} + yes "" | ${androidsdkComposition}/libexec/android-sdk-*/tools/android create avd -n device -t ${if useGoogleAPIs then "'Google Inc.:Google APIs:"+platformVersion+"'" else "android-"+platformVersion} $NIX_ANDROID_AVD_FLAGS - # Enable GPU acceleration ${stdenv.lib.optionalString enableGPU '' + # Enable GPU acceleration echo "hw.gpu.enabled=yes" >> $ANDROID_SDK_HOME/.android/avd/device.avd/config.ini ''} + ${stdenv.lib.concatMapStrings (extraAVDFile: '' + ln -sf ${extraAVDFile} $ANDROID_SDK_HOME/.android/avd/device.avd + '') extraAVDFiles} + # Launch the emulator - ${androidsdkComposition}/libexec/android-sdk-*/tools/emulator -avd device -no-boot-anim -port $port & + ${androidsdkComposition}/libexec/android-sdk-*/tools/emulator -avd device -no-boot-anim -port $port $NIX_ANDROID_EMULATOR_FLAGS & # Wait until the device has completely booted - echo "Waiting until the emulator has booted the device and the package manager is ready..." + echo "Waiting until the emulator has booted the device and the package manager is ready..." >&2 ${androidsdkComposition}/libexec/android-sdk-*/platform-tools/adb -s emulator-$port wait-for-device - echo "Device state has been reached" + echo "Device state has been reached" >&2 while [ -z "$(${androidsdkComposition}/libexec/android-sdk-*/platform-tools/adb -s emulator-$port shell getprop dev.bootcomplete | grep 1)" ] do sleep 5 done - echo "dev.bootcomplete property is 1" + echo "dev.bootcomplete property is 1" >&2 #while [ -z "$(${androidsdkComposition}/libexec/android-sdk-*/platform-tools/adb -s emulator-$port shell getprop sys.boot_completed | grep 1)" ] #do #sleep 5 #done - #echo "sys.boot_completed property is 1" + #echo "sys.boot_completed property is 1" >&2 - echo "ready" + echo "ready" >&2 - # Install the App through the debugger - ${androidsdkComposition}/libexec/android-sdk-*/platform-tools/adb -s emulator-$port install ${app}/*.apk + ${stdenv.lib.optionalString (app != null) '' + # Install the App through the debugger + ${androidsdkComposition}/libexec/android-sdk-*/platform-tools/adb -s emulator-$port install ${app}/*.apk - # Start the application - ${androidsdkComposition}/libexec/android-sdk-*/platform-tools/adb -s emulator-$port shell am start -a android.intent.action.MAIN -n ${package}/.${activity} + # Start the application + ${androidsdkComposition}/libexec/android-sdk-*/platform-tools/adb -s emulator-$port shell am start -a android.intent.action.MAIN -n ${package}/.${activity} + ''} EOF - chmod +x $out/bin/run-test-emulator ''; } |