- Added xcodeenv: experimental support to build iOS apps through Nix
- Moved mobile development tools into a separate folder
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
{stdenv, androidsdk}:
|
||||
{name, app, platformVersion ? "8", useGoogleAPIs ? false, package, activity}:
|
||||
|
||||
let
|
||||
androidsdkComposition = androidsdk { inherit useGoogleAPIs; platformVersions = [ platformVersion ]; };
|
||||
in
|
||||
stdenv.mkDerivation {
|
||||
inherit name;
|
||||
|
||||
buildCommand = ''
|
||||
mkdir -p $out/bin
|
||||
|
||||
cat > $out/bin/run-test-emulator << "EOF"
|
||||
#!/bin/sh -e
|
||||
|
||||
# We need a TMPDIR
|
||||
if [ "$TMPDIR" = "" ]
|
||||
then
|
||||
export TMPDIR=/tmp
|
||||
fi
|
||||
|
||||
# Store the virtual devices somewhere else, instead of polluting a user's HOME directory
|
||||
export ANDROID_SDK_HOME=$(mktemp -d $TMPDIR/nix-android-vm-XXXX)
|
||||
|
||||
# We have to look for a free TCP port
|
||||
|
||||
echo "Looking for a free TCP port in range 5554-5584"
|
||||
|
||||
for i in $(seq 5554 2 5584)
|
||||
do
|
||||
if [ -z "$(${androidsdkComposition}/libexec/android-sdk-*/platform-tools/adb devices | grep emulator-$i)" ]
|
||||
then
|
||||
port=$i
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if [ -z "$port" ]
|
||||
then
|
||||
echo "Unfortunately, the emulator port space is exhausted!"
|
||||
exit 1
|
||||
else
|
||||
echo "We have a free TCP port: $port"
|
||||
fi
|
||||
|
||||
export ANDROID_SERIAL="emulator-$port"
|
||||
|
||||
# Create a virtual android device
|
||||
${androidsdkComposition}/libexec/android-sdk-*/tools/android create avd -n device -t ${if useGoogleAPIs then "'Google Inc.:Google APIs:"+platformVersion+"'" else "android-"+platformVersion}
|
||||
|
||||
# Launch the emulator
|
||||
${androidsdkComposition}/libexec/android-sdk-*/tools/emulator -avd device -no-boot-anim -port $port &
|
||||
|
||||
# Wait until the device has completely booted
|
||||
|
||||
echo "Waiting until the emulator has booted the device and the package manager is ready..."
|
||||
|
||||
${androidsdkComposition}/libexec/android-sdk-*/platform-tools/adb -s emulator-$port wait-for-device
|
||||
|
||||
echo "Device state has been reached"
|
||||
|
||||
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"
|
||||
|
||||
#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 "ready"
|
||||
|
||||
# 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}
|
||||
EOF
|
||||
|
||||
chmod +x $out/bin/run-test-emulator
|
||||
'';
|
||||
}
|
||||
Reference in New Issue
Block a user