#! /bin/bash # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you 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. # # create a cordova/android project # # USAGE # ./create [path package activity] # set -e if [ -z "$1" ] || [ "$1" == "-h" ] then echo "Usage: $0 " echo "Make sure the Android SDK tools folder is in your PATH!" echo " : Path to your new Cordova iOS project" echo " : Package name, following reverse-domain style convention" echo " : Project name" exit 0 fi BUILD_PATH="$( cd "$( dirname "$0" )/.." && pwd )" VERSION=$(cat "$BUILD_PATH"/VERSION) PROJECT_PATH="${1:-'./example'}" PACKAGE=${2:-"org.apache.cordova.example"} ACTIVITY=${3:-"cordovaExample"} # clobber any existing example if [ -d "$PROJECT_PATH" ] then echo "Project already exists! Delete and recreate" exit 1 fi # cleanup after exit and/or on error function on_exit { # [ -f "$BUILD_PATH"/framework/libs/commons-codec-1.6.jar ] && rm "$BUILD_PATH"/framework/libs/commons-codec-1.6.jar # [ -d "$BUILD_PATH"/framework/libs ] && rmdir "$BUILD_PATH"/framework/libs if [ -f "$BUILD_PATH"/framework/assets/www/cordova-$VERSION.js ] then rm "$BUILD_PATH"/framework/assets/www/cordova-$VERSION.js fi if [ -f "$BUILD_PATH"/framework/cordova-$VERSION.jar ] then rm "$BUILD_PATH"/framework/cordova-$VERSION.jar fi } function createAppInfoJar { pushd "$BUILD_PATH"/bin/templates/cordova/ApplicationInfo > /dev/null javac ApplicationInfo.java jar -cfe ../appinfo.jar ApplicationInfo ApplicationInfo.class popd > /dev/null } function on_error { echo "An unexpected error occurred: $previous_command exited with $?" echo "Deleting project..." [ -d "$PROJECT_PATH" ] && rm -rf "$PROJECT_PATH" exit 1 } function replace { local pattern=$1 local filename=$2 # Mac OS X requires -i argument if [[ "$OSTYPE" =~ "darwin" ]] then /usr/bin/sed -i '' -e $pattern "$filename" elif [[ "$OSTYPE" =~ "linux" ]] then /bin/sed -i -e $pattern "$filename" fi } # we do not want the script to silently fail trap 'previous_command=$this_command; this_command=$BASH_COMMAND' DEBUG trap on_error ERR trap on_exit EXIT ANDROID_BIN="${ANDROID_BIN:=$( which android )}" PACKAGE_AS_PATH=$(echo $PACKAGE | sed 's/\./\//g') ACTIVITY_PATH="$PROJECT_PATH"/src/$PACKAGE_AS_PATH/$ACTIVITY.java MANIFEST_PATH="$PROJECT_PATH"/AndroidManifest.xml TARGET=$("$ANDROID_BIN" list targets | grep id: | tail -1 | cut -f 2 -d ' ' ) API_LEVEL=$("$ANDROID_BIN" list target | grep "API level:" | tail -n 1 | cut -f 2 -d ':' | tr -d ' ') # check that build targets exist if [ -z "$TARGET" ] || [ -z "$API_LEVEL" ] then echo "No Android Targets are installed. Please install at least one via the android SDK" exit 1 fi # if this a distribution release no need to build a jar if [ ! -e "$BUILD_PATH"/cordova-$VERSION.jar ] && [ -d "$BUILD_PATH"/framework ] then # update the cordova-android framework for the desired target "$ANDROID_BIN" update project --target $TARGET --path "$BUILD_PATH"/framework &> /dev/null if [ ! -e "$BUILD_PATH"/framework/libs/commons-codec-1.7.jar ]; then # Use curl to get the jar (TODO: Support Apache Mirrors) curl -OL http://archive.apache.org/dist/commons/codec/binaries/commons-codec-1.7-bin.zip &> /dev/null unzip commons-codec-1.7-bin.zip &> /dev/null mkdir -p "$BUILD_PATH"/framework/libs cp commons-codec-1.7/commons-codec-1.7.jar "$BUILD_PATH"/framework/libs # cleanup yo rm commons-codec-1.7-bin.zip && rm -rf commons-codec-1.7 fi # compile cordova.js and cordova.jar pushd "$BUILD_PATH"/framework > /dev/null ant jar > /dev/null popd > /dev/null fi # create new android project "$ANDROID_BIN" create project --target $TARGET --path "$PROJECT_PATH" --package $PACKAGE --activity $ACTIVITY &> /dev/null # copy project template cp -r "$BUILD_PATH"/bin/templates/project/assets "$PROJECT_PATH" cp -r "$BUILD_PATH"/bin/templates/project/res "$PROJECT_PATH" # copy cordova.js, cordova.jar and res/xml if [ -d "$BUILD_PATH"/framework ] then cp -r "$BUILD_PATH"/framework/res/xml "$PROJECT_PATH"/res cp "$BUILD_PATH"/framework/assets/www/cordova-$VERSION.js "$PROJECT_PATH"/assets/www/cordova-$VERSION.js cp "$BUILD_PATH"/framework/cordova-$VERSION.jar "$PROJECT_PATH"/libs/cordova-$VERSION.jar else cp -r "$BUILD_PATH"/xml "$PROJECT_PATH"/res/xml cp "$BUILD_PATH"/cordova-$VERSION.js "$PROJECT_PATH"/assets/www/cordova-$VERSION.js cp "$BUILD_PATH"/cordova-$VERSION.jar "$PROJECT_PATH"/libs/cordova-$VERSION.jar fi # interpolate the activity name and package cp "$BUILD_PATH"/bin/templates/project/Activity.java "$ACTIVITY_PATH" replace "s/__ACTIVITY__/${ACTIVITY}/g" "$ACTIVITY_PATH" replace "s/__ID__/${PACKAGE}/g" "$ACTIVITY_PATH" cp "$BUILD_PATH"/bin/templates/project/AndroidManifest.xml "$MANIFEST_PATH" replace "s/__ACTIVITY__/${ACTIVITY}/g" "$MANIFEST_PATH" replace "s/__PACKAGE__/${PACKAGE}/g" "$MANIFEST_PATH" replace "s/__APILEVEL__/${API_LEVEL}/g" "$MANIFEST_PATH" # creating cordova folder and copying run/build/log/launch scripts mkdir "$PROJECT_PATH"/cordova createAppInfoJar cp "$BUILD_PATH"/bin/templates/cordova/appinfo.jar "$PROJECT_PATH"/cordova/appinfo.jar cp "$BUILD_PATH"/bin/templates/cordova/cordova "$PROJECT_PATH"/cordova/cordova cp "$BUILD_PATH"/bin/templates/cordova/build "$PROJECT_PATH"/cordova/build cp "$BUILD_PATH"/bin/templates/cordova/release "$PROJECT_PATH"/cordova/release cp "$BUILD_PATH"/bin/templates/cordova/clean "$PROJECT_PATH"/cordova/clean cp "$BUILD_PATH"/bin/templates/cordova/log "$PROJECT_PATH"/cordova/log cp "$BUILD_PATH"/bin/templates/cordova/run "$PROJECT_PATH"/cordova/run