1cddda72410c992a12db61cef26713b498e31fea4Thanh Le#!/bin/bash -e 2cddda72410c992a12db61cef26713b498e31fea4Thanh Le 3cddda72410c992a12db61cef26713b498e31fea4Thanh Le# Copyright 2012, The Android Open Source Project 4cddda72410c992a12db61cef26713b498e31fea4Thanh Le# 5cddda72410c992a12db61cef26713b498e31fea4Thanh Le# Licensed under the Apache License, Version 2.0 (the "License"); 6cddda72410c992a12db61cef26713b498e31fea4Thanh Le# you may not use this file except in compliance with the License. 7cddda72410c992a12db61cef26713b498e31fea4Thanh Le# You may obtain a copy of the License at 8cddda72410c992a12db61cef26713b498e31fea4Thanh Le# 9cddda72410c992a12db61cef26713b498e31fea4Thanh Le# http://www.apache.org/licenses/LICENSE-2.0 10cddda72410c992a12db61cef26713b498e31fea4Thanh Le# 11cddda72410c992a12db61cef26713b498e31fea4Thanh Le# Unless required by applicable law or agreed to in writing, software 12cddda72410c992a12db61cef26713b498e31fea4Thanh Le# distributed under the License is distributed on an "AS IS" BASIS, 13cddda72410c992a12db61cef26713b498e31fea4Thanh Le# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14cddda72410c992a12db61cef26713b498e31fea4Thanh Le# See the License for the specific language governing permissions and 15cddda72410c992a12db61cef26713b498e31fea4Thanh Le# limitations under the License. 16cddda72410c992a12db61cef26713b498e31fea4Thanh Le 17cddda72410c992a12db61cef26713b498e31fea4Thanh Le# Creates and builds projects from a RenderScript testcase and a set of Java templates 18cddda72410c992a12db61cef26713b498e31fea4Thanh Le 19cddda72410c992a12db61cef26713b498e31fea4Thanh LeHELP=no 205838b1a067427865c3ec8cc33a5dfa64ba05407fKevin JinVERBOSE=no 2107faa170442ca86bb21e6076ff3309615be3b9a8Kevin JinMINSDK=1 22cddda72410c992a12db61cef26713b498e31fea4Thanh LeTARGET=1 23cddda72410c992a12db61cef26713b498e31fea4Thanh LeNAME="" 2474676fdd3c8a9e599eddd13bea56898674d9916aKevin JinOUT_DIR= 25f50519233078e65a056cff49d7b4989d57c3e750Kevin JinACTIVITY="" 2674676fdd3c8a9e599eddd13bea56898674d9916aKevin JinPACKAGE="" 27da42ba49053dd39b7a19531cb72525d14f285c9bKevin JinSDK="" 285838b1a067427865c3ec8cc33a5dfa64ba05407fKevin JinTESTCASE_PATH="" 29115eb39036a7a4e500dc94b57975a5693861f654Tony WickhamDRIVER="" 3007faa170442ca86bb21e6076ff3309615be3b9a8Kevin Jin 310d7b67b43f83536708a6ae0330e739744049a48eKevin Jincheck_param () 32cddda72410c992a12db61cef26713b498e31fea4Thanh Le{ 3339b609194aea07e7f1d8ead084d48d1171198f02Kevin Jin if [ -z "$2" ]; then 34cddda72410c992a12db61cef26713b498e31fea4Thanh Le echo "ERROR: Missing parameter after option '$1'" 3574676fdd3c8a9e599eddd13bea56898674d9916aKevin Jin exit 1 3674676fdd3c8a9e599eddd13bea56898674d9916aKevin Jin fi 3774676fdd3c8a9e599eddd13bea56898674d9916aKevin Jin} 38f50519233078e65a056cff49d7b4989d57c3e750Kevin Jin 39cddda72410c992a12db61cef26713b498e31fea4Thanh Lecheck_required_param() 40cddda72410c992a12db61cef26713b498e31fea4Thanh Le{ 4174676fdd3c8a9e599eddd13bea56898674d9916aKevin Jin if [ -z "$1" ]; then 4274676fdd3c8a9e599eddd13bea56898674d9916aKevin Jin echo "ERROR: Missing required parameter $2" 43f50519233078e65a056cff49d7b4989d57c3e750Kevin Jin exit 1 44cddda72410c992a12db61cef26713b498e31fea4Thanh Le fi 45cddda72410c992a12db61cef26713b498e31fea4Thanh Le} 46cddda72410c992a12db61cef26713b498e31fea4Thanh Le 4774676fdd3c8a9e599eddd13bea56898674d9916aKevin Jinrun () 4874676fdd3c8a9e599eddd13bea56898674d9916aKevin Jin{ 49c91cb19438c6ef8ecd794664bf1f879725866bb9Kevin Jin if [ "$VERBOSE" = "yes" ] ; then 50115eb39036a7a4e500dc94b57975a5693861f654Tony Wickham echo "## COMMAND: $@" 5121a0001e2426644dd68e6140b5873ebaeafcc3dcKevin Jin fi 5274676fdd3c8a9e599eddd13bea56898674d9916aKevin Jin $@ 2>&1 5374676fdd3c8a9e599eddd13bea56898674d9916aKevin Jin} 5474676fdd3c8a9e599eddd13bea56898674d9916aKevin Jin 5574676fdd3c8a9e599eddd13bea56898674d9916aKevin Jinprocess_template() 5674676fdd3c8a9e599eddd13bea56898674d9916aKevin Jin{ 5774676fdd3c8a9e599eddd13bea56898674d9916aKevin Jin src=$1 5874676fdd3c8a9e599eddd13bea56898674d9916aKevin Jin dest=$2 5921a0001e2426644dd68e6140b5873ebaeafcc3dcKevin Jin sed -e "s/%ACTIVITY%/$3/g" -e "s/%PACKAGE%/$4/g" -e "s/%TESTCASE%/$5/g" -e "s/%MINSDK%/$6/g" < $src > $dest; 6021a0001e2426644dd68e6140b5873ebaeafcc3dcKevin Jin echo "processed $src ==> $dest" 61da42ba49053dd39b7a19531cb72525d14f285c9bKevin Jin} 62da42ba49053dd39b7a19531cb72525d14f285c9bKevin Jin 63da42ba49053dd39b7a19531cb72525d14f285c9bKevin Jinwhile [ -n "$1" ]; do 64da42ba49053dd39b7a19531cb72525d14f285c9bKevin Jin opt="$1" 65da42ba49053dd39b7a19531cb72525d14f285c9bKevin Jin case "$opt" in 66da42ba49053dd39b7a19531cb72525d14f285c9bKevin Jin --help|-h|-\?) 67da42ba49053dd39b7a19531cb72525d14f285c9bKevin Jin HELP=yes 68da42ba49053dd39b7a19531cb72525d14f285c9bKevin Jin ;; 69da42ba49053dd39b7a19531cb72525d14f285c9bKevin Jin --verbose|-v) 70da42ba49053dd39b7a19531cb72525d14f285c9bKevin Jin VERBOSE=yes 71da42ba49053dd39b7a19531cb72525d14f285c9bKevin Jin ;; 72da42ba49053dd39b7a19531cb72525d14f285c9bKevin Jin --sdk) 73da42ba49053dd39b7a19531cb72525d14f285c9bKevin Jin check_param $1 $2 74da42ba49053dd39b7a19531cb72525d14f285c9bKevin Jin SDK="$2" 75da42ba49053dd39b7a19531cb72525d14f285c9bKevin Jin ;; 76da42ba49053dd39b7a19531cb72525d14f285c9bKevin Jin --name) 77c91cb19438c6ef8ecd794664bf1f879725866bb9Kevin Jin check_param $1 $2 78da42ba49053dd39b7a19531cb72525d14f285c9bKevin Jin NAME="$2" 79da42ba49053dd39b7a19531cb72525d14f285c9bKevin Jin ;; 80da42ba49053dd39b7a19531cb72525d14f285c9bKevin Jin --out) 81da42ba49053dd39b7a19531cb72525d14f285c9bKevin Jin check_param $1 $2 82da42ba49053dd39b7a19531cb72525d14f285c9bKevin Jin OUT_DIR="$2" 83c91cb19438c6ef8ecd794664bf1f879725866bb9Kevin Jin ;; 84115eb39036a7a4e500dc94b57975a5693861f654Tony Wickham --activity) 85cddda72410c992a12db61cef26713b498e31fea4Thanh Le check_param $1 $2 86cddda72410c992a12db61cef26713b498e31fea4Thanh Le ACTIVITY="$2" 87da42ba49053dd39b7a19531cb72525d14f285c9bKevin Jin ;; 88da42ba49053dd39b7a19531cb72525d14f285c9bKevin Jin --package) 89da42ba49053dd39b7a19531cb72525d14f285c9bKevin Jin check_param $1 $2 90da42ba49053dd39b7a19531cb72525d14f285c9bKevin Jin PACKAGE="$2" 91da42ba49053dd39b7a19531cb72525d14f285c9bKevin Jin ;; 92da42ba49053dd39b7a19531cb72525d14f285c9bKevin Jin --minsdk) 93da42ba49053dd39b7a19531cb72525d14f285c9bKevin Jin check_param $1 $2 94da42ba49053dd39b7a19531cb72525d14f285c9bKevin Jin MINSDK="$2" 95da42ba49053dd39b7a19531cb72525d14f285c9bKevin Jin ;; 96da42ba49053dd39b7a19531cb72525d14f285c9bKevin Jin --target) 97da42ba49053dd39b7a19531cb72525d14f285c9bKevin Jin check_param $1 $2 985838b1a067427865c3ec8cc33a5dfa64ba05407fKevin Jin TARGET="$2" 995838b1a067427865c3ec8cc33a5dfa64ba05407fKevin Jin ;; 1005838b1a067427865c3ec8cc33a5dfa64ba05407fKevin Jin --testcase) 101da42ba49053dd39b7a19531cb72525d14f285c9bKevin Jin check_param $1 $2 102da42ba49053dd39b7a19531cb72525d14f285c9bKevin Jin TESTCASE_PATH="$2" 1035838b1a067427865c3ec8cc33a5dfa64ba05407fKevin Jin ;; 1045838b1a067427865c3ec8cc33a5dfa64ba05407fKevin Jin --driver) 1055838b1a067427865c3ec8cc33a5dfa64ba05407fKevin Jin check_param $1 $2 1065838b1a067427865c3ec8cc33a5dfa64ba05407fKevin Jin DRIVER="${2%/}" 1075838b1a067427865c3ec8cc33a5dfa64ba05407fKevin Jin ;; 1085838b1a067427865c3ec8cc33a5dfa64ba05407fKevin Jin -*) # unknown options 10917342a5115d7575d44a99fed9c7032e3ab316dccKevin Jin echo "ERROR: Unknown option '$opt', use --help for list of valid ones." 1105838b1a067427865c3ec8cc33a5dfa64ba05407fKevin Jin exit 1 1115838b1a067427865c3ec8cc33a5dfa64ba05407fKevin Jin ;; 1125838b1a067427865c3ec8cc33a5dfa64ba05407fKevin Jin *) # Simply record parameter 11370e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin if [ -z "$PARAMETERS" ] ; then 114f50519233078e65a056cff49d7b4989d57c3e750Kevin Jin PARAMETERS="$opt" 11570e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin else 11670e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin PARAMETERS="$PARAMETERS $opt" 117cddda72410c992a12db61cef26713b498e31fea4Thanh Le fi 118 ;; 119 esac 120 shift 121done 122 123if [ "$HELP" = "yes" ] ; then 124 echo "Usage: $PROGNAME [options]" 125 echo "" 126 echo "Build a test project from a RS testcase and a java driver template." 127 echo "" 128 echo "Required Parameters:" 129 echo " --sdk Location of Android SDK installation" 130 echo " --out <path> Location of your project directory" 131 echo " --testcase <name> The .rs testcase file with which to build the project" 132 echo " --driver <name> The java template directory with which to build the project" 133 echo "" 134 echo "Optional Parameters (reasonable defaults are used if not specified)" 135 echo " --activity <name> Name for your default Activity class" 136 echo " --package <name> Package namespace for your project" 137 echo " --target <name> Android build target. Execute 'android list targets' to list available targets and their ID's." 138 echo " --minsdk <name> minSdkVersion attribute to embed in AndroidManifest.xml of test project." 139 echo " --help|-h|-? Print this help" 140 echo " --verbose|-v Enable verbose mode" 141 echo "" 142 exit 0 143fi 144 145# Verify required parameters are non-empty 146check_required_param "$SDK" "--sdk" 147check_required_param "$OUT_DIR" "--out" 148check_required_param "$TESTCASE_PATH" "--testcase" 149check_required_param "$DRIVER" "--driver" 150 151# Compute name of testcase 152TESTCASE=`basename $TESTCASE_PATH .rs` 153 154# Compute activity, appname, and java package, if not specified via parameters 155if [ -z "$ACTIVITY" ]; then 156 ACTIVITY="$TESTCASE"; 157fi 158 159if [ -z "$NAME" ]; then 160 NAME="$ACTIVITY" 161fi 162 163if [ -z "$PACKAGE" ]; then 164 PACKAGE=com.android.test.rsdebug.$TESTCASE 165fi 166 167# Create the project 168run $SDK/tools/android create project --target $TARGET --name $NAME --path $OUT_DIR --activity $ACTIVITY --package $PACKAGE 169 170if [ $? != 0 ] ; then 171 echo "ERROR: Could not create Android project." 172 echo " Check parameters and try again." 173 exit 1 174fi 175 176# Compute name of destination source directory 177DEST_SRC_DIR=$OUT_DIR/src/`echo $PACKAGE | sed 's/\./\//g'` 178 179if [ ! -d "$DRIVER" ]; then 180 # If driver directory does not exist, try to fix it up by searching the 181 # testcase directory as well 182 DRIVER=`dirname $TESTCASE_PATH`/"$DRIVER" 183 if [ ! -d $DRIVER ]; then 184 echo "unable to find driver in $DRIVER, please check --driver" 185 exit 1; 186 fi 187fi 188 189echo "Copying driver template from $DRIVER -> $DEST_SRC_DIR" 190if [ ! -d "$DEST_SRC_DIR" ]; then 191 echo "Error, destination directory does not exist: $DEST_SRC_DIR"; 192 exit 1; 193fi 194echo "Performing template substitutions:" 195echo " %ACTIVITY% ==> $ACTIVITY" 196echo " %PACKAGE% ==> $PACKAGE" 197echo " %TESTCASE% ==> $TESTCASE" 198echo " %MINSDK% ==> $MINSDK" 199SUBST_PARAMS="$ACTIVITY $PACKAGE $TESTCASE $MINSDK" 200 201# If it exists, use contents of driver-common directory to seed 202# the testcase project 203DRIVER_COMMON="`dirname $TESTCASE_PATH`/driver-common" 204if [ -d $DRIVER_COMMON ]; then 205 echo "Found common driver directory: $DRIVER_COMMON" 206 ls $DRIVER_COMMON/SRC/*.java.template | while read src; do 207 SRC_BASENAME=`basename $src .java.template`; 208 dest=$DEST_SRC_DIR/`echo $SRC_BASENAME | sed "s/ACTIVITY/$ACTIVITY/g"`.java 209 process_template $src $dest $SUBST_PARAMS 210 done; 211 212 # Copy AndroidManifest.xml 213 COMMON_MANIFEST="$DRIVER_COMMON/AndroidManifest.xml" 214 if [ -e $COMMON_MANIFEST ]; then 215 process_template $COMMON_MANIFEST $OUT_DIR/AndroidManifest.xml $SUBST_PARAMS 216 fi 217fi 218 219# Copy Java source to project directory. 220ls $DRIVER/*.java.template | while read src; do 221 SRC_BASENAME=`basename $src .java.template` 222 dest=$DEST_SRC_DIR/`echo $SRC_BASENAME | sed "s/ACTIVITY/$ACTIVITY/g"`.java 223 process_template $src $dest $SUBST_PARAMS 224done; 225 226# Copy AndroidManifest.xml override, if it exists 227OVERRIDE_MANIFEST="$DRIVER/AndroidManifest.xml" 228if [ -e $OVERRIDE_MANIFEST ]; then 229 process_template $OVERRIDE_MANIFEST $OUT_DIR/AndroidManifest.xml $SUBST_PARAMS 230fi 231 232# Copy RS testcase to project directory. 233TESTCASE_DEST=$DEST_SRC_DIR/`basename $TESTCASE_PATH` 234process_template $TESTCASE_PATH $TESTCASE_DEST $SUBST_PARAMS 235 236# Buid signed and aligned apk 237cd $OUT_DIR 238run ant clean debug install 239 240if [ $? != 0 ] ; then 241 echo "ERROR: Apk build and install failed" 242 exit 1 243fi 244 245exit 0 246