How can I script genymotion emulator to launch a given avd, headless?

前端 未结 7 685
心在旅途
心在旅途 2020-12-12 15:43

Is there any way to launch by command line a given avd and have it registered via adb ?

I would also prefer to get the emulator l

7条回答
  •  死守一世寂寞
    2020-12-12 16:12

    Here is a better procedure. It will require a first manual launch, but afterwards, you will get a blazing fast genymotion, up within seconds. The following scripts have been tested on macos x. They may need some more work for linux.

    First, launch genymotion emulator normally via genymotion app. Then, get its sha1 from Virtual box :

    VBoxManage list vms

    Then, take a snapshot of it from command line :

    #script genymotion-save.sh
    VM=6a5d9245-b751-47aa-b38d-989c5f1a9cfb
    
    echo "VM is \"$VM\""
    VBoxManage snapshot $VM take snap1 
    

    Then you can detect its ip using this script (most of its complexity comes from mac address conversion):

    #script genymotion-detect-ip.sh
    VM=6a5d9245-b751-47aa-b38d-989c5f1a9cfb
    
    #find mac of vm
    #http://stackoverflow.com/questions/10991771/sed-to-insert-colon-in-a-mac-address
    # Update arp table
    for i in {1..254}; do ping -c 1 192.168.56.$i 2&>1; done
    
    MAC=`VBoxManage showvminfo "$VM" | grep MAC | grep Host | awk -F ":" '{print $3}' | cut -c 2-13`
    #echo "MAC is $MAC"
    
    MAC=`echo $MAC | sed -e 's/\([0-9A-Fa-f]\{2\}\)/\1:/g' -e 's/\(.*\):$/\1/' | tr '[:upper:]' '[:lower:]'`
    #echo "MAC is $MAC"
    
    # Find IP: substitute vname-mac-addr with your vm's mac address in ':' notation
    IP=`arp -a | sed "s/ \(.\):/ 0\1:/" | sed "s/:\(.\):/:0\1:/g"|sed "s/:\(.\):/:0\1:/g"|sed "s/:\(.\)$/:0\1/"|grep $MAC`
    #echo "IP is $IP"
    
    IP=`echo $IP | cut -d "(" -f2 | cut -d ")" -f1`
    echo $IP
    

    Now, you have all you need to start up the vm's snapshot from the command line and connect to it via adb (using root). You can do it with this script :

    # script genymotion-start.sh
    VM=6a5d9245-b751-47aa-b38d-989c5f1a9cfb
    
    echo "VM is \"$VM\""
    VBoxManage snapshot $VM restore snap1 &
    VBoxHeadless -s $VM &
    
    IP=`./genymotion-detect-ip.sh`
    echo $IP
    
    #adb tcpip 5555
    adb connect $IP:5555
    
    #restart adb as root to allow powering it off
    #root mode is generally what we want from a headless emulator (to download emma files for instance)
    adb root
    adb connect $IP:5555
    

    And finally you can also use a script to shutdown the emulator properly :

    #script genymotion-stop.sh 
    IP=`./genymotion-detect-ip.sh`
    
    adb root
    adb connect $IP:5555
    adb shell reboot -p &
    

    This is still a lot of scripting but it works fine and controls the genymotion emulator in an handy way.

    Let's hope genymobile can make this eve easier in future releases.

提交回复
热议问题