You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by ag...@apache.org on 2015/01/06 21:56:52 UTC
android commit: CB-8255 Use properties rather than environment
variables for gradle settings
Repository: cordova-android
Updated Branches:
refs/heads/gradle-props [created] 2ddebd36d
CB-8255 Use properties rather than environment variables for gradle settings
Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/2ddebd36
Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/2ddebd36
Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/2ddebd36
Branch: refs/heads/gradle-props
Commit: 2ddebd36dd866eb3e3e298a03cc943d7f334a5c4
Parents: c1ac3aa
Author: Andrew Grieve <ag...@chromium.org>
Authored: Tue Jan 6 15:56:09 2015 -0500
Committer: Andrew Grieve <ag...@chromium.org>
Committed: Tue Jan 6 15:56:09 2015 -0500
----------------------------------------------------------------------
bin/templates/cordova/lib/build.js | 39 ++++---
bin/templates/cordova/lib/plugin-build.gradle | 4 +-
bin/templates/cordova/lib/run.js | 13 +--
bin/templates/project/build.gradle | 120 +++++++++++----------
bin/templates/project/cordova.gradle | 47 +++++++-
5 files changed, 139 insertions(+), 84 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/2ddebd36/bin/templates/cordova/lib/build.js
----------------------------------------------------------------------
diff --git a/bin/templates/cordova/lib/build.js b/bin/templates/cordova/lib/build.js
index 3a08c3d..1eb0654 100644
--- a/bin/templates/cordova/lib/build.js
+++ b/bin/templates/cordova/lib/build.js
@@ -174,7 +174,8 @@ var builders = {
}
},
gradle: {
- getArgs: function(cmd, arch) {
+ getArgs: function(cmd, arch, extraArgs) {
+ extraArgs = extraArgs || [];
if (arch == 'arm' && cmd == 'debug') {
cmd = 'assembleArmv7Debug';
} else if (arch == 'arm' && cmd == 'release') {
@@ -191,6 +192,7 @@ var builders = {
var args = [cmd, '-b', path.join(ROOT, 'build.gradle')];
// 10 seconds -> 6 seconds
args.push('-Dorg.gradle.daemon=true');
+ args.push.apply(args, extraArgs);
// Shaves another 100ms, but produces a "try at own risk" warning. Not worth it (yet):
// args.push('-Dorg.gradle.parallel=true');
return args;
@@ -254,20 +256,22 @@ var builders = {
* Builds the project with gradle.
* Returns a promise.
*/
- build: function(build_type, arch) {
+ build: function(build_type, arch, extraArgs) {
var builder = this;
var wrapper = path.join(ROOT, 'gradlew');
- var args = this.getArgs(build_type == 'debug' ? 'debug' : 'release', arch);
+ var args = this.getArgs(build_type == 'debug' ? 'debug' : 'release', arch, extraArgs);
return Q().then(function() {
+ console.log('Running: ' + wrapper + ' ' + extraArgs.join(' '));
return spawn(wrapper, args);
});
},
- clean: function() {
+ clean: function(extraArgs) {
var builder = this;
var wrapper = path.join(ROOT, 'gradlew');
- var args = builder.getArgs('clean');
+ var args = builder.getArgs('clean', null, extraArgs);
return Q().then(function() {
+ console.log('Running: ' + wrapper + ' ' + extraArgs.join(' '));
return spawn(wrapper, args);
});
},
@@ -301,8 +305,15 @@ function parseOpts(options, resolvedTarget) {
var ret = {
buildType: 'debug',
- buildMethod: process.env['ANDROID_BUILD'] || 'ant',
- arch: null
+ buildMethod: process.env['ANDROID_BUILD'] || 'gradle',
+ arch: null,
+ extraArgs: []
+ };
+
+ var multiValueArgs = {
+ 'versionCode': true,
+ 'minSdkVersion': true,
+ 'gradleArg': true
};
// Iterate through command line options
@@ -311,7 +322,7 @@ function parseOpts(options, resolvedTarget) {
var keyValue = options[i].substring(2).split('=');
var flagName = keyValue[0];
var flagValue = keyValue[1];
- if ((flagName == 'versionCode' || flagName == 'minSdkVersion') && !flagValue) {
+ if (multiValueArgs[flagName] && !flagValue) {
flagValue = options[i + 1];
++i;
}
@@ -333,10 +344,13 @@ function parseOpts(options, resolvedTarget) {
ret.buildMethod = 'none';
break;
case 'versionCode':
- process.env['ANDROID_VERSION_CODE'] = flagValue;
+ ret.extraArgs.push('-PcdvVersionCode=' + flagValue);
break;
case 'minSdkVersion':
- process.env['ANDROID_MIN_SDK_VERSION'] = flagValue;
+ ret.extraArgs.push('-PcdvMinSdkVersion=' + flagValue);
+ break;
+ case 'gradleArg':
+ ret.extraArgs.push(flagValue);
break;
default :
console.warn('Build option --\'' + flagName + '\' not recognized (ignoring).');
@@ -363,7 +377,7 @@ module.exports.runClean = function(options) {
var builder = builders[opts.buildMethod];
return builder.prepEnv()
.then(function() {
- return builder.clean();
+ return builder.clean(opts.extraArgs);
}).then(function() {
shell.rm('-rf', path.join(ROOT, 'out'));
});
@@ -378,7 +392,7 @@ module.exports.run = function(options, optResolvedTarget) {
var builder = builders[opts.buildMethod];
return builder.prepEnv()
.then(function() {
- return builder.build(opts.buildType, opts.arch);
+ return builder.build(opts.buildType, opts.arch, opts.extraArgs);
}).then(function() {
var apkPaths = builder.findOutputApks(opts.buildType, opts.arch);
console.log('Built the following apk(s):');
@@ -468,5 +482,6 @@ module.exports.help = function() {
console.log(' \'--nobuild\': will skip build process (useful when using run command)');
console.log(' \'--versionCode=#\': Override versionCode for this build. Useful for uploading multiple APKs. Requires --gradle.');
console.log(' \'--minSdkVersion=#\': Override minSdkVersion for this build. Useful for uploading multiple APKs. Requires --gradle.');
+ console.log(' \'--gradleArg=-PcdvVersionCode=1\': Extra args to pass to the gradle command. Use one flag per arg.');
process.exit(0);
};
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/2ddebd36/bin/templates/cordova/lib/plugin-build.gradle
----------------------------------------------------------------------
diff --git a/bin/templates/cordova/lib/plugin-build.gradle b/bin/templates/cordova/lib/plugin-build.gradle
index f062588..b345b90 100644
--- a/bin/templates/cordova/lib/plugin-build.gradle
+++ b/bin/templates/cordova/lib/plugin-build.gradle
@@ -51,8 +51,8 @@ dependencies {
}
android {
- compileSdkVersion cordova.cordovaSdkVersion
- buildToolsVersion cordova.cordovaBuildToolsVersion
+ compileSdkVersion cdvCompileSdkVersion
+ buildToolsVersion cdvBuildToolsVersion
publishNonDefault true
compileOptions {
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/2ddebd36/bin/templates/cordova/lib/run.js
----------------------------------------------------------------------
diff --git a/bin/templates/cordova/lib/run.js b/bin/templates/cordova/lib/run.js
index 12f178c..db783d9 100644
--- a/bin/templates/cordova/lib/run.js
+++ b/bin/templates/cordova/lib/run.js
@@ -39,23 +39,18 @@ var path = require('path'),
var list = false;
for (var i=2; i<args.length; i++) {
- if (args[i] == '--debug') {
- buildFlags.push('--debug');
- } else if (args[i] == '--release') {
- buildFlags.push('--release');
- } else if (args[i] == '--nobuild') {
- buildFlags.push('--nobuild');
+ if (/^--(debug|release|nobuild|versionCode=|minSdkVersion=|gradleArg=)/.exec(args[i])) {
+ buildFlags.push(args[i]);
} else if (args[i] == '--device') {
install_target = '--device';
} else if (args[i] == '--emulator') {
install_target = '--emulator';
- } else if (args[i].substring(0, 9) == '--target=') {
+ } else if (/^--target=/.exec(args[i])) {
install_target = args[i].substring(9, args[i].length);
} else if (args[i] == '--list') {
list = true;
} else {
- console.error('ERROR : Run option \'' + args[i] + '\' not recognized.');
- process.exit(2);
+ console.warn('Option \'' + options[i] + '\' not recognized (ignoring).');
}
}
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/2ddebd36/bin/templates/project/build.gradle
----------------------------------------------------------------------
diff --git a/bin/templates/project/build.gradle b/bin/templates/project/build.gradle
index 75000e4..adbee75 100644
--- a/bin/templates/project/build.gradle
+++ b/bin/templates/project/build.gradle
@@ -19,11 +19,6 @@
// GENERATED FILE! DO NOT EDIT!
-import java.util.regex.Pattern
-import groovy.swing.SwingBuilder
-
-ext.cordova = {}
-apply from: 'cordova.gradle', to: ext.cordova
apply plugin: 'android'
buildscript {
@@ -59,7 +54,44 @@ task wrapper(type: Wrapper) {
gradleVersion = '2.2.1'
}
-ext.multiarch=false
+// Configuration properties. Set these via environment variables, build-extras.gradle, or gradle.properties.
+// Refer to: http://www.gradle.org/docs/current/userguide/tutorial_this_and_that.html
+ext {
+ apply from: 'cordova.gradle'
+ // The value for android.compileSdkVersion.
+ if (!project.hasProperty('cdvCompileSdkVersion')) {
+ cdvCompileSdkVersion = privateHelpers.getProjectTarget('android-19')
+ }
+ // The value for android.buildToolsVersion.
+ if (!project.hasProperty('cdvBuildToolsVersion')) {
+ cdvBuildToolsVersion = privateHelpers.findLatestInstalledBuildTools('19.1.0')
+ }
+ // Sets the versionCode to the given value.
+ if (!project.hasProperty('cdvVersionCode')) {
+ cdvVersionCode = null
+ }
+ // Sets the minSdkVersion to the given value.
+ if (!project.hasProperty('cdvMinSdkVersion')) {
+ cdvMinSdkVersion = null
+ }
+ // Whether to build architecture-specific APKs.
+ if (!project.hasProperty('cdvBuildMultipleApks')) {
+ cdvBuildMultipleApks = false
+ }
+ // .properties files to use for release signing.
+ if (!project.hasProperty('cdvReleaseSigningPropertiesFile')) {
+ cdvReleaseSigningPropertiesFile = null
+ }
+ // .properties files to use for debug signing.
+ if (!project.hasProperty('cdvDebugSigningPropertiesFile')) {
+ cdvDebugSigningPropertiesFile = null
+ }
+}
+
+def hasBuildExtras = file('build-extras.gradle').exists()
+if (hasBuildExtras) {
+ apply from: 'build-extras.gradle'
+}
// PLUGIN GRADLE EXTENSIONS START
// PLUGIN GRADLE EXTENSIONS END
@@ -77,26 +109,29 @@ android {
}
}
+ def versionCodeOverride = cdvVersionCode ? Integer.parseInt(cdvVersionCode) : null
+ def minSdkVersionOverride = cdvMinSdkVersion ? Integer.parseInt(cdvMinSdkVersion) : null
+
defaultConfig {
- versionCode Integer.parseInt(System.env.ANDROID_VERSION_CODE ?: ("" + getIntFromManifest("versionCode") + "0"))
- if (System.env.ANDROID_MIN_SDK_VERSION) {
- minSdkVersion Integer.parseInt(System.env.ANDROID_MIN_SDK_VERSION)
+ versionCode versionCodeOverride ?: Integer.parseInt("" + privateHelpers.extractIntFromManifest("versionCode") + "0")
+ if (minSdkVersionOverride != null) {
+ minSdkVersion minSdkVersionOverride
}
}
- compileSdkVersion cordova.cordovaSdkVersion
- buildToolsVersion cordova.cordovaBuildToolsVersion
+ compileSdkVersion cdvCompileSdkVersion
+ buildToolsVersion cdvBuildToolsVersion
- if (multiarch || System.env.BUILD_MULTIPLE_APKS) {
+ if (Boolean.valueOf(cdvBuildMultipleApks)) {
productFlavors {
armv7 {
- versionCode System.env.ANDROID_VERSION_CODE ?: defaultConfig.versionCode + 2
+ versionCode versionCodeOverride ?: defaultConfig.versionCode + 2
ndk {
abiFilters "armeabi-v7a", ""
}
}
x86 {
- versionCode System.env.ANDROID_VERSION_CODE ?: defaultConfig.versionCode + 4
+ versionCode versionCodeOverride ?: defaultConfig.versionCode + 4
ndk {
abiFilters "x86", ""
}
@@ -107,8 +142,8 @@ android {
}
}
}
- } else if (!System.env.ANDROID_VERSION_CODE) {
- def minSdkVersion = Integer.parseInt(System.env.ANDROID_MIN_SDK_VERSION ?: "" + getIntFromManifest("minSdkVersion"))
+ } else if (!versionCodeOverride) {
+ def minSdkVersion = minSdkVersionOverride ?: privateHelpers.extractIntFromManifest("minSdkVersion")
// Vary versionCode by the two most common API levels:
// 14 is ICS, which is the lowest API level for many apps.
// 20 is Lollipop, which is the lowest API level for the updatable system webview.
@@ -124,7 +159,7 @@ android {
targetCompatibility JavaVersion.VERSION_1_6
}
- if (System.env.RELEASE_SIGNING_PROPERTIES_FILE) {
+ if (cdvReleaseSigningPropertiesFile) {
signingConfigs {
release {
// These must be set or Gradle will complain (even if they are overridden).
@@ -139,10 +174,10 @@ android {
signingConfig signingConfigs.release
}
}
- addSigningProps(System.env.RELEASE_SIGNING_PROPERTIES_FILE, signingConfigs.release)
+ addSigningProps(cdvReleaseSigningPropertiesFile, signingConfigs.release)
}
- if (System.env.DEBUG_SIGNING_PROPERTIES_FILE) {
- addSigningProps(System.env.DEBUG_SIGNING_PROPERTIES_FILE, signingConfigs.debug)
+ if (cdvDebugSigningPropertiesFile) {
+ addSigningProps(cdvDebugSigningPropertiesFile, signingConfigs.debug)
}
}
@@ -152,40 +187,15 @@ dependencies {
// SUB-PROJECT DEPENDENCIES END
}
-
-def promptForPassword(msg) {
- if (System.console() == null) {
- def ret = null
- new SwingBuilder().edt {
- dialog(modal: true, title: 'Enter password', alwaysOnTop: true, resizable: false, locationRelativeTo: null, pack: true, show: true) {
- vbox {
- label(text: msg)
- def input = passwordField()
- button(defaultButton: true, text: 'OK', actionPerformed: {
- ret = input.password;
- dispose();
- })
- }
- }
- }
- if (!ret) {
- throw new GradleException('User canceled build')
- }
- return new String(ret)
- } else {
- return System.console().readPassword('\n' + msg);
- }
-}
-
def promptForReleaseKeyPassword() {
- if (!System.env.RELEASE_SIGNING_PROPERTIES_FILE) {
+ if (!cdvReleaseSigningPropertiesFile) {
return;
}
if ('__unset'.equals(android.signingConfigs.release.storePassword)) {
- android.signingConfigs.release.storePassword = promptForPassword('Enter key store password: ')
+ android.signingConfigs.release.storePassword = privateHelpers.promptForPassword('Enter key store password: ')
}
if ('__unset'.equals(android.signingConfigs.release.keyPassword)) {
- android.signingConfigs.release.keyPassword = promptForPassword('Enter key password: ');
+ android.signingConfigs.release.keyPassword = privateHelpers.promptForPassword('Enter key password: ');
}
}
@@ -197,14 +207,6 @@ gradle.taskGraph.whenReady { taskGraph ->
}
}
-def getIntFromManifest(name) {
- def manifestFile = file(android.sourceSets.main.manifest.srcFile)
- def pattern = Pattern.compile(name + "=\"(\\d+)\"")
- def matcher = pattern.matcher(manifestFile.getText())
- matcher.find()
- return Integer.parseInt(matcher.group(1))
-}
-
def ensureValueExists(filePath, props, key) {
if (props.get(key) == null) {
throw new GradleException(filePath + ': Missing key required "' + key + '"')
@@ -241,6 +243,8 @@ def addSigningProps(propsFilePath, signingConfig) {
}
}
-if (file('build-extras.gradle').exists()) {
- apply from: 'build-extras.gradle'
+// This can be defined within build-extras.gradle as:
+// ext.postBuildExtras = { ... code here ... }
+if (hasProperty('postBuildExtras')) {
+ postBuildExtras()
}
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/2ddebd36/bin/templates/project/cordova.gradle
----------------------------------------------------------------------
diff --git a/bin/templates/project/cordova.gradle b/bin/templates/project/cordova.gradle
index cf2daca..8b371bf 100644
--- a/bin/templates/project/cordova.gradle
+++ b/bin/templates/project/cordova.gradle
@@ -18,6 +18,8 @@
*/
import java.util.regex.Pattern
+import groovy.swing.SwingBuilder
+
String getProjectTarget(String defaultTarget) {
def manifestFile = file("project.properties")
@@ -37,7 +39,7 @@ String[] getAvailableBuildTools() {
.sort { a, b -> compareVersions(b, a) }
}
-String latestBuildToolsAvailable(String minBuildToolsVersion) {
+String findLatestInstalledBuildTools(String minBuildToolsVersion) {
def availableBuildToolsVersions
try {
availableBuildToolsVersions = getAvailableBuildTools()
@@ -115,6 +117,45 @@ String getAndroidSdkDir() {
androidSdkDir
}
-ext.cordovaSdkVersion = System.env.MIN_SDK_VERSION ?: getProjectTarget("android-19")
-ext.cordovaBuildToolsVersion = latestBuildToolsAvailable("19.1.0")
+def extractIntFromManifest(name) {
+ def manifestFile = file(android.sourceSets.main.manifest.srcFile)
+ def pattern = Pattern.compile(name + "=\"(\\d+)\"")
+ def matcher = pattern.matcher(manifestFile.getText())
+ matcher.find()
+ return Integer.parseInt(matcher.group(1))
+}
+
+def promptForPassword(msg) {
+ if (System.console() == null) {
+ def ret = null
+ new SwingBuilder().edt {
+ dialog(modal: true, title: 'Enter password', alwaysOnTop: true, resizable: false, locationRelativeTo: null, pack: true, show: true) {
+ vbox {
+ label(text: msg)
+ def input = passwordField()
+ button(defaultButton: true, text: 'OK', actionPerformed: {
+ ret = input.password;
+ dispose();
+ })
+ }
+ }
+ }
+ if (!ret) {
+ throw new GradleException('User canceled build')
+ }
+ return new String(ret)
+ } else {
+ return System.console().readPassword('\n' + msg);
+ }
+}
+
+// Properties exported here are visible to all plugins.
+ext {
+ // These helpers are shared, but are not guaranteed to be stable / unchanged.
+ privateHelpers = {}
+ privateHelpers.getProjectTarget = { defaultValue -> getProjectTarget(defaultValue) }
+ privateHelpers.findLatestInstalledBuildTools = { defaultValue -> findLatestInstalledBuildTools(defaultValue) }
+ privateHelpers.extractIntFromManifest = { name -> extractIntFromManifest(name) }
+ privateHelpers.promptForPassword = { msg -> promptForPassword(msg) }
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org