2012-05-08 01:56:37 +08:00
/ *
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 .
* /
2011-08-21 04:42:46 +08:00
/ *
2012-02-02 09:45:49 +08:00
* create a cordova / android project
2011-08-21 04:42:46 +08:00
*
* USAGE
* . / create [ path package activity ]
* /
function read ( filename ) {
2012-05-17 10:38:11 +08:00
WScript . Echo ( 'Reading in ' + filename ) ;
2011-08-21 04:42:46 +08:00
var fso = WScript . CreateObject ( "Scripting.FileSystemObject" ) ;
2012-05-17 10:38:11 +08:00
var f = fso . OpenTextFile ( filename , 1 ) ;
2011-08-21 04:42:46 +08:00
var s = f . ReadAll ( ) ;
f . Close ( ) ;
return s ;
}
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 ) ) ;
}
2012-05-17 10:38:11 +08:00
function exec ( s , output ) {
WScript . Echo ( 'Executing ' + s ) ;
2011-08-21 04:42:46 +08:00
var o = shell . Exec ( s ) ;
2012-05-17 10:38:11 +08:00
while ( o . Status == 0 ) {
WScript . Sleep ( 100 ) ;
}
WScript . Echo ( "Command exited with code " + o . Status ) ;
}
2012-06-08 10:56:08 +08:00
//function fork(s) {
// WScript.Echo('Executing ' + s);
// var o=shell.Exec(s);
// while (o.Status != 1) {
// WScript.Sleep(100);
// }
// WScript.Echo(o.StdOut.ReadAll());
// WScript.Echo(o.StdErr.ReadAll());
// WScript.Echo("Command exited with code " + o.Status);
//}
2011-08-21 04:42:46 +08:00
var args = WScript . Arguments , PROJECT _PATH = "example" ,
2012-02-02 09:45:49 +08:00
PACKAGE = "org.apache.cordova.example" , ACTIVITY = "cordovaExample" ,
2011-08-21 04:42:46 +08:00
shell = WScript . CreateObject ( "WScript.Shell" ) ;
2012-05-18 01:59:38 +08:00
// working dir
var ROOT = WScript . ScriptFullName . split ( '\\bin\\create.js' ) . join ( '' ) ;
2011-08-21 04:42:46 +08:00
if ( args . Count ( ) == 3 ) {
WScript . Echo ( 'Found expected arguments' ) ;
PROJECT _PATH = args ( 0 ) ;
PACKAGE = args ( 1 ) ;
ACTIVITY = args ( 2 ) ;
}
var PACKAGE _AS _PATH = PACKAGE . replace ( /\./g , '\\' ) ;
var ACTIVITY _PATH = PROJECT _PATH + '\\src\\' + PACKAGE _AS _PATH + '\\' + ACTIVITY + '.java' ;
var MANIFEST _PATH = PROJECT _PATH + '\\AndroidManifest.xml' ;
var TARGET = shell . Exec ( 'android.bat list targets' ) . StdOut . ReadAll ( ) . match ( /id:\s([0-9]).*/ ) [ 1 ] ;
2012-06-08 10:56:08 +08:00
var VERSION = read ( ROOT + '\\VERSION' ) . replace ( /\r\n/ , '' ) . replace ( /\n/ , '' ) ;
2011-08-21 04:42:46 +08:00
2012-05-17 10:38:11 +08:00
WScript . Echo ( "Project path: " + PROJECT _PATH ) ;
WScript . Echo ( "Package: " + PACKAGE ) ;
WScript . Echo ( "Activity: " + ACTIVITY ) ;
WScript . Echo ( "Package as path: " + PACKAGE _AS _PATH ) ;
WScript . Echo ( "Activity path: " + ACTIVITY _PATH ) ;
WScript . Echo ( "Manifest path: " + MANIFEST _PATH ) ;
WScript . Echo ( "Cordova version: " + VERSION ) ;
2011-08-21 04:42:46 +08:00
// create the project
exec ( 'android.bat create project --target ' + TARGET + ' --path ' + PROJECT _PATH + ' --package ' + PACKAGE + ' --activity ' + ACTIVITY ) ;
2012-02-02 09:45:49 +08:00
// update the cordova framework project to a target that exists on this machine
2012-06-08 10:56:08 +08:00
exec ( 'android.bat update project --target ' + TARGET + ' --path ' + ROOT + '\\framework' ) ;
2011-08-21 04:42:46 +08:00
2012-05-18 01:59:38 +08:00
// pull down commons codec if necessary
var fso = WScript . CreateObject ( 'Scripting.FileSystemObject' ) ;
if ( ! fso . FileExists ( ROOT + '\\framework\\libs\\commons-codec-1.6.jar' ) ) {
// We need the .jar
var url = 'http://mirror.symnds.com/software/Apache//commons/codec/binaries/commons-codec-1.6-bin.zip' ;
2012-06-08 10:56:08 +08:00
var libsPath = ROOT + '\\framework\\libs' ;
var savePath = libsPath + '\\commons-codec-1.6-bin.zip' ;
2012-05-18 01:59:38 +08:00
if ( ! fso . FileExists ( savePath ) ) {
2012-06-08 10:56:08 +08:00
if ( ! fso . FolderExists ( ROOT + '\\framework\\libs' ) ) {
fso . CreateFolder ( libsPath ) ;
WScript . Echo ( 'Created new libs folder at ' + libsPath ) ;
}
2012-05-18 01:59:38 +08:00
// We need the zip to get the jar
var xhr = WScript . CreateObject ( 'MSXML2.XMLHTTP' ) ;
xhr . open ( 'GET' , url , false ) ;
xhr . send ( ) ;
if ( xhr . status == 200 ) {
var stream = WScript . CreateObject ( 'ADODB.Stream' ) ;
stream . Open ( ) ;
stream . Type = 1 ;
stream . Write ( xhr . ResponseBody ) ;
stream . Position = 0 ;
stream . SaveToFile ( savePath ) ;
stream . Close ( ) ;
} else {
WScript . Echo ( 'Could not retrieve the commons-codec. Please download it yourself and put into the framework/libs directory. This process may fail now. Sorry.' ) ;
}
}
var app = WScript . CreateObject ( 'Shell.Application' ) ;
var source = app . NameSpace ( savePath ) . Items ( ) ;
var target = app . NameSpace ( ROOT + '\\framework\\libs' ) ;
target . CopyHere ( source , 256 ) ;
// Move the jar into libs
fso . MoveFile ( ROOT + '\\framework\\libs\\commons-codec-1.6\\commons-codec-1.6.jar' , ROOT + '\\framework\\libs\\commons-codec-1.6.jar' ) ;
// Clean up
fso . DeleteFile ( ROOT + '\\framework\\libs\\commons-codec-1.6-bin.zip' ) ;
fso . DeleteFolder ( ROOT + '\\framework\\libs\\commons-codec-1.6' , true ) ;
}
2012-02-02 09:45:49 +08:00
// compile cordova.js and cordova.jar
2011-08-21 04:42:46 +08:00
// if you see an error about "Unable to resolve target" then you may need to
// update your android tools or install an additional Android platform version
2012-06-08 10:56:08 +08:00
exec ( 'ant.bat -f ' + ROOT + '\\framework\\build.xml jar' ) ;
2011-08-21 04:42:46 +08:00
// copy in the project template
2012-06-08 11:11:28 +08:00
exec ( 'cmd /c xcopy ' + ROOT + '\\bin\\templates\\project\\* ' + PROJECT _PATH + ' /S /Y' ) ;
2012-05-17 10:38:11 +08:00
2012-02-02 09:45:49 +08:00
// copy in cordova.js
2012-06-08 10:56:08 +08:00
exec ( 'cmd /c copy ' + ROOT + '\\framework\\assets\\js\\cordova.js ' + PROJECT _PATH + '\\assets\\www\\cordova-' + VERSION + '.js /Y' ) ;
2011-08-21 04:42:46 +08:00
2012-02-02 09:45:49 +08:00
// copy in cordova.jar
2012-06-08 10:56:08 +08:00
exec ( 'cmd /c copy ' + ROOT + '\\framework\\cordova-' + VERSION + '.jar ' + PROJECT _PATH + '\\libs\\cordova-' + VERSION + '.jar /Y' ) ;
2012-05-17 10:38:11 +08:00
// copy in xml
2012-06-08 10:56:08 +08:00
exec ( 'cmd /c copy ' + ROOT + '\\framework\\res\\xml\\cordova.xml ' + PROJECT _PATH + '\\res\\xml\\cordova.xml /Y' ) ;
exec ( 'cmd /c copy ' + ROOT + '\\framework\\res\\xml\\plugins.xml ' + PROJECT _PATH + '\\res\\xml\\plugins.xml /Y' ) ;
// interpolate the activity name and package
replaceInFile ( ACTIVITY _PATH , /__ACTIVITY__/ , ACTIVITY ) ;
replaceInFile ( ACTIVITY _PATH , /__ID__/ , PACKAGE ) ;
replaceInFile ( MANIFEST _PATH , /__ACTIVITY__/ , ACTIVITY ) ;
replaceInFile ( MANIFEST _PATH , /__PACKAGE__/ , PACKAGE ) ;
WScript . Echo ( 'Create completed successfully.' ) ;