#! /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 [ -n "$1" ] && [ "$1" == "-h" ] then echo 'usage: create path package activity' echo "Make sure the Android SDK tools folder is in your PATH!" 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 { (cd "$BUILD_PATH"/bin/templates/cordova/ApplicationInfo && javac ApplicationInfo.java && jar -cfe ../appinfo.jar ApplicationInfo ApplicationInfo.class ) } function on_error { echo "An error occurred. Deleting project..." [ -d "$PROJECT_PATH" ] && rm -rf "$PROJECT_PATH" } 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 on_error ERR trap on_exit EXIT 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 | awk '{gsub(" API level:", "");print}' | cut -f 2 -d ' ') # 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://apache.osuosl.org/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 (cd "$BUILD_PATH"/framework && ant jar &> /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 emulate/debug/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/debug "$PROJECT_PATH"/cordova/debug 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/emulate "$PROJECT_PATH"/cordova/emulate cp "$BUILD_PATH"/bin/templates/cordova/BOOM "$PROJECT_PATH"/cordova/BOOM