CB-3445: android: Copy Gradle wrapper from Android SDK rather than bundling a JAR

This commit is contained in:
Ian Clelland
2014-06-19 16:12:40 -04:00
parent 3a9898a6a6
commit 0ffb5d253a
5 changed files with 31 additions and 263 deletions

View File

@@ -24,6 +24,7 @@ var shell = require('shelljs'),
Q = require('q'),
path = require('path'),
fs = require('fs'),
which = require('which'),
ROOT = path.join(__dirname, '..', '..');
// Get valid target from framework/project.properties
@@ -40,6 +41,23 @@ module.exports.get_target = function() {
}
}
// Returns a promise.
module.exports.sdk_dir = function() {
var d = Q.defer();
which('android', function(err, path) {
if (err) {
d.reject(new Error('ERROR: Cannot find Android SDK. android command not found.'));
} else {
var toolsDir = path.substring(0, path.lastIndexOf('/'));
if (toolsDir.substring(toolsDir.length-6) != "/tools") {
d.reject(new Error('ERROR: Cannot find Android SDK. android command not found in tools dir.'));
}
d.resolve(toolsDir.substring(0, toolsDir.length-6));
}
});
return d.promise;
};
// Returns a promise.
module.exports.check_ant = function() {
var d = Q.defer();

View File

@@ -109,6 +109,13 @@ function copyScripts(projectPath) {
shell.cp(path.join(ROOT, 'bin', 'lib', 'android_sdk_version.js'), path.join(projectPath, 'cordova', 'lib', 'android_sdk_version.js'));
}
function copyGradleWrapper(sdkPath, projectPath) {
var wrapperDir = path.join(sdkPath, 'tools', 'templates','gradle','wrapper');
shell.cp(path.join(wrapperDir, 'gradlew'), projectPath);
shell.cp(path.join(wrapperDir, 'gradlew.bat'), projectPath);
shell.cp('-r', path.join(wrapperDir, 'gradle'), projectPath);
}
/**
* $ create [options]
*
@@ -177,9 +184,12 @@ exports.createProject = function(project_path, package_name, project_name, proje
shell.cp('-f', path.join(project_template_dir, 'build.gradle'), project_path);
shell.cp('-f', path.join(project_template_dir, 'libraries.gradle'), project_path);
shell.cp('-f', path.join(project_template_dir, 'settings.gradle'), project_path);
shell.cp('-f', path.join(project_template_dir, 'gradlew'), project_path);
shell.cp('-f', path.join(project_template_dir, 'gradlew.bat'), project_path);
shell.cp('-r', path.join(project_template_dir, 'gradle'), project_path);
check_reqs.sdk_dir().then(function(dir) {
console.log("Copying Gradle wrapper from " + dir);
copyGradleWrapper(dir, project_path);
}).catch(function(err) {
console.log("Cannot find Android SDK. Not installing Gradle wrapper.");
});
// Manually create directories that would be empty within the template (since git doesn't track directories).
shell.mkdir(path.join(project_path, 'libs'));