#! /bin/sh # 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 on_error { echo "An error occured. 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 = 'darwin11' ] then sed -i '' -e $pattern $filename elif [ $OSTYPE = 'linux-gnu' ] then 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 ' ' ) # 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.6.jar ]; then # Use curl to get the jar (TODO: Support Apache Mirrors) curl -OL http://mirror.symnds.com/software/Apache//commons/codec/binaries/commons-codec-1.6-bin.zip &> /dev/null unzip commons-codec-1.6-bin.zip &> /dev/null mkdir -p $BUILD_PATH/framework/libs cp commons-codec-1.6/commons-codec-1.6.jar $BUILD_PATH/framework/libs # cleanup yo rm commons-codec-1.6-bin.zip && rm -rf commons-codec-1.6 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 # creating cordova folder and copying emulate/debug/log/launch scripts mkdir $PROJECT_PATH/cordova 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