Home | History | Annotate | Download | only in utils
      1 #!/bin/bash
      2 ###############################################################################
      3 # Copyright 2015 Google Inc.
      4 #
      5 # Use of this source code is governed by a BSD-style license that can be
      6 # found in the LICENSE file.
      7 ###############################################################################
      8 #
      9 # android_setup.sh: Sets environment variables used by other Android scripts.
     10 
     11 # Fail-fast if anything in the script fails.
     12 set -e
     13 
     14 IS_DEBUG="false"
     15 
     16 while (( "$#" )); do
     17   if [[ "$1" == "-C" ]]; then
     18     SKIA_OUT=$2
     19     shift
     20   elif [[ "$1" == "-i" || "$1" == "--resourcePath" ]]; then
     21     RESOURCE_PATH=$2
     22     APP_ARGS=("${APP_ARGS[@]}" "${1}" "${2}")
     23     shift
     24   elif [[ "$1" == "-s" ]]; then
     25     DEVICE_SERIAL="-s $2"
     26     shift
     27   elif [[ "$1" == "--logcat" ]]; then
     28     LOGCAT=1
     29   elif [[ "$1" == "--verbose" ]]; then
     30     VERBOSE="true"
     31   else
     32     APP_ARGS=("${APP_ARGS[@]}" "${1}")
     33   fi
     34   shift
     35 done
     36 
     37 function verbose {
     38   if [[ -n $VERBOSE ]]; then
     39     echo $@
     40   fi
     41 }
     42 
     43 function exportVar {
     44   NAME=$1
     45   VALUE=$2
     46   verbose export $NAME=\"$VALUE\"
     47   export $NAME="$VALUE"
     48 }
     49 
     50 function absPath {
     51   (cd $1; pwd)
     52 }
     53 
     54 UTIL_DIR=$(absPath "$(dirname "$BASH_SOURCE[0]}")")
     55 
     56 if [ -z "$ANDROID_SDK_ROOT" ]; then
     57   if ANDROID_SDK_ROOT="$(dirname $(which android))/.."; then
     58     exportVar ANDROID_SDK_ROOT $ANDROID_SDK_ROOT
     59   else
     60      echo "No ANDROID_SDK_ROOT set and can't auto detect it from location of android binary."
     61      exit 1
     62   fi
     63 fi
     64 
     65 if [ -z "$ANDROID_NDK_ROOT" ]; then
     66   if [ -d "${ANDROID_SDK_ROOT}/ndk-bundle" ]; then
     67     exportVar ANDROID_NDK_ROOT ${ANDROID_SDK_ROOT}/ndk-bundle
     68   else
     69      echo "No ANDROID_NDK_ROOT set and can't auto detect it from location of SDK."
     70      exit 1
     71   fi
     72 fi
     73 
     74 # adb_pull_if_needed(android_src, host_dst)
     75 adb_pull_if_needed() {
     76 
     77   # get adb location
     78   source $SCRIPT_DIR/utils/setup_adb.sh
     79 
     80   # read input params
     81   ANDROID_SRC="$1"
     82   HOST_DST="$2"
     83 
     84   if [ -f $HOST_DST ];
     85   then
     86     #get the MD5 for dst and src depending on OS and/or OS revision
     87     ANDROID_MD5_SUPPORT=`$ADB $DEVICE_SERIAL shell ls -ld /system/bin/md5`
     88     if [ "${ANDROID_MD5_SUPPORT:0:15}" != "/system/bin/md5" ]; then
     89       ANDROID_MD5=`$ADB $DEVICE_SERIAL shell md5 $ANDROID_DST`
     90     else
     91       ANDROID_MD5=`$ADB $DEVICE_SERIAL shell md5sum $ANDROID_DST`
     92     fi
     93     if [ $(uname) == "Darwin" ]; then
     94       HOST_MD5=`md5 -q $HOST_DST`
     95     else
     96       HOST_MD5=`md5sum $HOST_DST`
     97     fi
     98 
     99     if [ "${ANDROID_MD5:0:32}" != "${HOST_MD5:0:32}" ]; then
    100       echo -n "$HOST_DST "
    101       $ADB $DEVICE_SERIAL pull $ANDROID_SRC $HOST_DST
    102     fi
    103   else
    104     echo -n "$HOST_DST "
    105     $ADB $DEVICE_SERIAL pull $ANDROID_SRC $HOST_DST
    106   fi
    107 }
    108 
    109 # adb_push_if_needed(host_src, android_dst)
    110 adb_push_if_needed() {
    111 
    112   # get adb location
    113   source $SCRIPT_DIR/utils/setup_adb.sh
    114 
    115   # read input params
    116   local HOST_SRC="$1"
    117   local ANDROID_DST="$2"
    118 
    119   # disable crashing on failed commands since newer (N+) versions of Android
    120   # return an error when attempting to run ls on a directory or file that does
    121   # not exist.
    122   set +e
    123 
    124   ANDROID_LS=`$ADB $DEVICE_SERIAL shell ls -ld $ANDROID_DST`
    125   HOST_LS=`ls -ld $HOST_SRC`
    126   if [ "${ANDROID_LS:0:1}" == "d" -a "${HOST_LS:0:1}" == "-" ];
    127   then
    128     ANDROID_DST="${ANDROID_DST}/$(basename ${HOST_SRC})"
    129   fi
    130 
    131   ANDROID_LS=`$ADB $DEVICE_SERIAL shell ls -ld $ANDROID_DST 2> /dev/null`
    132   if [ "${ANDROID_LS:0:1}" == "-" ]; then
    133     #get the MD5 for dst and src depending on OS and/or OS revision
    134     ANDROID_MD5_SUPPORT=`$ADB $DEVICE_SERIAL shell ls -ld /system/bin/md5 2> /dev/null`
    135     if [ "${ANDROID_MD5_SUPPORT:0:1}" == "-" ]; then
    136       ANDROID_MD5=`$ADB $DEVICE_SERIAL shell md5 $ANDROID_DST`
    137     else
    138       ANDROID_MD5=`$ADB $DEVICE_SERIAL shell md5sum $ANDROID_DST`
    139     fi
    140 
    141     if [ $(uname) == "Darwin" ]; then
    142       HOST_MD5=`md5 -q $HOST_SRC`
    143     else
    144       HOST_MD5=`md5sum $HOST_SRC`
    145     fi
    146 
    147     if [ "${ANDROID_MD5:0:32}" != "${HOST_MD5:0:32}" ]; then
    148       echo -n "$ANDROID_DST "
    149       $ADB $DEVICE_SERIAL push $HOST_SRC $ANDROID_DST
    150     fi
    151   elif [ "${ANDROID_LS:0:1}" == "d" ]; then
    152     for FILE_ITEM in `ls $HOST_SRC`; do
    153       adb_push_if_needed "${HOST_SRC}/${FILE_ITEM}" "${ANDROID_DST}/${FILE_ITEM}"
    154     done
    155   else
    156     HOST_LS=`ls -ld $HOST_SRC`
    157     if [ "${HOST_LS:0:1}" == "d" ]; then
    158       $ADB $DEVICE_SERIAL shell mkdir -p $ANDROID_DST
    159       adb_push_if_needed $HOST_SRC $ANDROID_DST
    160     else
    161       echo -n "$ANDROID_DST "
    162       $ADB $DEVICE_SERIAL shell mkdir -p "$(dirname "$ANDROID_DST")"
    163       $ADB $DEVICE_SERIAL push $HOST_SRC $ANDROID_DST
    164     fi
    165   fi
    166 
    167   # turn error checking back on
    168   set -e
    169 }
    170