mirror of
https://github.com/apache/cordova-android.git
synced 2025-01-19 07:02:51 +08:00
CB-5232 Change create script to use Cordova as a library.
This commit is contained in:
parent
8b379cbf56
commit
fd954adc81
17
bin/create
17
bin/create
@ -20,20 +20,17 @@
|
|||||||
*/
|
*/
|
||||||
var path = require('path');
|
var path = require('path');
|
||||||
var create = require('./lib/create');
|
var create = require('./lib/create');
|
||||||
var args = process.argv;
|
var args = require('./lib/simpleargs').getArgs(process.argv);
|
||||||
|
|
||||||
// Support basic help commands
|
if (args['--help'] || args._.length === 0) {
|
||||||
if(args.length < 3 || (args[2] == '--help' || args[2] == '/?' || args[2] == '-h' ||
|
console.log('Usage: ' + path.relative(process.cwd(), path.join(__dirname, 'create')) + ' <path_to_new_project> <package_name> <project_name> [<template_path>] [--shared]');
|
||||||
args[2] == 'help' || args[2] == '-help' || args[2] == '/help')) {
|
|
||||||
console.log('Usage: ' + path.relative(process.cwd(), path.join(__dirname, 'create')) + ' <path_to_new_project> <package_name> <project_name>');
|
|
||||||
console.log(' <path_to_new_project>: Path to your new Cordova Android project');
|
console.log(' <path_to_new_project>: Path to your new Cordova Android project');
|
||||||
console.log(' <package_name>: Package name, following reverse-domain style convention');
|
console.log(' <package_name>: Package name, following reverse-domain style convention');
|
||||||
console.log(' <project_name>: Project name');
|
console.log(' <project_name>: Project name');
|
||||||
|
console.log(' <template_path>: Path to a custom application template to use');
|
||||||
|
console.log(' --shared will use the CordovaLib project directly instead of making a copy.');
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
} else {
|
|
||||||
create.createProject(args[2], args[3], args[4], args[5]).done(null, function(err) {
|
|
||||||
console.error(err);
|
|
||||||
process.exit(2);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
create.createProject(args._[0], args._[1], args._[2], args._[3], args['--shared']).done();
|
||||||
|
|
||||||
|
@ -29,14 +29,13 @@ var shell = require('shelljs'),
|
|||||||
// Returns a promise.
|
// Returns a promise.
|
||||||
function exec(command, opt_cwd) {
|
function exec(command, opt_cwd) {
|
||||||
var d = Q.defer();
|
var d = Q.defer();
|
||||||
try {
|
console.log('Running: ' + command);
|
||||||
child_process.exec(command, { cwd: opt_cwd }, function(err, stdout, stderr) {
|
child_process.exec(command, { cwd: opt_cwd }, function(err, stdout, stderr) {
|
||||||
if (err) d.reject(err);
|
stdout && console.log(stdout);
|
||||||
else d.resolve(stdout);
|
stderr && console.error(stderr);
|
||||||
});
|
if (err) d.reject(err);
|
||||||
} catch(e) {
|
else d.resolve(stdout);
|
||||||
return Q.reject('Command error on execution: ' + command + '\n' + e);
|
});
|
||||||
}
|
|
||||||
return d.promise;
|
return d.promise;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -47,32 +46,45 @@ function setShellFatal(value, func) {
|
|||||||
shell.config.fatal = oldVal;
|
shell.config.fatal = oldVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns a promise.
|
function getFrameworkDir(projectPath, shared) {
|
||||||
function ensureJarIsBuilt(version, target_api) {
|
return shared ? path.join(ROOT, 'framework') : path.join(projectPath, 'CordovaLib');
|
||||||
var isDevVersion = /-dev$/.test(version);
|
|
||||||
if (isDevVersion || !fs.existsSync(path.join(ROOT, 'framework', 'cordova-' + version + '.jar')) && fs.existsSync(path.join(ROOT, 'framework'))) {
|
|
||||||
var valid_target = check_reqs.get_target();
|
|
||||||
console.log('Building cordova-' + version + '.jar');
|
|
||||||
// update the cordova-android framework for the desired target
|
|
||||||
return exec('android --silent update lib-project --target "' + target_api + '" --path "' + path.join(ROOT, 'framework') + '"')
|
|
||||||
.then(function() {
|
|
||||||
// compile cordova.js and cordova.jar
|
|
||||||
return exec('ant jar', path.join(ROOT, 'framework'));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return Q();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function copyJsAndJar(projectPath, version) {
|
function copyJsAndLibrary(projectPath, shared, projectName) {
|
||||||
|
var nestedCordovaLibPath = getFrameworkDir(projectPath, false);
|
||||||
shell.cp('-f', path.join(ROOT, 'framework', 'assets', 'www', 'cordova.js'), path.join(projectPath, 'assets', 'www', 'cordova.js'));
|
shell.cp('-f', path.join(ROOT, 'framework', 'assets', 'www', 'cordova.js'), path.join(projectPath, 'assets', 'www', 'cordova.js'));
|
||||||
// Don't fail if there are no old jars.
|
// Don't fail if there are no old jars.
|
||||||
setShellFatal(false, function() {
|
setShellFatal(false, function() {
|
||||||
shell.ls(path.join(projectPath, 'libs', 'cordova-*.jar')).forEach(function(oldJar) {
|
shell.ls(path.join(projectPath, 'libs', 'cordova-*.jar')).forEach(function(oldJar) {
|
||||||
console.log("Deleting " + oldJar);
|
console.log("Deleting " + oldJar);
|
||||||
shell.rm('-f', path.join(oldJar));
|
shell.rm('-f', oldJar);
|
||||||
});
|
});
|
||||||
|
// Delete old library project if it existed.
|
||||||
|
if (shared) {
|
||||||
|
shell.rm('-rf', nestedCordovaLibPath);
|
||||||
|
} else {
|
||||||
|
// Delete only the src, since eclipse can't handle its .project file being deleted.
|
||||||
|
shell.rm('-rf', path.join(nestedCordovaLibPath, 'src'));
|
||||||
|
}
|
||||||
});
|
});
|
||||||
shell.cp('-f', path.join(ROOT, 'framework', 'cordova-' + version + '.jar'), path.join(projectPath, 'libs', 'cordova-' + version + '.jar'));
|
if (!shared) {
|
||||||
|
shell.mkdir('-p', nestedCordovaLibPath);
|
||||||
|
shell.cp('-f', path.join(ROOT, 'framework', 'AndroidManifest.xml'), nestedCordovaLibPath);
|
||||||
|
shell.cp('-f', path.join(ROOT, 'framework', 'project.properties'), nestedCordovaLibPath);
|
||||||
|
shell.cp('-r', path.join(ROOT, 'framework', 'src'), nestedCordovaLibPath);
|
||||||
|
// Create an eclipse project file and set the name of it to something unique.
|
||||||
|
// Without this, you can't import multiple CordovaLib projects into the same workspace.
|
||||||
|
var eclipseProjectFilePath = path.join(nestedCordovaLibPath, '.project');
|
||||||
|
if (!fs.existsSync(eclipseProjectFilePath)) {
|
||||||
|
var data = '<?xml version="1.0" encoding="UTF-8"?><projectDescription><name>' + projectName + '-' + 'CordovaLib</name></projectDescription>';
|
||||||
|
fs.writeFileSync(eclipseProjectFilePath, data, 'utf8');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function runAndroidUpdate(projectPath, target_api, shared) {
|
||||||
|
var targetFrameworkDir = getFrameworkDir(projectPath, shared);
|
||||||
|
return exec('android update project --subprojects --path "' + projectPath + '" --target ' + target_api + ' --library "' + path.relative(projectPath, targetFrameworkDir) + '"');
|
||||||
}
|
}
|
||||||
|
|
||||||
function copyScripts(projectPath) {
|
function copyScripts(projectPath) {
|
||||||
@ -104,7 +116,7 @@ function copyScripts(projectPath) {
|
|||||||
* Returns a promise.
|
* Returns a promise.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
exports.createProject = function(project_path, package_name, project_name, project_template_dir) {
|
exports.createProject = function(project_path, package_name, project_name, project_template_dir, use_shared_project) {
|
||||||
var VERSION = fs.readFileSync(path.join(ROOT, 'VERSION'), 'utf-8').trim();
|
var VERSION = fs.readFileSync(path.join(ROOT, 'VERSION'), 'utf-8').trim();
|
||||||
|
|
||||||
// Set default values for path, package and name
|
// Set default values for path, package and name
|
||||||
@ -142,9 +154,6 @@ exports.createProject = function(project_path, package_name, project_name, proje
|
|||||||
console.log('\tName: ' + project_name);
|
console.log('\tName: ' + project_name);
|
||||||
console.log('\tAndroid target: ' + target_api);
|
console.log('\tAndroid target: ' + target_api);
|
||||||
|
|
||||||
// build from source. distro should have these files
|
|
||||||
return ensureJarIsBuilt(VERSION, target_api);
|
|
||||||
}).then(function() {
|
|
||||||
console.log('Copying template files...');
|
console.log('Copying template files...');
|
||||||
|
|
||||||
setShellFatal(true, function() {
|
setShellFatal(true, function() {
|
||||||
@ -156,7 +165,7 @@ exports.createProject = function(project_path, package_name, project_name, proje
|
|||||||
|
|
||||||
// copy cordova.js, cordova.jar and res/xml
|
// copy cordova.js, cordova.jar and res/xml
|
||||||
shell.cp('-r', path.join(ROOT, 'framework', 'res', 'xml'), path.join(project_path, 'res'));
|
shell.cp('-r', path.join(ROOT, 'framework', 'res', 'xml'), path.join(project_path, 'res'));
|
||||||
copyJsAndJar(project_path, VERSION);
|
copyJsAndLibrary(project_path, use_shared_project, safe_activity_name);
|
||||||
|
|
||||||
// interpolate the activity name and package
|
// interpolate the activity name and package
|
||||||
shell.mkdir('-p', activity_dir);
|
shell.mkdir('-p', activity_dir);
|
||||||
@ -172,8 +181,7 @@ exports.createProject = function(project_path, package_name, project_name, proje
|
|||||||
copyScripts(project_path);
|
copyScripts(project_path);
|
||||||
});
|
});
|
||||||
// Link it to local android install.
|
// Link it to local android install.
|
||||||
console.log('Running "android update project"');
|
return runAndroidUpdate(project_path, target_api, use_shared_project);
|
||||||
return exec('android --silent update project --target "'+target_api+'" --path "'+ project_path+'"');
|
|
||||||
}).then(function() {
|
}).then(function() {
|
||||||
console.log('Project successfully created.');
|
console.log('Project successfully created.');
|
||||||
});
|
});
|
||||||
@ -186,11 +194,12 @@ exports.updateProject = function(projectPath) {
|
|||||||
return check_reqs.run()
|
return check_reqs.run()
|
||||||
.then(function() {
|
.then(function() {
|
||||||
var target_api = check_reqs.get_target();
|
var target_api = check_reqs.get_target();
|
||||||
return ensureJarIsBuilt(version, target_api);
|
copyJsAndLibrary(projectPath, false, null);
|
||||||
}).then(function() {
|
|
||||||
copyJsAndJar(projectPath, version);
|
|
||||||
copyScripts(projectPath);
|
copyScripts(projectPath);
|
||||||
console.log('Android project is now at version ' + version);
|
return runAndroidUpdate(projectPath, target_api, false)
|
||||||
|
.then(function() {
|
||||||
|
console.log('Android project is now at version ' + version);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
32
bin/lib/simpleargs.js
Normal file
32
bin/lib/simpleargs.js
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
/*
|
||||||
|
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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
exports.getArgs = function(argv) {
|
||||||
|
var ret = {};
|
||||||
|
var posArgs = [];
|
||||||
|
for (var i = 2, arg; arg = argv[i] || i < argv.length; ++i) {
|
||||||
|
if (/^--/.exec(arg)) {
|
||||||
|
ret[arg] = true;
|
||||||
|
} else {
|
||||||
|
posArgs.push(arg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ret._ = posArgs;
|
||||||
|
return ret;
|
||||||
|
};
|
15
bin/update
15
bin/update
@ -19,18 +19,13 @@
|
|||||||
under the License.
|
under the License.
|
||||||
*/
|
*/
|
||||||
var path = require('path');
|
var path = require('path');
|
||||||
var args = process.argv;
|
|
||||||
var create = require('./lib/create');
|
var create = require('./lib/create');
|
||||||
|
var args = require('./lib/simpleargs').getArgs(process.argv);
|
||||||
|
|
||||||
// Support basic help commands
|
if (args['--help'] || args._.length === 0) {
|
||||||
if(args.length < 3 || (args[2] == '--help' || args[2] == '/?' || args[2] == '-h' ||
|
console.log('Usage: ' + path.relative(process.cwd(), path.join(__dirname, 'update')) + ' <path_to_project> [--shared]');
|
||||||
args[2] == 'help' || args[2] == '-help' || args[2] == '/help')) {
|
console.log(' --shared will use the CordovaLib project directly instead of making a copy.');
|
||||||
console.log('Usage: ' + path.relative(process.cwd(), path.join(__dirname, 'update')) + ' <path_to_project>');
|
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
} else {
|
|
||||||
create.updateProject(args[2]).done(null, function(err) {
|
|
||||||
console.error(err);
|
|
||||||
process.exit(2);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
create.updateProject(args._[0], args['--shared']).done();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user