| #!/bin/bash -e |
| |
| # Copyright 2012, The Android Open Source Project |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| # Creates and builds projects from a RenderScript testcase and a set of Java templates |
| |
| HELP=no |
| VERBOSE=no |
| MINSDK=1 |
| TARGET=1 |
| NAME="" |
| OUT_DIR= |
| ACTIVITY="" |
| PACKAGE="" |
| SDK="" |
| TESTCASE_PATH="" |
| DRIVER="" |
| |
| check_param () |
| { |
| if [ -z "$2" ]; then |
| echo "ERROR: Missing parameter after option '$1'" |
| exit 1 |
| fi |
| } |
| |
| check_required_param() |
| { |
| if [ -z "$1" ]; then |
| echo "ERROR: Missing required parameter $2" |
| exit 1 |
| fi |
| } |
| |
| run () |
| { |
| if [ "$VERBOSE" = "yes" ] ; then |
| echo "## COMMAND: $@" |
| fi |
| $@ 2>&1 |
| } |
| |
| process_template() |
| { |
| src=$1 |
| dest=$2 |
| sed -e "s/%ACTIVITY%/$3/g" -e "s/%PACKAGE%/$4/g" -e "s/%TESTCASE%/$5/g" -e "s/%MINSDK%/$6/g" < $src > $dest; |
| echo "processed $src ==> $dest" |
| } |
| |
| while [ -n "$1" ]; do |
| opt="$1" |
| case "$opt" in |
| --help|-h|-\?) |
| HELP=yes |
| ;; |
| --verbose|-v) |
| VERBOSE=yes |
| ;; |
| --sdk) |
| check_param $1 $2 |
| SDK="$2" |
| ;; |
| --name) |
| check_param $1 $2 |
| NAME="$2" |
| ;; |
| --out) |
| check_param $1 $2 |
| OUT_DIR="$2" |
| ;; |
| --activity) |
| check_param $1 $2 |
| ACTIVITY="$2" |
| ;; |
| --package) |
| check_param $1 $2 |
| PACKAGE="$2" |
| ;; |
| --minsdk) |
| check_param $1 $2 |
| MINSDK="$2" |
| ;; |
| --target) |
| check_param $1 $2 |
| TARGET="$2" |
| ;; |
| --testcase) |
| check_param $1 $2 |
| TESTCASE_PATH="$2" |
| ;; |
| --driver) |
| check_param $1 $2 |
| DRIVER="${2%/}" |
| ;; |
| -*) # unknown options |
| echo "ERROR: Unknown option '$opt', use --help for list of valid ones." |
| exit 1 |
| ;; |
| *) # Simply record parameter |
| if [ -z "$PARAMETERS" ] ; then |
| PARAMETERS="$opt" |
| else |
| PARAMETERS="$PARAMETERS $opt" |
| fi |
| ;; |
| esac |
| shift |
| done |
| |
| if [ "$HELP" = "yes" ] ; then |
| echo "Usage: $PROGNAME [options]" |
| echo "" |
| echo "Build a test project from a RS testcase and a java driver template." |
| echo "" |
| echo "Required Parameters:" |
| echo " --sdk Location of Android SDK installation" |
| echo " --out <path> Location of your project directory" |
| echo " --testcase <name> The .rs testcase file with which to build the project" |
| echo " --driver <name> The java template directory with which to build the project" |
| echo "" |
| echo "Optional Parameters (reasonable defaults are used if not specified)" |
| echo " --activity <name> Name for your default Activity class" |
| echo " --package <name> Package namespace for your project" |
| echo " --target <name> Android build target. Execute 'android list targets' to list available targets and their ID's." |
| echo " --minsdk <name> minSdkVersion attribute to embed in AndroidManifest.xml of test project." |
| echo " --help|-h|-? Print this help" |
| echo " --verbose|-v Enable verbose mode" |
| echo "" |
| exit 0 |
| fi |
| |
| # Verify required parameters are non-empty |
| check_required_param "$SDK" "--sdk" |
| check_required_param "$OUT_DIR" "--out" |
| check_required_param "$TESTCASE_PATH" "--testcase" |
| check_required_param "$DRIVER" "--driver" |
| |
| # Compute name of testcase |
| TESTCASE=`basename $TESTCASE_PATH .rs` |
| |
| # Compute activity, appname, and java package, if not specified via parameters |
| if [ -z "$ACTIVITY" ]; then |
| ACTIVITY="$TESTCASE"; |
| fi |
| |
| if [ -z "$NAME" ]; then |
| NAME="$ACTIVITY" |
| fi |
| |
| if [ -z "$PACKAGE" ]; then |
| PACKAGE=com.android.test.rsdebug.$TESTCASE |
| fi |
| |
| # Create the project |
| run $SDK/tools/android create project --target $TARGET --name $NAME --path $OUT_DIR --activity $ACTIVITY --package $PACKAGE |
| |
| if [ $? != 0 ] ; then |
| echo "ERROR: Could not create Android project." |
| echo " Check parameters and try again." |
| exit 1 |
| fi |
| |
| # Compute name of destination source directory |
| DEST_SRC_DIR=$OUT_DIR/src/`echo $PACKAGE | sed 's/\./\//g'` |
| |
| if [ ! -d "$DRIVER" ]; then |
| # If driver directory does not exist, try to fix it up by searching the |
| # testcase directory as well |
| DRIVER=`dirname $TESTCASE_PATH`/"$DRIVER" |
| if [ ! -d $DRIVER ]; then |
| echo "unable to find driver in $DRIVER, please check --driver" |
| exit 1; |
| fi |
| fi |
| |
| echo "Copying driver template from $DRIVER -> $DEST_SRC_DIR" |
| if [ ! -d "$DEST_SRC_DIR" ]; then |
| echo "Error, destination directory does not exist: $DEST_SRC_DIR"; |
| exit 1; |
| fi |
| echo "Performing template substitutions:" |
| echo " %ACTIVITY% ==> $ACTIVITY" |
| echo " %PACKAGE% ==> $PACKAGE" |
| echo " %TESTCASE% ==> $TESTCASE" |
| echo " %MINSDK% ==> $MINSDK" |
| SUBST_PARAMS="$ACTIVITY $PACKAGE $TESTCASE $MINSDK" |
| |
| # If it exists, use contents of driver-common directory to seed |
| # the testcase project |
| DRIVER_COMMON="`dirname $TESTCASE_PATH`/driver-common" |
| if [ -d $DRIVER_COMMON ]; then |
| echo "Found common driver directory: $DRIVER_COMMON" |
| ls $DRIVER_COMMON/SRC/*.java.template | while read src; do |
| SRC_BASENAME=`basename $src .java.template`; |
| dest=$DEST_SRC_DIR/`echo $SRC_BASENAME | sed "s/ACTIVITY/$ACTIVITY/g"`.java |
| process_template $src $dest $SUBST_PARAMS |
| done; |
| |
| # Copy AndroidManifest.xml |
| COMMON_MANIFEST="$DRIVER_COMMON/AndroidManifest.xml" |
| if [ -e $COMMON_MANIFEST ]; then |
| process_template $COMMON_MANIFEST $OUT_DIR/AndroidManifest.xml $SUBST_PARAMS |
| fi |
| fi |
| |
| # Copy Java source to project directory. |
| ls $DRIVER/*.java.template | while read src; do |
| SRC_BASENAME=`basename $src .java.template` |
| dest=$DEST_SRC_DIR/`echo $SRC_BASENAME | sed "s/ACTIVITY/$ACTIVITY/g"`.java |
| process_template $src $dest $SUBST_PARAMS |
| done; |
| |
| # Copy AndroidManifest.xml override, if it exists |
| OVERRIDE_MANIFEST="$DRIVER/AndroidManifest.xml" |
| if [ -e $OVERRIDE_MANIFEST ]; then |
| process_template $OVERRIDE_MANIFEST $OUT_DIR/AndroidManifest.xml $SUBST_PARAMS |
| fi |
| |
| # Copy RS testcase to project directory. |
| TESTCASE_DEST=$DEST_SRC_DIR/`basename $TESTCASE_PATH` |
| process_template $TESTCASE_PATH $TESTCASE_DEST $SUBST_PARAMS |
| |
| # Buid signed and aligned apk |
| cd $OUT_DIR |
| run ant clean debug install |
| |
| if [ $? != 0 ] ; then |
| echo "ERROR: Apk build and install failed" |
| exit 1 |
| fi |
| |
| exit 0 |