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. 12set -e 13 14IS_DEBUG="false" 15 16while (( "$#" )); 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 35done 36 37function verbose { 38 if [[ -n $VERBOSE ]]; then 39 echo $@ 40 fi 41} 42 43function exportVar { 44 NAME=$1 45 VALUE=$2 46 verbose export $NAME=\"$VALUE\" 47 export $NAME="$VALUE" 48} 49 50function absPath { 51 (cd $1; pwd) 52} 53 54UTIL_DIR=$(absPath "$(dirname "$BASH_SOURCE[0]}")") 55 56if [ -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 63fi 64 65if [ -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 72fi 73 74# adb_pull_if_needed(android_src, host_dst) 75adb_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) 110adb_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