From 2df86f9f972d0e3149306b481ca5889f711c062c Mon Sep 17 00:00:00 2001 From: Nikhil Khandelwal Date: Tue, 3 May 2016 16:02:02 -0700 Subject: [PATCH 1/2] CB-11198 Skip android target sdk check --- bin/lib/check_reqs.js | 38 ++++++++++--------- .../cordova/lib/builders/AntBuilder.js | 13 ++++++- .../cordova/lib/builders/GradleBuilder.js | 5 +++ 3 files changed, 37 insertions(+), 19 deletions(-) diff --git a/bin/lib/check_reqs.js b/bin/lib/check_reqs.js index 73b2b998f..3b9fce851 100644 --- a/bin/lib/check_reqs.js +++ b/bin/lib/check_reqs.js @@ -142,22 +142,20 @@ module.exports.check_java = function() { } } }).then(function() { - var msg = - 'Failed to run "java -version", make sure that you have a JDK installed.\n' + - 'You can get it from: http://www.oracle.com/technetwork/java/javase/downloads.\n'; - if (process.env['JAVA_HOME']) { - msg += 'Your JAVA_HOME is invalid: ' + process.env['JAVA_HOME'] + '\n'; - } - return tryCommand('java -version', msg) - .then(function() { + var msg = + 'Failed to run "javac -version", make sure that you have a JDK installed.\n' + + 'You can get it from: http://www.oracle.com/technetwork/java/javase/downloads.\n'; + if (process.env['JAVA_HOME']) { + msg += 'Your JAVA_HOME is invalid: ' + process.env['JAVA_HOME'] + '\n'; + } // We use tryCommand with catchStderr = true, because // javac writes version info to stderr instead of stdout - return tryCommand('javac -version', msg, true); - }).then(function (output) { - var match = /javac ((?:\d+\.)+(?:\d+))/i.exec(output)[1]; - return match && match[1]; + return tryCommand('javac -version', msg, true) + .then(function (output) { + var match = /javac ((?:\d+\.)+(?:\d+))/i.exec(output); + return match && match[1]; + }); }); - }); }; // Returns a promise. @@ -238,13 +236,13 @@ module.exports.getAbsoluteAndroidCmd = function () { return cmd.replace(/(\s)/g, '\\$1'); }; -module.exports.check_android_target = function(valid_target) { +module.exports.check_android_target = function(originalError) { // valid_target can look like: // android-19 // android-L // Google Inc.:Google APIs:20 // Google Inc.:Glass Development Kit Preview:20 - if (!valid_target) valid_target = module.exports.get_target(); + var valid_target = module.exports.get_target(); var msg = 'Android SDK not found. Make sure that it is installed. If it is not at the default location, set the ANDROID_HOME environment variable.'; return tryCommand('android list targets --compact', msg) .then(function(output) { @@ -254,18 +252,22 @@ module.exports.check_android_target = function(valid_target) { } var androidCmd = module.exports.getAbsoluteAndroidCmd(); - throw new CordovaError('Please install Android target: "' + valid_target + '".\n\n' + + var msg = 'Please install Android target: "' + valid_target + '".\n\n' + 'Hint: Open the SDK manager by running: ' + androidCmd + '\n' + 'You will require:\n' + '1. "SDK Platform" for ' + valid_target + '\n' + '2. "Android SDK Platform-tools (latest)\n' + - '3. "Android SDK Build-tools" (latest)'); + '3. "Android SDK Build-tools" (latest)' + if (originalError) { + msg = originalError + '\n' + msg; + } + throw new CordovaError(msg); }); }; // Returns a promise. module.exports.run = function() { - return Q.all([this.check_java(), this.check_android().then(this.check_android_target)]) + return Q.all([this.check_java(), this.check_android()]) .then(function() { console.log('ANDROID_HOME=' + process.env['ANDROID_HOME']); console.log('JAVA_HOME=' + process.env['JAVA_HOME']); diff --git a/bin/templates/cordova/lib/builders/AntBuilder.js b/bin/templates/cordova/lib/builders/AntBuilder.js index 7094fe510..78b2c8426 100644 --- a/bin/templates/cordova/lib/builders/AntBuilder.js +++ b/bin/templates/cordova/lib/builders/AntBuilder.js @@ -107,7 +107,18 @@ AntBuilder.prototype.build = function(opts) { var args = this.getArgs(opts.buildType == 'debug' ? 'debug' : 'release', opts); return check_reqs.check_ant() .then(function() { - return spawn('ant', args, {stdio: 'inherit'}); + return spawn('ant', args, {stdio: 'pipe'}); + }).progress(function (stdio){ + if (stdio.stderr) { + process.stderr.write(stdio.stderr); + } else { + process.stdout.write(stdio.stdout); + } + }).catch(function (error) { + if (error.toString().indexOf('Unable to resolve project target') >= 0) { + return check_reqs.check_android_target(error); + } + return Q.reject(error); }); }; diff --git a/bin/templates/cordova/lib/builders/GradleBuilder.js b/bin/templates/cordova/lib/builders/GradleBuilder.js index 0f836598c..b631d6a8b 100644 --- a/bin/templates/cordova/lib/builders/GradleBuilder.js +++ b/bin/templates/cordova/lib/builders/GradleBuilder.js @@ -203,6 +203,11 @@ GradleBuilder.prototype.build = function(opts) { } else { process.stdout.write(stdio.stdout); } + }).catch(function (error) { + if (error.toString().indexOf('failed to find target with hash string') >= 0) { + return check_reqs.check_android_target(error); + } + return Q.reject(error); }); }; From d6093c3d67b474e052fc6745ab8cd5525f6805e2 Mon Sep 17 00:00:00 2001 From: Nikhil Khandelwal Date: Thu, 5 May 2016 16:49:16 -0700 Subject: [PATCH 2/2] Fix code review feedback --- bin/lib/check_reqs.js | 2 +- bin/templates/cordova/lib/builders/AntBuilder.js | 6 +++++- bin/templates/cordova/lib/builders/GradleBuilder.js | 6 +++++- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/bin/lib/check_reqs.js b/bin/lib/check_reqs.js index 3b9fce851..f27f325bd 100644 --- a/bin/lib/check_reqs.js +++ b/bin/lib/check_reqs.js @@ -257,7 +257,7 @@ module.exports.check_android_target = function(originalError) { 'You will require:\n' + '1. "SDK Platform" for ' + valid_target + '\n' + '2. "Android SDK Platform-tools (latest)\n' + - '3. "Android SDK Build-tools" (latest)' + '3. "Android SDK Build-tools" (latest)'; if (originalError) { msg = originalError + '\n' + msg; } diff --git a/bin/templates/cordova/lib/builders/AntBuilder.js b/bin/templates/cordova/lib/builders/AntBuilder.js index 78b2c8426..5b2b10409 100644 --- a/bin/templates/cordova/lib/builders/AntBuilder.js +++ b/bin/templates/cordova/lib/builders/AntBuilder.js @@ -116,7 +116,11 @@ AntBuilder.prototype.build = function(opts) { } }).catch(function (error) { if (error.toString().indexOf('Unable to resolve project target') >= 0) { - return check_reqs.check_android_target(error); + return check_reqs.check_android_target(error).then(function() { + // If due to some odd reason - check_android_target succeeds + // we should still fail here. + return Q.reject(error); + }); } return Q.reject(error); }); diff --git a/bin/templates/cordova/lib/builders/GradleBuilder.js b/bin/templates/cordova/lib/builders/GradleBuilder.js index b631d6a8b..325ea559d 100644 --- a/bin/templates/cordova/lib/builders/GradleBuilder.js +++ b/bin/templates/cordova/lib/builders/GradleBuilder.js @@ -205,7 +205,11 @@ GradleBuilder.prototype.build = function(opts) { } }).catch(function (error) { if (error.toString().indexOf('failed to find target with hash string') >= 0) { - return check_reqs.check_android_target(error); + return check_reqs.check_android_target(error).then(function() { + // If due to some odd reason - check_android_target succeeds + // we should still fail here. + return Q.reject(error); + }); } return Q.reject(error); });