about summary refs log tree commit diff
path: root/pkgs/development/mobile/androidenv/emulate-app.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/development/mobile/androidenv/emulate-app.nix')
-rw-r--r--pkgs/development/mobile/androidenv/emulate-app.nix44
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
   '';
 }