Return-Path: X-Original-To: apmail-cordova-commits-archive@www.apache.org Delivered-To: apmail-cordova-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id B487610636 for ; Mon, 26 Aug 2013 21:50:21 +0000 (UTC) Received: (qmail 6053 invoked by uid 500); 26 Aug 2013 21:50:21 -0000 Delivered-To: apmail-cordova-commits-archive@cordova.apache.org Received: (qmail 5972 invoked by uid 500); 26 Aug 2013 21:50:21 -0000 Mailing-List: contact commits-help@cordova.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@cordova.apache.org Delivered-To: mailing list commits@cordova.apache.org Received: (qmail 5959 invoked by uid 99); 26 Aug 2013 21:50:20 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 26 Aug 2013 21:50:20 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id 6B9D28C5DF4; Mon, 26 Aug 2013 21:50:20 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: bennmapes@apache.org To: commits@cordova.apache.org Date: Mon, 26 Aug 2013 21:50:21 -0000 Message-Id: In-Reply-To: References: X-Mailer: ASF-Git Admin Mailer Subject: [2/2] android commit: [CB-3542] rewrote cli tooling scripts in node [CB-3542] rewrote cli tooling scripts in node Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/1bd49009 Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/1bd49009 Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/1bd49009 Branch: refs/heads/master Commit: 1bd490098127543cf89b02735ea29757a11aab0c Parents: e6812f1 Author: Benn Mapes Authored: Mon Aug 12 17:07:23 2013 -0700 Committer: Benn Mapes Committed: Mon Aug 26 14:45:28 2013 -0700 ---------------------------------------------------------------------- VERSION | 2 +- bin/check_reqs | 60 +- bin/check_reqs.bat | 8 +- bin/check_reqs.js | 102 ---- bin/create | 191 +----- bin/create.bat | 46 +- bin/create.js | 214 ------- bin/lib/check_reqs.js | 85 +++ bin/lib/create.js | 265 ++++++++ bin/package.json | 32 + bin/templates/cordova/build | 70 +-- bin/templates/cordova/build.bat | 10 +- bin/templates/cordova/clean | 54 +- bin/templates/cordova/clean.bat | 10 +- bin/templates/cordova/cordova.bat | 31 - bin/templates/cordova/lib/build.js | 89 +++ bin/templates/cordova/lib/clean.js | 43 ++ bin/templates/cordova/lib/cordova.js | 612 ------------------- bin/templates/cordova/lib/device.js | 101 +++ bin/templates/cordova/lib/emulator.js | 342 +++++++++++ bin/templates/cordova/lib/install-device | 83 ++- bin/templates/cordova/lib/install-device.bat | 13 +- bin/templates/cordova/lib/install-emulator | 84 ++- bin/templates/cordova/lib/install-emulator.bat | 13 +- bin/templates/cordova/lib/list-devices | 56 +- bin/templates/cordova/lib/list-devices.bat | 13 +- bin/templates/cordova/lib/list-emulator-images | 59 +- .../cordova/lib/list-emulator-images.bat | 9 +- .../cordova/lib/list-started-emulators | 59 +- .../cordova/lib/list-started-emulators.bat | 13 +- bin/templates/cordova/lib/log.js | 43 ++ bin/templates/cordova/lib/run.js | 123 ++++ bin/templates/cordova/lib/start-emulator | 149 ++--- bin/templates/cordova/lib/start-emulator.bat | 13 +- bin/templates/cordova/lib/version.js | 53 ++ bin/templates/cordova/log | 51 +- bin/templates/cordova/log.bat | 10 +- bin/templates/cordova/run | 106 +--- bin/templates/cordova/run.bat | 10 +- bin/templates/cordova/version | 48 +- bin/templates/cordova/version.bat | 10 +- 41 files changed, 1684 insertions(+), 1701 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cordova-android/blob/1bd49009/VERSION ---------------------------------------------------------------------- diff --git a/VERSION b/VERSION index 38f8e88..9001211 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -dev +dev \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cordova-android/blob/1bd49009/bin/check_reqs ---------------------------------------------------------------------- diff --git a/bin/check_reqs b/bin/check_reqs index cdc3fda..d50c78d 100755 --- a/bin/check_reqs +++ b/bin/check_reqs @@ -1,34 +1,26 @@ -#! /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. -# -ROOT="$( cd "$( dirname "$0" )/.." && pwd )" -cmd=`android list target` -if [[ $? != 0 ]]; then - echo "The command \"android\" failed. Make sure you have the latest Android SDK installed, and the \"android\" command (inside the tools/ folder) added to your path." - exit 2 -elif [[ ! $cmd =~ "android-18" ]]; then - echo "Please install Android target 18 (the Android 4.3 SDK). Make sure you have the latest Android tools installed as well. Run \"android\" from your command-line to install/update any missing SDKs or tools." - exit 2 -else - cmd="android update project -p $ROOT -t android-18 1> /dev/null 2>&1" - eval $cmd - if [[ $? != 0 ]]; then - echo "Error updating the Cordova library to work with your Android environment." - exit 2 - fi -fi +#!/usr/bin/env node + +/* + 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. +*/ + +var check_reqs = require('./lib/check_reqs'); + +if(!check_reqs.run()) { + process.exit(2); +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cordova-android/blob/1bd49009/bin/check_reqs.bat ---------------------------------------------------------------------- diff --git a/bin/check_reqs.bat b/bin/check_reqs.bat index 12da1e7..cb2c6f5 100644 --- a/bin/check_reqs.bat +++ b/bin/check_reqs.bat @@ -16,11 +16,11 @@ :: under the License. @ECHO OFF -SET full_path=%~dp0 -IF EXIST %full_path%check_reqs.js ( - cscript "%full_path%check_reqs.js" //nologo +SET script_path="%~dp0check_reqs" +IF EXIST %script_path% ( + node "%script_path%" %* ) ELSE ( ECHO. - ECHO ERROR: Could not find 'check_reqs.js' in 'bin' folder, aborting...>&2 + ECHO ERROR: Could not find 'check_reqs' script in 'bin' folder, aborting...>&2 EXIT /B 1 ) http://git-wip-us.apache.org/repos/asf/cordova-android/blob/1bd49009/bin/check_reqs.js ---------------------------------------------------------------------- diff --git a/bin/check_reqs.js b/bin/check_reqs.js deleted file mode 100644 index 4a724a6..0000000 --- a/bin/check_reqs.js +++ /dev/null @@ -1,102 +0,0 @@ -// 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. - -var ROOT = WScript.ScriptFullName.split('\\bin\\check_reqs.js').join(''), - shell = WScript.CreateObject("WScript.Shell"), - fso = WScript.CreateObject('Scripting.FileSystemObject'); - - -// executes a command in the shell, returns stdout or stderr if error -function exec_out(command) { - var oExec=shell.Exec(command); - var output = new String(); - while (oExec.Status == 0) { - if (!oExec.StdOut.AtEndOfStream) { - var line = oExec.StdOut.ReadAll(); - // XXX: Change to verbose mode - // WScript.StdOut.WriteLine(line); - output += line; - } - WScript.sleep(100); - } - //Check to make sure our scripts did not encounter an error - if (!oExec.StdErr.AtEndOfStream) { - var line = oExec.StdErr.ReadAll(); - return {'error' : true, 'output' : line}; - } else if (!oExec.StdOut.AtEndOfStream) { - var line = oExec.StdOut.ReadAll(); - // XXX: Change to verbose mode - // WScript.StdOut.WriteLine(line); - output += line; - } - return {'error' : false, 'output' : output}; -} - -// log to stdout or stderr -function Log(msg, error) { - if (error) { - WScript.StdErr.WriteLine(msg); - } - else { - WScript.StdOut.WriteLine(msg); - } -} - -// checks that android requirements are met -function check_requirements() { - var target = get_target(); - if(target==null) { - Log('Unable to find android target in project.properties'); - WScript.Quit(2); - } - var result = exec_out('%comspec% /c android list target'); - if(result.error) { - Log('The command `android` failed. Make sure you have the latest Android SDK installed, and the `android` command (inside the tools/ folder) added to your path. Output: ' + result.output, true); - WScript.Quit(2); - } - else if(result.output.indexOf(target) == -1) { - Log(result.output.indexOf(target)); - Log('Please install the latest Android target (' + target + '). Make sure you have the latest Android tools installed as well. Run `android` from your command-line to install/update any missing SDKs or tools.', true); - Log(result.output); - WScript.Quit(2); - } - else { - var cmd = '%comspec% /c android update project -p ' + ROOT + '\\framework -t ' + target; - result = exec_out(cmd); - if(result.error) { - Log('Error updating the Cordova library to work with your Android environment. Command run: "' + cmd + '", output: ' + result.output, true); - WScript.Quit(2); - } - } -} - -function get_target() { - var fso=WScript.CreateObject("Scripting.FileSystemObject"); - var f=fso.OpenTextFile(ROOT + '\\framework\\project.properties', 1); - var s=f.ReadAll(); - var lines = s.split('\n'); - for (var line in lines) { - if(lines[line].match(/target=/)) - { - return lines[line].split('=')[1].replace(' ', '').replace('\r', ''); - } - } - return null; -} - -check_requirements(); - http://git-wip-us.apache.org/repos/asf/cordova-android/blob/1bd49009/bin/create ---------------------------------------------------------------------- diff --git a/bin/create b/bin/create index 6a49dc9..0c2b796 100755 --- a/bin/create +++ b/bin/create @@ -1,159 +1,32 @@ -#! /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=$(echo ${3:-"cordovaExample"} | tr -d '[:blank:][:punct:]') -APP_LABEL=${3:-"Cordova Example"}; -PROJECT_TEMPLATE_DIR=${4:-"$BUILD_PATH/bin/templates/project"}; - -# clobber any existing example -if [ -d "$PROJECT_PATH" ] -then - echo "Project already exists! Delete and recreate" - exit 1 -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 - -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 -STRINGS_PATH="$PROJECT_PATH"/res/values/strings.xml - -TARGET=$("$ANDROID_BIN" list targets -c | grep '^android-' | tail -1 ) -API_LEVEL=${TARGET##android-} - -# 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 - - # 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 "$PROJECT_TEMPLATE_DIR"/assets "$PROJECT_PATH" -cp -r "$PROJECT_TEMPLATE_DIR"/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.js "$PROJECT_PATH"/assets/www/cordova.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.js "$PROJECT_PATH"/assets/www/cordova.js - cp "$BUILD_PATH"/cordova-$VERSION.jar "$PROJECT_PATH"/libs/cordova-$VERSION.jar -fi - -# interpolate the activity name and package -cp "$PROJECT_TEMPLATE_DIR"/Activity.java "$ACTIVITY_PATH" -replace "s/__ACTIVITY__/${ACTIVITY}/g" "$ACTIVITY_PATH" -replace "s/__ID__/${PACKAGE}/g" "$ACTIVITY_PATH" - -# interpolate the app name into strings.xml -replace "s/>${ACTIVITY}${APP_LABEL}&2 + EXIT /B 1 +) \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cordova-android/blob/1bd49009/bin/create.js ---------------------------------------------------------------------- diff --git a/bin/create.js b/bin/create.js deleted file mode 100644 index c723b12..0000000 --- a/bin/create.js +++ /dev/null @@ -1,214 +0,0 @@ -/* - 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] - */ - -var args = WScript.Arguments, PROJECT_PATH="example", - PACKAGE="org.apache.cordova.example", ACTIVITY="cordovaExample", - shell=WScript.CreateObject("WScript.Shell"), - fso = WScript.CreateObject('Scripting.FileSystemObject'); - -function Usage() { - Log("Usage: create PathTONewProject [ PackageName AppName ]"); - Log(" PathTONewProject : The path to where you wish to create the project"); - Log(" PackageName : The package for the project (default is org.apache.cordova.example)") - Log(" AppName : The name of the application/activity (default is cordovaExample)"); - Log("examples:"); - Log(" create C:\\Users\\anonymous\\Desktop\\MyProject"); - Log(" create C:\\Users\\anonymous\\Desktop\\MyProject io.Cordova.Example AnApp"); -} - -// logs messaged to stdout and stderr -function Log(msg, error) { - if (error) { - WScript.StdErr.WriteLine(msg); - } - else { - WScript.StdOut.WriteLine(msg); - } -} - -function read(filename) { - var fso=WScript.CreateObject("Scripting.FileSystemObject"); - var f=fso.OpenTextFile(filename, 1); - var s=f.ReadAll(); - f.Close(); - return s; -} - -function checkTargets(targets) { - if(!targets) { - Log("You do not have any android targets setup. Please create at least one target with the `android` command", true); - WScript.Quit(69); - } -} - -function setTarget() { - var targets = shell.Exec('android.bat list targets').StdOut.ReadAll().match(/id:\s\d+/g); - checkTargets(targets); - return targets[targets.length - 1].replace(/id: /, ""); // TODO: give users the option to set their target -} -function setApiLevel() { - var targets = shell.Exec('android.bat list targets').StdOut.ReadAll().match(/API level:\s\d+/g); - checkTargets(targets); - return targets[targets.length - 1].replace(/API level: /, ""); -} -function write(filename, contents) { - var fso=WScript.CreateObject("Scripting.FileSystemObject"); - var f=fso.OpenTextFile(filename, 2, true); - f.Write(contents); - f.Close(); -} -function replaceInFile(filename, regexp, replacement) { - write(filename, read(filename).replace(regexp, replacement)); -} -function exec(command) { - var oShell=shell.Exec(command); - while (oShell.Status == 0) { - if(!oShell.StdOut.AtEndOfStream) { - var line = oShell.StdOut.ReadLine(); - // XXX: Change to verbose mode - // WScript.StdOut.WriteLine(line); - } - WScript.sleep(100); - } -} - -function createAppInfoJar() { - if(!fso.FileExists(ROOT+"\\bin\\templates\\cordova\\appinfo.jar")) { - Log("Creating appinfo.jar..."); - var cur = shell.CurrentDirectory; - shell.CurrentDirectory = ROOT+"\\bin\\templates\\cordova\\ApplicationInfo"; - exec("javac ApplicationInfo.java"); - exec("jar -cfe ..\\appinfo.jar ApplicationInfo ApplicationInfo.class"); - shell.CurrentDirectory = cur; - } -} - -// working dir -var ROOT = WScript.ScriptFullName.split('\\bin\\create.js').join(''); -if (args.Count() > 0) { - // support help flags - if (args(0) == "--help" || args(0) == "/?" || - args(0) == "help" || args(0) == "-help" || args(0) == "/help" || args(0) == "-h") { - Usage(); - WScript.Quit(2); - } - - PROJECT_PATH=args(0); - if (args.Count() > 1) { - PACKAGE = args(1); - } - if (args.Count() > 2) { - ACTIVITY = args(2); - } -} -else { - Log("Error : No project path provided."); - Usage(); - WScript.Quit(2); -} - -if(fso.FolderExists(PROJECT_PATH)) { - Log("Project path already exists!", true); - WScript.Quit(2); -} - -var PACKAGE_AS_PATH=PACKAGE.replace(/\./g, '\\'); -var ACTIVITY_DIR=PROJECT_PATH + '\\src\\' + PACKAGE_AS_PATH; -var SAFE_ACTIVITY = ACTIVITY.replace(/\W/g, ''); -var ACTIVITY_PATH=ACTIVITY_DIR+'\\'+SAFE_ACTIVITY+'.java'; -var MANIFEST_PATH=PROJECT_PATH+'\\AndroidManifest.xml'; -var STRINGS_PATH=PROJECT_PATH+'\\res\\values\\strings.xml'; -var TARGET=setTarget(); -var API_LEVEL=setApiLevel(); -var VERSION=read(ROOT+'\\VERSION').replace(/\r\n/,'').replace(/\n/,''); -// create the project -Log("Creating new android project..."); -exec('android.bat create project --target "'+TARGET+'" --path "'+PROJECT_PATH+'" --package "'+PACKAGE+'" --activity "'+SAFE_ACTIVITY+'"'); - -// build from source. distro should have these files -if (!fso.FileExists(ROOT+'\\cordova-'+VERSION+'.jar') && - !fso.FileExists(ROOT+'\\cordova.js')) { - Log("Building jar and js files..."); - // update the cordova framework project to a target that exists on this machine - exec('android.bat update project --target "'+TARGET+'" --path "'+ROOT+'\\framework"'); - exec('ant.bat -f "'+ ROOT +'\\framework\\build.xml" jar'); -} - -// copy in the project template -Log("Copying template files..."); -exec('%comspec% /c xcopy "'+ ROOT + '\\bin\\templates\\project\\res" "'+PROJECT_PATH+'\\res\\" /E /Y'); -exec('%comspec% /c xcopy "'+ ROOT + '\\bin\\templates\\project\\assets" "'+PROJECT_PATH+'\\assets\\" /E /Y'); -exec('%comspec% /c copy "'+ROOT+'\\bin\\templates\\project\\AndroidManifest.xml" "' + PROJECT_PATH + '\\AndroidManifest.xml" /Y'); -exec('%comspec% /c mkdir "' + ACTIVITY_DIR + '"'); -exec('%comspec% /c copy "' + ROOT + '"\\bin\\templates\\project\\Activity.java "' + ACTIVITY_PATH + '" /Y'); - -// check if we have the source or the distro files -Log("Copying js, jar & config.xml files..."); -if(fso.FolderExists(ROOT + '\\framework')) { - exec('%comspec% /c copy "'+ROOT+'\\framework\\assets\\www\\cordova.js" "'+PROJECT_PATH+'\\assets\\www\\cordova.js" /Y'); - exec('%comspec% /c copy "'+ROOT+'\\framework\\cordova-'+VERSION+'.jar" "'+PROJECT_PATH+'\\libs\\cordova-'+VERSION+'.jar" /Y'); - fso.CreateFolder(PROJECT_PATH + '\\res\\xml'); - exec('%comspec% /c copy "'+ROOT+'\\framework\\res\\xml\\config.xml" "' + PROJECT_PATH + '\\res\\xml\\config.xml" /Y'); -} else { - // copy in cordova.js - exec('%comspec% /c copy "'+ROOT+'\\cordova.js" "'+PROJECT_PATH+'\\assets\\www\\cordova.js" /Y'); - // copy in cordova.jar - exec('%comspec% /c copy "'+ROOT+'\\cordova-'+VERSION+'.jar" "'+PROJECT_PATH+'\\libs\\cordova-'+VERSION+'.jar" /Y'); - // copy in xml - fso.CreateFolder(PROJECT_PATH + '\\res\\xml'); - exec('%comspec% /c copy "'+ROOT+'\\xml\\config.xml" "' + PROJECT_PATH + '\\res\\xml\\config.xml" /Y'); -} - -// copy cordova scripts -fso.CreateFolder(PROJECT_PATH + '\\cordova'); -fso.CreateFolder(PROJECT_PATH + '\\cordova\\lib'); -createAppInfoJar(); -Log("Copying cordova command tools..."); -exec('%comspec% /c copy "'+ROOT+'\\bin\\templates\\cordova\\appinfo.jar" "' + PROJECT_PATH + '\\cordova\\appinfo.jar" /Y'); -exec('%comspec% /c copy "'+ROOT+'\\bin\\templates\\cordova\\lib\\cordova.js" "' + PROJECT_PATH + '\\cordova\\lib\\cordova.js" /Y'); -exec('%comspec% /c copy "'+ROOT+'\\bin\\templates\\cordova\\lib\\install-device.bat" "' + PROJECT_PATH + '\\cordova\\lib\\install-device.bat" /Y'); -exec('%comspec% /c copy "'+ROOT+'\\bin\\templates\\cordova\\lib\\install-emulator.bat" "' + PROJECT_PATH + '\\cordova\\lib\\install-emulator.bat" /Y'); -exec('%comspec% /c copy "'+ROOT+'\\bin\\templates\\cordova\\lib\\list-emulator-images.bat" "' + PROJECT_PATH + '\\cordova\\lib\\list-emulator-images.bat" /Y'); -exec('%comspec% /c copy "'+ROOT+'\\bin\\templates\\cordova\\lib\\list-devices.bat" "' + PROJECT_PATH + '\\cordova\\lib\\list-devices.bat" /Y'); -exec('%comspec% /c copy "'+ROOT+'\\bin\\templates\\cordova\\lib\\list-started-emulators.bat" "' + PROJECT_PATH + '\\cordova\\lib\\list-started-emulators.bat" /Y'); -exec('%comspec% /c copy "'+ROOT+'\\bin\\templates\\cordova\\lib\\start-emulator.bat" "' + PROJECT_PATH + '\\cordova\\lib\\start-emulator.bat" /Y'); -exec('%comspec% /c copy "'+ROOT+'\\bin\\templates\\cordova\\cordova.bat" "' + PROJECT_PATH + '\\cordova\\cordova.bat" /Y'); -exec('%comspec% /c copy "'+ROOT+'\\bin\\templates\\cordova\\clean.bat" "' + PROJECT_PATH + '\\cordova\\clean.bat" /Y'); -exec('%comspec% /c copy "'+ROOT+'\\bin\\templates\\cordova\\build.bat" "' + PROJECT_PATH + '\\cordova\\build.bat" /Y'); -exec('%comspec% /c copy "'+ROOT+'\\bin\\templates\\cordova\\log.bat" "' + PROJECT_PATH + '\\cordova\\log.bat" /Y'); -exec('%comspec% /c copy "'+ROOT+'\\bin\\templates\\cordova\\run.bat" "' + PROJECT_PATH + '\\cordova\\run.bat" /Y'); -exec('%comspec% /c copy "'+ROOT+'\\bin\\templates\\cordova\\version.bat" "' + PROJECT_PATH + '\\cordova\\version.bat" /Y'); - -// interpolate the activity name and package -Log("Updating AndroidManifest.xml and Main Activity..."); -replaceInFile(ACTIVITY_PATH, /__ACTIVITY__/, ACTIVITY); -replaceInFile(ACTIVITY_PATH, /__ID__/, PACKAGE); - -replaceInFile(MANIFEST_PATH, /__ACTIVITY__/, ACTIVITY); -replaceInFile(MANIFEST_PATH, /__PACKAGE__/, PACKAGE); -replaceInFile(MANIFEST_PATH, /__APILEVEL__/, API_LEVEL); - -replaceInFile(STRINGS_PATH, new RegExp('>' + SAFE_ACTIVITY + '<'), '>' + ACTIVITY + '<'); \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cordova-android/blob/1bd49009/bin/lib/check_reqs.js ---------------------------------------------------------------------- diff --git a/bin/lib/check_reqs.js b/bin/lib/check_reqs.js new file mode 100644 index 0000000..eb0c477 --- /dev/null +++ b/bin/lib/check_reqs.js @@ -0,0 +1,85 @@ +#!/usr/bin/env node + +/* + 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. +*/ + +var shell = require('shelljs'), + path = require('path'), + fs = require('fs'), + ROOT = path.join(__dirname, '..', '..'); + +// Get valid target from framework/project.properties +module.exports.get_target = function() { + if(fs.existsSync(path.join(ROOT, 'framework', 'project.properties'))) { + var target = shell.grep(/target=android-[\d+]/, path.join(ROOT, 'framework', 'project.properties')); + return target.split('=')[1].replace('\n', '').replace('\r', '').replace(' ', ''); + } else if (fs.existsSync(path.join(ROOT, 'project.properties'))) { + // if no target found, we're probably in a project and project.properties is in ROOT. + var target = shell.grep(/target=android-[\d+]/, path.join(ROOT, 'project.properties')); + return target.split('=')[1].replace('\n', '').replace('\r', '').replace(' ', ''); + } +} + +module.exports.check_ant = function() { + var test = shell.exec('ant -version', {silent:true, async:false}); + if(test.code > 0) { + console.error('ERROR : executing command \'ant\', make sure you have ant installed and added to your path.'); + return false; + } + return true; +} + +module.exports.check_java = function() { + if(process.env.JAVA_HOME) { + var test = shell.exec('java', {silent:true, async:false}); + if(test.code > 0) { + console.error('ERROR : executing command \'java\', make sure you java environment is set up. Including your JDK and JRE.'); + return false; + } + return true; + } else { + console.error('ERROR : Make sure JAVA_HOME is set, as well as paths to your JDK and JRE for java.'); + return false; + } +} + +module.exports.check_android = function() { + var valid_target = this.get_target(); + var targets = shell.exec('android list targets', {silent:true, async:false}); + + if(targets.code > 0 && targets.output.match(/command\snot\sfound/)) { + console.error('The command \"android\" failed. Make sure you have the latest Android SDK installed, and the \"android\" command (inside the tools/ folder) is added to your path.'); + return false; + } else if(!targets.output.match(valid_target)) { + console.error('Please install Android target ' + valid_target.split('-')[1] + ' (the Android newest SDK). Make sure you have the latest Android tools installed as well. Run \"android\" from your command-line to install/update any missing SDKs or tools.'); + return false; + } else { + var cmd = 'android update project -p ' + ROOT + ' -t ' + valid_target + ' 1> /dev/null 2>&1'; + var result = shell.exec(cmd, {silent:false, async:true}); + if(result.code > 0) { + console.error('Error updating the Cordova library to work with your Android environment.'); + return false; + } + } + return true; +} + +module.exports.run = function() { + return this.check_ant() && this.check_java && this.check_android(); +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cordova-android/blob/1bd49009/bin/lib/create.js ---------------------------------------------------------------------- diff --git a/bin/lib/create.js b/bin/lib/create.js new file mode 100755 index 0000000..4a7294c --- /dev/null +++ b/bin/lib/create.js @@ -0,0 +1,265 @@ +#!/usr/bin/env node + +/* + 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. +*/ +try { + require.resolve("shelljs"); +} catch(e) { + console.error('Shelljs module was not found, please run \'npm install\' from the bin folder.'); + process.exit(e.code); +} + +var shell = require('shelljs'), + path = require('path'), + fs = require('fs'), + check_reqs = require('./check_reqs'), + ROOT = path.join(__dirname, '..', '..'); + + +/** + * $ create [options] + * + * Creates an android application with the given options. + * + * Options: + * + * - `project_path` {String} Path to the new Cordova android project. + * - `package_name`{String} Package name, following reverse-domain style convention. + * - `project_name` {String} Project name. + */ + +module.exports.run = function(project_path, package_name, project_name) { + + var VERSION = fs.readFileSync(path.join(ROOT, 'VERSION'), 'utf-8'); + var project_template_dir = path.join(ROOT, 'bin', 'templates', 'project'); + + // Set default values for path, package and name + project_path = typeof project_path !== 'undefined' ? project_path : "CordovaExample"; + package_name = typeof package_name !== 'undefined' ? package_name : 'my.cordova.project'; + project_name = typeof project_name !== 'undefined' ? project_name : 'CordovaExample'; + + var safe_activity_name = project_name.replace(/\W/, ''); + var package_as_path = package_name.replace(/\./g, path.sep); + var activity_dir = path.join(project_path, 'src', package_as_path); + var activity_path = path.join(activity_dir, safe_activity_name + '.java'); + var target_api = check_reqs.get_target(); + var strings_path = path.join(project_path, 'res', 'values', 'strings.xml'); + var manifest_path = path.join(project_path, 'AndroidManifest.xml'); + + // Check if project already exists + if(fs.existsSync(project_path)) { + console.error('Project already exists! Delete and recreate'); + process.exit(2); + } + + // Check that requirements are met and proper targets are installed + if(!check_reqs.run()) { + console.error('Please make sure you meeet the software requirements in order to build an android cordova project'); + process.exit(2); + } + + // Log the given values for the project + console.log('Creating Cordova project for the Android platform :'); + console.log('\tPath : ' + path.relative(process.cwd(), project_path)); + console.log('\tPackage : ' + package_name); + console.log('\tName : ' + project_name); + console.log('\tAndroid target : ' + target_api); + + // build from source. distro should have these files + if(!fs.existsSync(path.join(ROOT, 'cordova-' + VERSION + '.jar')) && fs.existsSync(path.join(ROOT, 'framework'))) { + console.log('Building jar and js files...'); + // update the cordova-android framework for the desired target + exec('android update project --target ' + target_api + ' --path ' + path.join(ROOT, 'framework')); + + // compile cordova.js and cordova.jar + var cwd = process.cwd(); + process.chdir(path.join(ROOT, 'framework')); + exec('ant jar'); + process.chdir(cwd); + } + + // create new android project + var create_cmd = 'android create project --target "'+target_api+'" --path "'+path.relative(process.cwd(), project_path)+'" --package "'+package_name+'" --activity "'+safe_activity_name+'"'; + exec(create_cmd); + + console.log('Copying template files...'); + + // copy project template + shell.cp('-r', path.join(project_template_dir, 'assets'), project_path); + shell.cp('-r', path.join(project_template_dir, 'res'), project_path); + + // copy cordova.js, cordova.jar and res/xml + if(fs.existsSync(path.join(ROOT, 'framework'))) { + shell.cp('-r', path.join(ROOT, 'framework', 'res', 'xml'), path.join(project_path, 'res')); + shell.cp(path.join(ROOT, 'framework', 'assets', 'www', 'cordova.js'), path.join(project_path, 'assets', 'www', 'cordova.js')); + shell.cp(path.join(ROOT, 'framework', 'cordova-' + VERSION + '.jar'), path.join(project_path, 'libs', 'cordova-' + VERSION + '.jar')); + } else { + shell.cp('-r', path.join(ROOT, 'xml'), path.join(project_path, 'res')); + shell.cp(path.join(ROOT, 'cordova.js'), path.join(project_path, 'assets', 'www', 'cordova.js')); + shell.cp(path.join(ROOT, 'cordova-' + VERSION + '.jar'), path.join(project_path, 'libs', 'cordova-' + VERSION + '.jar')); + } + + // interpolate the activity name and package + shell.mkdir('-p', activity_dir); + shell.cp('-f', path.join(project_template_dir, 'Activity.java'), activity_path); + replaceInFile(activity_path, /__ACTIVITY__/, safe_activity_name); + replaceInFile(activity_path, /__ID__/, package_name); + + // interpolate the app name into strings.xml + replaceInFile(strings_path, />Cordova' + project_name + '<'); + + shell.cp('-f', path.join(project_template_dir, 'AndroidManifest.xml'), manifest_path); + replaceInFile(manifest_path, /__ACTIVITY__/, safe_activity_name); + replaceInFile(manifest_path, /__PACKAGE__/, package_name); + replaceInFile(manifest_path, /__APILEVEL__/, target_api.split('-')[1]); + + var cordova_path = path.join(ROOT, 'bin', 'templates', 'cordova'); + // create app info jar + if(!fs.existsSync(path.join(cordova_path, 'appinfo.jar'))) { + console.log('Creating appinfo.jar...'); + var cwd = process.cwd(); + process.chdir(path.join(cordova_path, 'ApplicationInfo')); + exec('javac ApplicationInfo.java'); + exec('jar -cfe ' + path.join(cordova_path, 'appinfo.jar') + ' ApplicationInfo ApplicationInfo.class'); + process.chdir(cwd); + } + + // creating cordova folder and copying run/build/log/launch/check_reqs scripts + var lib_path = path.join(cordova_path, 'lib'); + shell.mkdir(path.join(project_path, 'cordova')); + shell.mkdir(path.join(project_path, 'cordova', 'lib')); + + shell.cp(path.join(cordova_path, 'appinfo.jar'), path.join(project_path, 'cordova', 'appinfo.jar')); + shell.cp(path.join(cordova_path, 'build'), path.join(project_path, 'cordova', 'build')); + shell.chmod(755, path.join(project_path, 'cordova', 'build')); + shell.cp(path.join(cordova_path, 'clean'), path.join(project_path, 'cordova', 'clean')); + shell.chmod(755, path.join(project_path, 'cordova', 'clean')); + shell.cp(path.join(cordova_path, 'log'), path.join(project_path, 'cordova', 'log')); + shell.chmod(755, path.join(project_path, 'cordova', 'log')); + shell.cp(path.join(cordova_path, 'run'), path.join(project_path, 'cordova', 'run')); + shell.chmod(755, path.join(project_path, 'cordova', 'run')); + shell.cp(path.join(cordova_path, 'version'), path.join(project_path, 'cordova', 'version')); + shell.chmod(755, path.join(project_path, 'cordova', 'version')); + shell.cp(path.join(ROOT, 'bin', 'check_reqs'), path.join(project_path, 'cordova', 'check_reqs')); + shell.chmod(755, path.join(project_path, 'cordova', 'check_reqs')); + + shell.cp(path.join(lib_path, 'build.js'), path.join(project_path, 'cordova', 'lib', 'build.js')); + shell.cp(path.join(ROOT, 'bin', 'lib', 'check_reqs.js'), path.join(project_path, 'cordova', 'lib', 'check_reqs.js')); + shell.cp(path.join(lib_path, 'clean.js'), path.join(project_path, 'cordova', 'lib', 'clean.js')); + shell.cp(path.join(lib_path, 'device.js'), path.join(project_path, 'cordova', 'lib', 'device.js')); + shell.cp(path.join(lib_path, 'emulator.js'), path.join(project_path, 'cordova', 'lib', 'emulator.js')); + shell.cp(path.join(lib_path, 'log.js'), path.join(project_path, 'cordova', 'lib', 'log.js')); + shell.cp(path.join(lib_path, 'run.js'), path.join(project_path, 'cordova', 'lib', 'run.js')); + shell.cp(path.join(lib_path, 'version.js'), path.join(project_path, 'cordova', 'lib', 'version.js')); + shell.cp(path.join(lib_path, 'install-device'), path.join(project_path, 'cordova', 'lib', 'install-device')); + shell.chmod(755, path.join(project_path, 'cordova', 'lib', 'install-device')); + shell.cp(path.join(lib_path, 'install-emulator'), path.join(project_path, 'cordova', 'lib', 'install-emulator')); + shell.chmod(755, path.join(project_path, 'cordova', 'lib', 'install-emulator')); + shell.cp(path.join(lib_path, 'list-devices'), path.join(project_path, 'cordova', 'lib', 'list-devices')); + shell.chmod(755, path.join(project_path, 'cordova', 'lib', 'list-devices')); + shell.cp(path.join(lib_path, 'list-emulator-images'), path.join(project_path, 'cordova', 'lib', 'list-emulator-images')); + shell.chmod(755, path.join(project_path, 'cordova', 'lib', 'list-emulator-images')); + shell.cp(path.join(lib_path, 'list-started-emulators'), path.join(project_path, 'cordova', 'lib', 'list-started-emulators')); + shell.chmod(755, path.join(project_path, 'cordova', 'lib', 'list-started-emulators')); + shell.cp(path.join(lib_path, 'start-emulator'), path.join(project_path, 'cordova', 'lib', 'start-emulator')); + shell.chmod(755, path.join(project_path, 'cordova', 'lib', 'start-emulator')); + + // if on windows, copy .bat scripts + // TODO : make these not nessesary, they clutter the scripting folder. + if(process.platform == 'win32' || process.platform == 'win64') { + shell.cp(path.join(cordova_path, 'build.bat'), path.join(project_path, 'cordova', 'build.bat')); + shell.cp(path.join(cordova_path, 'clean.bat'), path.join(project_path, 'cordova', 'clean.bat')); + shell.cp(path.join(cordova_path, 'log.bat'), path.join(project_path, 'cordova', 'log.bat')); + shell.cp(path.join(cordova_path, 'run.bat'), path.join(project_path, 'cordova', 'run.bat')); + shell.cp(path.join(cordova_path, 'version.bat'), path.join(project_path, 'cordova', 'version.bat')); + shell.cp(path.join(ROOT, 'bin', 'check_reqs.bat'), path.join(project_path, 'cordova', 'check_reqs.bat')); + + // lib scripts + shell.cp(path.join(lib_path, 'install-device.bat'), path.join(project_path, 'cordova', 'lib', 'install-device.bat')); + shell.cp(path.join(lib_path, 'install-emulator.bat'), path.join(project_path, 'cordova', 'lib', 'install-emulator.bat')); + shell.cp(path.join(lib_path, 'list-devices.bat'), path.join(project_path, 'cordova', 'lib', 'list-devices.bat')); + shell.cp(path.join(lib_path, 'list-emulator-images.bat'), path.join(project_path, 'cordova', 'lib', 'list-emulator-images.bat')); + shell.cp(path.join(lib_path, 'list-started-emulators.bat'), path.join(project_path, 'cordova', 'lib', 'list-started-emulators.bat')); + shell.cp(path.join(lib_path, 'start-emulator.bat'), path.join(project_path, 'cordova', 'lib', 'start-emulator.bat')); + } + + // copy node related files + shell.cp(path.join(ROOT, 'bin', 'package.json'), path.join(project_path, 'cordova', 'package.json')); + shell.cp('-r', path.join(ROOT, 'bin', 'node_modules'), path.join(project_path, 'cordova')); + + /* + * HELPER FUNCTIONS + */ + + function exec(command) { + var result; + try { + result = shell.exec(command, {silent:false, async:false}); + } catch(e) { + console.error('Command error on execuation : ' + command); + console.error(e); + process.exit(2); + } + if(result && result.code > 0) { + console.error('Command failed to execute : ' + command); + console.error(result.output); + process.exit(2); + } else { + return result; + } + } + + function replaceInFile(filename, regex, replacement) { + write(filename, read(filename).replace(regex, replacement)); + } + + function read(filename) { + if(fs.existsSync(filename)) { + if(fs.lstatSync(filename).isFile()) { + return fs.readFileSync(filename, 'utf-8'); + } else { + console.error('Uanble to read directory : ' + filename); + process.exit(1); + } + } else { + console.error('Uanble to read file, not found : ' + filename); + process.exit(1); + } + } + + function write(filename, content) { + fs.writeFileSync(filename, content, 'utf-8'); + } +} + +/** + * Usage information. + **/ + +module.exports.help = function() { + console.log('Usage: ' + path.relative(process.cwd(), path.join(ROOT, 'bin', 'create')) + ' '); + console.log('Make sure the Android SDK tools folder is in your PATH!'); + console.log(' : Path to your new Cordova Android project'); + console.log(' : Package name, following reverse-domain style convention'); + console.log(' : Project name'); + process.exit(0); +} + + + http://git-wip-us.apache.org/repos/asf/cordova-android/blob/1bd49009/bin/package.json ---------------------------------------------------------------------- diff --git a/bin/package.json b/bin/package.json new file mode 100644 index 0000000..cceb151 --- /dev/null +++ b/bin/package.json @@ -0,0 +1,32 @@ +{ + "name": "cordova-android", + "description": "Cordova tooling for the android platform.", + "version": "0.0.0", + "homepage": "http://github.com/apache/cordova-android", + "repository": { + "type": "git", + "url": "https://git-wip-us.apache.org/repos/asf/cordova-andorid.git" + }, + "keywords": [ + "cli", + "cordova", + "tooling" + ], + "engineStrict": "true", + "engines": { + "node": ">=0.10.0" + }, + "dependencies": { + "shelljs" : "0.1.4" + }, + "devDependencies": { + }, + "optionalDependencies": { + }, + "author": { + "name": "Benn Mapes", + "email": "bennmapes@gmail.com" + }, + "contributors": [ + ] +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cordova-android/blob/1bd49009/bin/templates/cordova/build ---------------------------------------------------------------------- diff --git a/bin/templates/cordova/build b/bin/templates/cordova/build index 5ba36c0..752945f 100755 --- a/bin/templates/cordova/build +++ b/bin/templates/cordova/build @@ -1,39 +1,35 @@ -#!/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. +#!/usr/bin/env node -DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -PROJECT_PATH=$( cd "$DIR/.." && pwd ) +/* + 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 -if [[ "$#" -eq 1 ]] ; then - if [[ $1 == "--debug" ]] ; then - $DIR/clean - ant debug -f "$PROJECT_PATH"/build.xml - elif [[ $1 == "--release" ]] ; then - $DIR/clean - ant release -f "$PROJECT_PATH"/build.xml - elif [[ $1 == "--nobuild" ]] ; then - echo "Skipping build..." - else - echo "Error : Build command '$1' not recognized." - exit 2 - fi -else - echo "Warning : [ --debug | --release | --nobuild ] not specified, defaulting to --debug" - $DIR/clean - ant debug -f "$PROJECT_PATH"/build.xml -fi + 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. +*/ + +var build = require('./lib/build'), + reqs = require('./lib/check_reqs'), + args = process.argv; + +// Support basic help commands +if(args[2] == '--help' || args[2] == '/?' || args[2] == '-h' || + args[2] == 'help' || args[2] == '-help' || args[2] == '/help') { + build.help(); +} else if(reqs.run()) { + build.run(args[2]); + process.exit(0); +} else { + process.exit(2); +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cordova-android/blob/1bd49009/bin/templates/cordova/build.bat ---------------------------------------------------------------------- diff --git a/bin/templates/cordova/build.bat b/bin/templates/cordova/build.bat index 392f374..2f317e3 100644 --- a/bin/templates/cordova/build.bat +++ b/bin/templates/cordova/build.bat @@ -14,5 +14,13 @@ :: KIND, either express or implied. See the License for the :: specific language governing permissions and limitations :: under the License. + @ECHO OFF -%~dp0\cordova.bat build %* +SET script_path="%~dp0build" +IF EXIST %script_path% ( + node "%script_path%" %* +) ELSE ( + ECHO. + ECHO ERROR: Could not find 'build' script in 'cordova' folder, aborting...>&2 + EXIT /B 1 +) \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cordova-android/blob/1bd49009/bin/templates/cordova/clean ---------------------------------------------------------------------- diff --git a/bin/templates/cordova/clean b/bin/templates/cordova/clean index b943b47..6b72e71 100755 --- a/bin/templates/cordova/clean +++ b/bin/templates/cordova/clean @@ -1,22 +1,34 @@ -#!/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. +#!/usr/bin/env node -DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -PROJECT_PATH=$( cd "$DIR/.." && pwd ) -echo "Cleaning project..." -ant -f "$PROJECT_PATH/build.xml" clean +/* + 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. +*/ + +var clean = require('./lib/clean'), + reqs = require('./lib/check_reqs'), + args = process.argv; + +// Usage support for when args are given +if(args.length > 2) { + clean.help(); +} else if(reqs.run()) { + clean.run(); + process.exit(0); +} else { + process.exit(2); +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cordova-android/blob/1bd49009/bin/templates/cordova/clean.bat ---------------------------------------------------------------------- diff --git a/bin/templates/cordova/clean.bat b/bin/templates/cordova/clean.bat index 643c8d5..fa1f669 100644 --- a/bin/templates/cordova/clean.bat +++ b/bin/templates/cordova/clean.bat @@ -14,5 +14,13 @@ :: KIND, either express or implied. See the License for the :: specific language governing permissions and limitations :: under the License. + @ECHO OFF -%~dp0\cordova.bat clean %* +SET script_path="%~dp0clean" +IF EXIST %script_path% ( + node "%script_path%" %* +) ELSE ( + ECHO. + ECHO ERROR: Could not find 'clean' script in 'cordova' folder, aborting...>&2 + EXIT /B 1 +) \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cordova-android/blob/1bd49009/bin/templates/cordova/cordova.bat ---------------------------------------------------------------------- diff --git a/bin/templates/cordova/cordova.bat b/bin/templates/cordova/cordova.bat deleted file mode 100644 index 6235fdb..0000000 --- a/bin/templates/cordova/cordova.bat +++ /dev/null @@ -1,31 +0,0 @@ -:: 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. -@ECHO OFF -IF NOT DEFINED JAVA_HOME GOTO MISSING -FOR %%X in (java.exe ant.bat android.bat) do ( - SET FOUND=%%~$PATH:X - IF NOT DEFINED FOUND GOTO MISSING -) -cscript %~dp0\lib\cordova.js %* //nologo -GOTO END -:MISSING -ECHO Missing one of the following: -ECHO JDK: http://java.oracle.com -ECHO Android SDK: http://developer.android.com -ECHO Apache ant: http://ant.apache.org -EXIT /B 1 -:END http://git-wip-us.apache.org/repos/asf/cordova-android/blob/1bd49009/bin/templates/cordova/lib/build.js ---------------------------------------------------------------------- diff --git a/bin/templates/cordova/lib/build.js b/bin/templates/cordova/lib/build.js new file mode 100644 index 0000000..84e4e02 --- /dev/null +++ b/bin/templates/cordova/lib/build.js @@ -0,0 +1,89 @@ +#!/usr/bin/env node + +/* + 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. +*/ + +var shell = require('shelljs'), + clean = require('./clean'), + path = require('path'), + fs = require('fs'), + ROOT = path.join(__dirname, '..', '..'); + +/* + * Builds the project with ant. + */ +module.exports.run = function(build_type) { + //default build type + build_type = typeof build_type !== 'undefined' ? build_type : "--debug"; + var cmd; + switch(build_type) { + case '--debug' : + clean.run(); + cmd = 'ant debug -f ' + path.join(ROOT, 'build.xml'); + break; + case '--release' : + clean.run(); + cmd = 'ant release -f ' + path.join(ROOT, 'build.xml'); + break; + case '--nobuild' : + console.log('Skipping build...'); + break; + default : + console.error('Build option \'' + build_type + '\' not recognized.'); + process.exit(2); + break; + } + if(cmd) { + var result = shell.exec(cmd, {silent:false, async:false}); + if(result.code > 0) { + console.error('ERROR: Failed to build android project.'); + console.error(result.output); + process.exit(2); + } + } +} + +/* + * Gets the path to the apk file, if not such file exists then + * the script will error out. (should we error or just return undefined?) + */ +module.exports.get_apk = function() { + if(fs.existsSync(path.join(ROOT, 'bin'))) { + var bin_files = fs.readdirSync(path.join(ROOT, 'bin')); + for (file in bin_files) { + if(path.extname(bin_files[file]) == '.apk') { + return path.join(ROOT, 'bin', bin_files[file]); + } + } + console.error('ERROR : No .apk found in \'bin\' folder'); + process.exit(2); + } else { + console.error('ERROR : unable to find project bin folder, could not locate .apk'); + process.exit(2); + } +} + +module.exports.help = function() { + console.log('Usage: ' + path.relative(process.cwd(), path.join(ROOT, 'corodva', 'build')) + ' [build_type]'); + console.log('Build Types : '); + console.log(' \'--debug\': Default build, will build project in using ant debug'); + console.log(' \'--release\': will build project using ant release'); + console.log(' \'--nobuild\': will skip build process (can be used with run command)'); + process.exit(0); +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cordova-android/blob/1bd49009/bin/templates/cordova/lib/clean.js ---------------------------------------------------------------------- diff --git a/bin/templates/cordova/lib/clean.js b/bin/templates/cordova/lib/clean.js new file mode 100644 index 0000000..579a5fa --- /dev/null +++ b/bin/templates/cordova/lib/clean.js @@ -0,0 +1,43 @@ +#!/usr/bin/env node + +/* + 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. +*/ + +var shell = require('shelljs'), + path = require('path'), + ROOT = path.join(__dirname, '..', '..'); + +/* + * Cleans the project using ant + */ +module.exports.run = function() { + var cmd = 'ant clean -f ' + path.join(ROOT, 'build.xml'); + var result = shell.exec(cmd, {silent:false, async:false}); + if (result.code > 0) { + console.error('ERROR: Failed to clean android project.'); + console.error(result.output); + process.exit(2); + } +} + +module.exports.help = function() { + console.log('Usage: ' + path.relative(process.cwd(), process.argv[1])); + console.log('Cleans the project directory.'); + process.exit(0); +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cordova-android/blob/1bd49009/bin/templates/cordova/lib/cordova.js ---------------------------------------------------------------------- diff --git a/bin/templates/cordova/lib/cordova.js b/bin/templates/cordova/lib/cordova.js deleted file mode 100644 index 2d0195a..0000000 --- a/bin/templates/cordova/lib/cordova.js +++ /dev/null @@ -1,612 +0,0 @@ -// 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. - -var ROOT = WScript.ScriptFullName.split('\\cordova\\lib\\cordova.js').join(''), - shell = WScript.CreateObject("WScript.Shell"), - fso = WScript.CreateObject('Scripting.FileSystemObject'); -//device_id for targeting specific device -var device_id; -//build types -var NONE = 0, - DEBUG = '--debug', - RELEASE = '--release', - NO_BUILD = '--nobuild'; -var build_type = NONE; - -//deploy tpyes -var NONE = 0, - EMULATOR = 1, - DEVICE = 2, - TARGET = 3; -var deploy_type = NONE; - - -// log to stdout or stderr -function Log(msg, error) { - if (error) { - WScript.StdErr.WriteLine(msg); - } - else { - WScript.StdOut.WriteLine(msg); - } -} - -// executes a commmand in the shell, returning stdout -function exec(command) { - var oExec=shell.Exec(command); - var output = new String(); - while (oExec.Status == 0) { - if (!oExec.StdOut.AtEndOfStream) { - var line = oExec.StdOut.ReadLine(); - output += line; - } - WScript.sleep(100); - } - return output; -} - -// executes a command in the shell, returns stdout or stderr if error -function exec_out(command) { - var oExec=shell.Exec(command); - var output = new String(); - while (oExec.Status == 0) { - if (!oExec.StdOut.AtEndOfStream) { - var line = oExec.StdOut.ReadLine(); - // XXX: Change to verbose mode - // WScript.StdOut.WriteLine(line); - output += line; - } - WScript.sleep(100); - } - //Check to make sure our scripts did not encounter an error - if (!oExec.StdErr.AtEndOfStream) { - var line = oExec.StdErr.ReadAll(); - return {'error' : true, 'output' : line}; - } - return {'error' : false, 'output' : output}; -} - -// executes a commmand in the shell and outputs stdout and fails on stderr -function exec_verbose(command) { - //Log("Command: " + command); - var oShell=shell.Exec(command); - while (oShell.Status == 0) { - //Wait a little bit so we're not super looping - WScript.sleep(100); - //Print any stdout output from the script - if (!oShell.StdOut.AtEndOfStream) { - var line = oShell.StdOut.ReadLine(); - Log(line); - } - } - //Check to make sure our scripts did not encounter an error - if (!oShell.StdErr.AtEndOfStream) { - var line = oShell.StdErr.ReadAll(); - Log(line, true); - WScript.Quit(2); - } -} - -function version(path) { - var cordovajs_path = path + "\\assets\\www\\cordova.js"; - if(fso.FileExists(cordovajs_path)) { - var f = fso.OpenTextFile(cordovajs_path, 1,2); - var cordovajs = f.ReadAll(); - f.Close(); - var version_regex = /^.*CORDOVA_JS_BUILD_LABEL.*$/m; - var version_line = cordovajs.match(version_regex) + ""; - var version = version_line.match(/(\d+)\.(\d+)\.(\d+)(rc\d)?/) + ""; - // TODO : figure out why this isn't matching properly so we can remove this substring workaround. - Log(version.substr(0, ((version.length/2) -1))); - } else { - Log("Error : Could not find cordova js.", true); - Log("Expected Location : " + cordovajs_path, true); - WScript.Quit(2); - } - -} - -function get_devices() { - var device_list = [] - var local_devices = shell.Exec("%comspec% /c adb devices").StdOut.ReadAll(); - if (local_devices.match(/\w+\tdevice/)) { - devices = local_devices.split('\r\n'); - //format (ID DESCRIPTION) - for (i in devices) { - if (devices[i].match(/\w+\tdevice/) && !devices[i].match(/emulator/)) { - device_list.push(devices[i].replace(/\t/, ' ')); - } - } - } - return device_list -} - -function list_devices() { - var devices = get_devices(); - if (devices.length > 0) { - for (i in devices) { - Log(devices[i]); - } - } - else { - Log('No devices found, if your device is connected and not showing,'); - Log(' then try and install the drivers for your device.'); - Log(' http://developer.android.com/tools/extras/oem-usb.html'); - } - -} - -function get_emulator_images() { - var avd_list = []; - var local_emulators = shell.Exec("%comspec% /c android list avds").StdOut.ReadAll(); - if (local_emulators.match(/Name\:/)) { - emulators = local_emulators.split('\n'); - var count = 0; - var output = ''; - for (i in emulators) { - // Find the line with the emulator name. - if (emulators[i].match(/Name\:/)) { - // strip description - var emulator_name = emulators[i].replace(/\s*Name\:\s/, '') + ' '; - avd_list.push(emulator_name); - } - } - } - return avd_list; -} - -function list_emulator_images() { - var images = get_emulator_images(); - if (images.length > 0) { - for(i in images) { - Log(images[i]); - } - } - else { - Log('No emulators found, if you would like to create an emulator follow the instructions'); - Log(' provided here : http://developer.android.com/tools/devices/index.html'); - Log(' Or run \'android create avd --name --target \' in on the command line.'); - } -} - -function get_started_emulators() { - var started_emulators = []; - var local_devices = shell.Exec("%comspec% /c adb devices").StdOut.ReadAll(); - if (local_devices.match(/emulator/)) { - devices = local_devices.split('\r\n'); - //format (ID DESCRIPTION) - for (i in devices) { - if (devices[i].match(/\w+\tdevice/) && devices[i].match(/emulator/)) { - started_emulators.push(devices[i].replace(/\t/, ' ')); - } - } - } - return started_emulators -} - -function list_started_emulators() { - var images = get_started_emulators(); - if (images.length > 0) { - for(i in images) { - Log(images[i]); - } - } - else { - Log('No started emulators found, if you would like to start an emulator call '); - Log('\'list-emulator-images\''); - Log(' to get the name of an emulator and then start the emulator with'); - Log('\'start-emulator \''); - } -} - -function create_emulator() { - //get targets - var targets = shell.Exec('android.bat list targets').StdOut.ReadAll().match(/id:\s\d+/g); - if(targets) { - exec('%comspec% /c android create avd --name cordova_emulator --target ' + targets[targets.length - 1].replace(/id: /, "")); - } else { - Log("You do not have any android targets setup. Please create at least one target with the `android` command so that an emulator can be created.", true); - WScript.Quit(69); - } -} - -function start_emulator(name) { - var emulators = get_emulator_images(); - var started_emulators = get_started_emulators(); - var num_started = started_emulators.length; - var emulator_name; - var started = false; - if (name) { - for (i in emulators) { - if (emulators[i].substr(0,name.length) == name) { - Log("Starting emulator : " + name); - shell.Exec("%comspec% /c emulator -avd " + name + " &"); - //shell.Run("%comspec% /c start cmd /c emulator -cpu-delay 0 -no-boot-anim -cache %Temp%\cache -avd " + name); - started = true; - } - } - } - else { - if (emulators.length > 0 && started_emulators.length == 0) { - emulator_name = emulators[0].split(' ', 1)[0]; - start_emulator(emulator_name); - return; - } else if (started_emulators.length > 0) { - Log("Emulator already started : " + started_emulators[0].split(' ', 1)); - return; - } else { - Log("Error : unable to start emulator, ensure you have emulators availible by checking \'list-emulator-images\'", true); - WScript.Quit(2); - } - } - if (!started) { - Log("Error : unable to start emulator, ensure you have emulators availible by checking \'list-emulator-images\'", true); - WScript.Quit(2); - } - else { - // wait for emulator to get the ID - Log('Waiting for emulator...'); - var boot_anim = null; - var emulator_ID = null; - var new_started = null; - var i = 0; - while(emulator_ID == null && i < 10) { - new_started = get_started_emulators(); - if(new_started.length > started_emulators.length) { - // find new emulator that was just started to get it's ID - for(var i = 0; i < new_started.length; i++) { - if (new_started[i] != started_emulators[i]) { - emulator_ID = new_started[i].split(' ', 1)[0]; - boot_anim = exec_out('%comspec% /c adb -s ' + emulator_ID + ' shell getprop init.svc.bootanim'); - break; - } - } - } - } - if (i == 10) { - Log('\nEmulator start timed out.'); - WScript.Quit(2); - } - i = 0; - WScript.Stdout.Write('Booting up emulator (this may take a while).'); - // use boot animation property to tell when boot is complete. - while (!boot_anim.output.match(/stopped/) && i < 100) { - boot_anim = exec_out('%comspec% /c adb -s ' + emulator_ID + ' shell getprop init.svc.bootanim'); - i++; - WScript.Stdout.Write('.'); - WScript.Sleep(2000); - } - - if (i < 100) { - Log('\nBoot Complete!'); - // Unlock the device - shell.Exec("%comspec% /c adb -s " + emulator_ID + " shell input keyevent 82"); - } else { - Log('\nEmulator boot timed out. Failed to load emulator'); - WScript.Quit(2); - } - } -} - -function get_apk(path) { - // check if file .apk has been created - if (fso.FolderExists(path + '\\bin')) { - var path_to_apk; - var out_folder = fso.GetFolder(path + '\\bin'); - var out_files = new Enumerator(out_folder.Files); - for (;!out_files.atEnd(); out_files.moveNext()) { - var path = out_files.item() + ''; - if (fso.GetExtensionName(path) == 'apk' && !path.match(/unaligned/)) { - path_to_apk = out_files.item(); - break; - } - } - if (path_to_apk) { - return path_to_apk; - } - else { - Log('Failed to find apk, make sure you project is built and there is an ', true); - Log(' apk in \\bin\\. To build your project use \'\\cordova\\build\'', true); - WScript.Quit(2); - } - } -} - -function install_device(path) { - var devices = get_devices(); - var use_target = false; - if (devices.length < 1) { - Log("Error : No devices found to install to, make sure there are devices", true); - Log(" availible by checking \'\\cordova\\lib\\list-devices\'", true); - WScript.Quit(2); - } - launch(path, devices[0].split(' ', 1)[0], true); -} - -function install_emulator(path) { - var emulators = get_started_emulators(); - var use_target = false; - if (emulators.length < 1) { - Log("Error : No emulators found to install to, make sure there are emulators", true); - Log(" availible by checking \'\\cordova\\lib\\list-started-emulators\'", true); - WScript.Quit(2); - } - launch(path, emulators[0].split(' ', 1)[0], false); -} - -function install_target(path) { - if(device_id) { - var device = false; - var emulators = get_started_emulators(); - var devices = get_devices(); - var exists = false; - for (i in emulators) { - if (emulators[i].substr(0,device_id.length) == device_id) { - exists = true; - break; - } - } - for (i in devices) { - if (devices[i].substr(0,device_id.length) == device_id) { - exists = true; - device = true - break; - } - } - if (!exists) { - Log("Error : Unable to find target " + device_id, true); - Log("Please ensure the target exists by checking \'\\cordova\\lib\\list-started-emulators'"); - Log(" Or \'\\cordova\\lib\\list-devices'"); - } - launch(path, device_id, device); - } - else { - Log("You cannot install to a target without providing a valid target ID.", true); - WScript.Quit(2); - } -} - -function launch(path, id, device) { - if(id) { - var path_to_apk = get_apk(path); - if (path_to_apk) { - var launch_name = exec_out("%comspec% /c java -jar "+path+"\\cordova\\appinfo.jar "+path+"\\AndroidManifest.xml"); - if (launch_name.error) { - Log("Failed to get application name from appinfo.jar + AndroidManifest : ", true); - Log("Output : " + launch_name.output, true); - WScript.Quit(2); - } - if (device) { - // install on device (-d) - Log("Installing app on device..."); - } else { - // install on emulator (-e) - Log("Installing app on emulator..."); - } - var cmd = '%comspec% /c adb -s ' + id + ' install -r ' + path_to_apk; - var install = exec_out(cmd); - if ( install.error && install.output.match(/Failure/)) { - Log("Error : Could not install apk to emulator : ", true); - Log(install.output, true); - WScript.Quit(2); - } - else { - Log(install.output); - } - // launch the application - Log("Launching application..."); - cmd = '%comspec% /c adb -s ' + id + ' shell am start -W -a android.intent.action.MAIN -n ' + launch_name.output; - exec_verbose(cmd); - } - else { - Log('Failed to find apk, make sure you project is built and there is an ', true); - Log(' apk in \\bin\\. To build your project use \'\\cordova\\build\'', true); - WScript.Quit(2); - } - } - else { - Log("You cannot install to a target without providing a valid target ID.", true); - WScript.Quit(2); - } -} - -function clean(path) { - Log("Cleaning project..."); - exec("%comspec% /c ant.bat clean -f "+path+"\\build.xml 2>&1"); -} - -function log() { - // filter out nativeGetEnabledTags spam from latest sdk bug. - shell.Run("%comspec% /c adb logcat | grep -v nativeGetEnabledTags"); -} - -function build(path) { - switch (build_type) { - case DEBUG : - clean(path); - Log("Building project..."); - exec_verbose("%comspec% /c ant.bat debug -f "+path+"\\build.xml 2>&1"); - break; - case RELEASE : - clean(path); - Log("Building project..."); - exec_verbose("%comspec% /c ant.bat release -f "+path+"\\build.xml 2>&1"); - break; - case NO_BUILD : - Log("Skipping build process."); - break; - case NONE : - clean(path); - Log("WARNING: [ --debug | --release | --nobuild ] not specified, defaulting to --debug."); - exec_verbose("%comspec% /c ant.bat debug -f "+path+"\\build.xml 2>&1"); - break; - default : - Log("Build option not recognized: " + build_type, true); - WScript.Quit(2); - break; - } -} - -function run(path) { - switch(deploy_type) { - case EMULATOR : - build(path); - if(get_started_emulators().length == 0) { - start_emulator(); - } - //TODO : Start emulator if one isn't started, and create one if none exists. - install_emulator(path); - break; - case DEVICE : - build(path); - install_device(path); - break; - case TARGET : - build(path); - install_target(path); - break; - case NONE : - if (get_devices().length > 0) { - Log("WARNING: [ --target= | --emulator | --device ] not specified, defaulting to --device"); - deploy_type = DEVICE; - } else { - Log("WARNING: [ --target= | --emulator | --device ] not specified, defaulting to --emulator"); - deploy_type = EMULATOR; - } - run(path); - break; - default : - Log("Deploy option not recognized: " + deploy_type, true); - WScript.Quit(2); - break; - } -} - - -var args = WScript.Arguments; -if (args.count() == 0) { - Log("Error: no args provided."); - WScript.Quit(2); -} -else { - // parse command - switch(args(0)) { - case "version" : - version(ROOT); - break; - case "build" : - if(args.Count() > 1) { - if (args(1) == "--release") { - build_type = RELEASE; - } - else if (args(1) == "--debug") { - build_type = DEBUG; - } - else if (args(1) == "--nobuild") { - build_type = NO_BUILD; - } - else { - Log('Error: \"' + args(i) + '\" is not recognized as a build option', true); - WScript.Quit(2); - } - } - build(ROOT); - break; - case "clean" : - clean(); - break; - case "log" : - log(); - break; - case "list-devices" : - list_devices(); - break; - case "list-emulator-images" : - list_emulator_images(); - break; - case "list-started-emulators" : - list_started_emulators(); - break; - case "start-emulator" : - if (args.Count() > 1) { - start_emulator(args(1)) - } else { - start_emulator(); - } - break; - case "install-emulator" : - if (args.Count() == 2) { - if (args(1).substr(0,9) == "--target=") { - device_id = args(1).split('--target=').join(''); - install_emulator(ROOT); - } else { - Log('Error: \"' + args(1) + '\" is not recognized as an install option', true); - WScript.Quit(2); - } - } else { - install_emulator(ROOT); - } - break; - case "install-device" : - if (args.Count() == 2) { - if (args(1).substr(0,9) == "--target=") { - device_id = args(1).split('--target=').join(''); - install_target(ROOT); - } else { - Log('Error: \"' + args(1) + '\" is not recognized as an install option', true); - WScript.Quit(2); - } - } else { - install_device(ROOT); - } - break; - case "run" : - //parse args - for(var i = 1; i < args.Count(); i++) { - if (args(i) == "--release") { - build_type = RELEASE; - } - else if (args(i) == "--debug") { - build_type = DEBUG; - } - else if (args(i) == "--nobuild") { - build_type = NO_BUILD; - } - else if (args(i) == "--emulator" || args(i) == "-e") { - deploy_type = EMULATOR; - } - else if (args(i) == "--device" || args(i) == "-d") { - deploy_type = DEVICE; - } - else if (args(i).substr(0,9) == "--target=") { - device_id = args(i).split("--target=").join(""); - deploy_type = TARGET; - } - else { - Log('Error: \"' + args(i) + '\" is not recognized as a run option', true); - WScript.Quit(2); - } - } - run(ROOT); - break; - default : - Log("Cordova does not regognize the command " + args(0), true); - WScript.Quit(2); - break; - } -} -