From 0d313a39645cc4329435eaf70c3ba2c17e18f525 Mon Sep 17 00:00:00 2001 From: Andrew Grieve Date: Tue, 23 Sep 2014 21:03:00 -0400 Subject: [PATCH 1/3] gradle: Write sub-project list explicitly to make Android Studio happy --- bin/lib/create.js | 1 - bin/templates/cordova/lib/build.js | 16 ++++++++++++++++ bin/templates/project/build.gradle | 20 ++++---------------- bin/templates/project/settings.gradle | 18 ------------------ 4 files changed, 20 insertions(+), 35 deletions(-) delete mode 100644 bin/templates/project/settings.gradle diff --git a/bin/lib/create.js b/bin/lib/create.js index c0458194..bfe6b23e 100755 --- a/bin/lib/create.js +++ b/bin/lib/create.js @@ -122,7 +122,6 @@ function copyBuildRules(projectPath) { shell.cp('-f', path.join(srcDir, 'custom_rules.xml'), projectPath); shell.cp('-f', path.join(srcDir, 'build.gradle'), projectPath); - shell.cp('-f', path.join(srcDir, 'settings.gradle'), projectPath); shell.cp('-f', path.join(srcDir, 'cordova.gradle'), projectPath); } diff --git a/bin/templates/cordova/lib/build.js b/bin/templates/cordova/lib/build.js index 89556fef..c5b6b092 100644 --- a/bin/templates/cordova/lib/build.js +++ b/bin/templates/cordova/lib/build.js @@ -237,6 +237,22 @@ var builders = { for (var i = 0; i < subProjects.length; ++i) { shell.cp('-f', pluginBuildGradle, path.join(ROOT, subProjects[i], 'build.gradle')); } + + var subProjectsAsGradlePaths = subProjects.map(function(p) { return ':' + p.replace(/[/\\]/g, ':') }); + // Write the settings.gradle file. + fs.writeFileSync(path.join(projectPath, 'settings.gradle'), + '// GENERATED FILE - DO NOT EDIT\n' + + 'include ":"\n' + + 'include "' + subProjectsAsGradlePaths.join('"\ninclude "') + '"\n'); + // Update dependencies within build.gradle. + var buildGradle = fs.readFileSync(path.join(projectPath, 'build.gradle'), 'utf8'); + var depsList = ''; + subProjectsAsGradlePaths.forEach(function(p) { + depsList += ' debugCompile project(path: "' + p + '", configuration: "debug")\n'; + depsList += ' releaseCompile project(path: "' + p + '", configuration: "release")\n'; + }); + buildGradle = buildGradle.replace(/(SUB-PROJECT DEPENDENCIES START)[\s\S]*(\/\/ SUB-PROJECT DEPENDENCIES END)/, '$1\n' + depsList + ' $2'); + fs.writeFileSync(path.join(projectPath, 'build.gradle'), buildGradle); }); }, diff --git a/bin/templates/project/build.gradle b/bin/templates/project/build.gradle index 41984fa7..ce59e32f 100644 --- a/bin/templates/project/build.gradle +++ b/bin/templates/project/build.gradle @@ -17,6 +17,8 @@ under the License. */ +// GENERATED FILE! DO NOT EDIT! + import java.util.regex.Pattern import groovy.swing.SwingBuilder @@ -111,11 +113,8 @@ android { dependencies { compile fileTree(dir: 'libs', include: '*.jar') - // https://code.google.com/p/android/issues/detail?id=52962 - for (subproject in getProjectList()) { - releaseCompile project(path: subproject, configuration: 'release') - debugCompile project(path: subproject, configuration: 'debug') - } + // SUB-PROJECT DEPENDENCIES START + // SUB-PROJECT DEPENDENCIES END } @@ -172,17 +171,6 @@ def getVersionCodeFromManifest() { return Integer.parseInt(matcher.group(1)) } -def getProjectList() { - def manifestFile = file("project.properties") - def pattern = Pattern.compile("android.library.reference.(\\d+)\\s*=\\s*(.*)") - def matcher = pattern.matcher(manifestFile.getText()) - def projects = [] - while (matcher.find()) { - projects.add(":" + matcher.group(2).replace("/",":")) - } - return projects -} - def ensureValueExists(filePath, props, key) { if (props.get(key) == null) { throw new GradleException(filePath + ': Missing key required "' + key + '"') diff --git a/bin/templates/project/settings.gradle b/bin/templates/project/settings.gradle deleted file mode 100644 index baa17145..00000000 --- a/bin/templates/project/settings.gradle +++ /dev/null @@ -1,18 +0,0 @@ -import java.util.regex.Pattern - -def getProjectList() { - def manifestFile = file("project.properties") - def pattern = Pattern.compile("android.library.reference.(\\d+)\\s*=\\s*(.*)") - def matcher = pattern.matcher(manifestFile.getText()) - def projects = [] - while (matcher.find()) { - projects.add(":" + matcher.group(2).replace("/",":")) - } - return projects -} - -for (subproject in getProjectList()) { - include subproject -} - -include ':' From 6b71c2f392c8a5ee2ad9acf11a81e0de945032a7 Mon Sep 17 00:00:00 2001 From: Andrew Grieve Date: Tue, 23 Sep 2014 21:03:17 -0400 Subject: [PATCH 2/3] gradle: Have project's build.gradle look for a build-extras.gradle --- bin/templates/project/build.gradle | 3 +++ 1 file changed, 3 insertions(+) diff --git a/bin/templates/project/build.gradle b/bin/templates/project/build.gradle index ce59e32f..2e4d5cbb 100644 --- a/bin/templates/project/build.gradle +++ b/bin/templates/project/build.gradle @@ -190,3 +190,6 @@ def addSigningProps(propsFilePath, signingConfig) { } } +if (file('build-extras.gradle').exists()) { + apply from: 'build-extras.gradle' +} From 9e3ccf4b3eafaf2f2a073a305af2aef729a3f8a9 Mon Sep 17 00:00:00 2001 From: Andrew Grieve Date: Tue, 23 Sep 2014 21:04:04 -0400 Subject: [PATCH 3/3] gradle: Fix warning about dynamic properties being deprecated --- bin/templates/project/cordova.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/templates/project/cordova.gradle b/bin/templates/project/cordova.gradle index ec597b2f..cf2dacad 100644 --- a/bin/templates/project/cordova.gradle +++ b/bin/templates/project/cordova.gradle @@ -115,6 +115,6 @@ String getAndroidSdkDir() { androidSdkDir } -cordovaSdkVersion = System.env.MIN_SDK_VERSION ?: getProjectTarget("android-19") -cordovaBuildToolsVersion = latestBuildToolsAvailable("19.1.0") +ext.cordovaSdkVersion = System.env.MIN_SDK_VERSION ?: getProjectTarget("android-19") +ext.cordovaBuildToolsVersion = latestBuildToolsAvailable("19.1.0")