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 ]
* /
2012-06-09 08:42:53 +08:00
var fso = WScript . CreateObject ( 'Scripting.FileSystemObject' ) ;
2011-08-21 04:42:46 +08:00
function read ( filename ) {
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 ) {
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 ) ;
}
2012-06-09 08:42:53 +08:00
//WScript.Echo("Command exited with code " + o.Status);
2012-05-17 10:38:11 +08:00
}
2012-06-09 08:42:53 +08:00
function cleanup ( ) {
// Cleanup
2012-06-14 06:52:26 +08:00
// if(fso.FileExists(ROOT + '\\framework\\libs\\commons-codec-1.6.jar')) {
// fso.DeleteFile(ROOT + '\\framework\\libs\\commons-codec-1.6.jar');
// fso.DeleteFolder(ROOT + '\\framework\\libs', true);
// }
2012-06-09 08:42:53 +08:00
if ( fso . FileExists ( ROOT + '\\framework\\cordova-' + VERSION + '.jar' ) ) {
fso . DeleteFile ( ROOT + '\\framework\\cordova-' + VERSION + '.jar' ) ;
}
if ( fso . FileExists ( ROOT + '\\framework\\assets\\www\\cordova-' + VERSION + '.js' ) ) {
fso . DeleteFile ( ROOT + '\\framework\\assets\\www\\cordova-' + VERSION + '.js' ) ;
}
}
2011-08-21 04:42:46 +08:00
2012-06-09 09:04:08 +08:00
function downloadCommonsCodec ( ) {
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' ;
var libsPath = ROOT + '\\framework\\libs' ;
var savePath = libsPath + '\\commons-codec-1.6-bin.zip' ;
if ( ! fso . FileExists ( savePath ) ) {
if ( ! fso . FolderExists ( ROOT + '\\framework\\libs' ) ) {
fso . CreateFolder ( libsPath ) ;
}
// 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 ) ;
}
}
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 ) {
PROJECT _PATH = args ( 0 ) ;
PACKAGE = args ( 1 ) ;
ACTIVITY = args ( 2 ) ;
}
2012-06-09 09:04:08 +08:00
if ( fso . FolderExists ( PROJECT _PATH ) ) {
WScript . Echo ( "Project already exists!" ) ;
WScript . Quit ( 1 ) ;
}
2011-08-21 04:42:46 +08:00
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
// 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
2012-06-09 09:04:08 +08:00
downloadCommonsCodec ( ) ;
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-09 08:42:53 +08:00
exec ( 'cmd /c copy ' + ROOT + '\\framework\\assets\\www\\cordova-' + VERSION + '.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 ) ;
2012-06-09 08:42:53 +08:00
cleanup ( ) ;