Make the emulator flags configurable at runtime and unimportant messages should go the stderr

This commit is contained in:
Sander van der Burg 2013-08-05 19:08:58 +02:00
parent 2a294a582b
commit 7019b685de

View File

@ -1,5 +1,7 @@
{stdenv, androidsdk}: {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, package ? null, activity ? null}:
assert app != null -> package != null && activity != null;
let let
androidsdkComposition = androidsdk { androidsdkComposition = androidsdk {
@ -28,7 +30,7 @@ stdenv.mkDerivation {
# We have to look for a free TCP port # 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) for i in $(seq 5554 2 5584)
do do
@ -41,10 +43,10 @@ stdenv.mkDerivation {
if [ -z "$port" ] if [ -z "$port" ]
then then
echo "Unfortunately, the emulator port space is exhausted!" echo "Unfortunately, the emulator port space is exhausted!" >&2
exit 1 exit 1
else else
echo "We have a free TCP port: $port" echo "We have a free TCP port: $port" >&2
fi fi
export ANDROID_SERIAL="emulator-$port" export ANDROID_SERIAL="emulator-$port"
@ -58,39 +60,40 @@ stdenv.mkDerivation {
''} ''}
# Launch the emulator # 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 # 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 ${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)" ] while [ -z "$(${androidsdkComposition}/libexec/android-sdk-*/platform-tools/adb -s emulator-$port shell getprop dev.bootcomplete | grep 1)" ]
do do
sleep 5 sleep 5
done 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)" ] #while [ -z "$(${androidsdkComposition}/libexec/android-sdk-*/platform-tools/adb -s emulator-$port shell getprop sys.boot_completed | grep 1)" ]
#do #do
#sleep 5 #sleep 5
#done #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 ${stdenv.lib.optionalString (app != null) ''
${androidsdkComposition}/libexec/android-sdk-*/platform-tools/adb -s emulator-$port install ${app}/*.apk # Install the App through the debugger
${androidsdkComposition}/libexec/android-sdk-*/platform-tools/adb -s emulator-$port install ${app}/*.apk
# Start the application # Start the application
${androidsdkComposition}/libexec/android-sdk-*/platform-tools/adb -s emulator-$port shell am start -a android.intent.action.MAIN -n ${package}/.${activity} ${androidsdkComposition}/libexec/android-sdk-*/platform-tools/adb -s emulator-$port shell am start -a android.intent.action.MAIN -n ${package}/.${activity}
''}
EOF EOF
chmod +x $out/bin/run-test-emulator chmod +x $out/bin/run-test-emulator
''; '';
} }