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/02/03 05:27:22 UTC

android commit: CB-8390 Add Gradle support for Play Services and Support libraries

Repository: cordova-android
Updated Branches:
  refs/heads/master 26ee1c454 -> ce351f5c3


CB-8390 Add Gradle support for Play Services and Support libraries


Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/ce351f5c
Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/ce351f5c
Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/ce351f5c

Branch: refs/heads/master
Commit: ce351f5c38a4fc11bddb7b5ab976ee8fdda6dfeb
Parents: 26ee1c4
Author: Andrew Grieve <ag...@chromium.org>
Authored: Mon Feb 2 23:26:53 2015 -0500
Committer: Andrew Grieve <ag...@chromium.org>
Committed: Mon Feb 2 23:26:53 2015 -0500

----------------------------------------------------------------------
 bin/templates/cordova/lib/build.js | 56 ++++++++++++++++++++++++---------
 1 file changed, 41 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-android/blob/ce351f5c/bin/templates/cordova/lib/build.js
----------------------------------------------------------------------
diff --git a/bin/templates/cordova/lib/build.js b/bin/templates/cordova/lib/build.js
index 66fb704..40eec84 100644
--- a/bin/templates/cordova/lib/build.js
+++ b/bin/templates/cordova/lib/build.js
@@ -97,23 +97,21 @@ function extractProjectNameFromManifest(projectPath) {
     return m[1];
 }
 
-function extractSubProjectPaths() {
-    var data = fs.readFileSync(path.join(ROOT, 'project.properties'), 'utf8');
-    var libsSet = {};
-    var r = /^\s*android\.library\.reference\.\d+=(.*)(?:\s|$)/mg
+function findAllUniq(data, r) {
+    var s = {};
     var m;
     while (m = r.exec(data)) {
-        libsSet[m[1]] = 1;
-    }
-    var gradleSet = {};
-    r = /^\s*cordova\.gradle\.include\.\d+=(.*)(?:\s|$)/mg
-    m;
-    while (m = r.exec(data)) {
-        gradleSet[m[1]] = 1;
+        s[m[1]] = 1;
     }
+    return Object.keys(s);
+}
+
+function readProjectProperties() {
+    var data = fs.readFileSync(path.join(ROOT, 'project.properties'), 'utf8');
     return {
-      libs: Object.keys(libsSet),
-      gradleIncludes: Object.keys(gradleSet)
+        libs: findAllUniq(data, /^\s*android\.library\.reference\.\d+=(.*)(?:\s|$)/mg),
+        gradleIncludes: findAllUniq(data, /^\s*cordova\.gradle\.include\.\d+=(.*)(?:\s|$)/mg),
+        systemLibs: findAllUniq(data, /^\s*cordova\.system\.library\.\d+=(.*)(?:\s|$)/mg)
     };
 }
 
@@ -143,11 +141,15 @@ var builders = {
                         fs.writeFileSync(path.join(projectPath, 'local.properties'), LOCAL_PROPERTIES_TEMPLATE);
                     }
                 }
-                var subProjects = extractSubProjectPaths().libs;
                 writeBuildXml(ROOT);
+                var propertiesObj = readProjectProperties();
+                var subProjects = propertiesObj.libs;
                 for (var i = 0; i < subProjects.length; ++i) {
                     writeBuildXml(path.join(ROOT, subProjects[i]));
                 }
+                if (propertiesObj.systemLibs.length > 0) {
+                    throw new Error('Project contains at least one plugin that requires a system library. This is not supported with ANT. Please build using gradle.');
+                }
             });
         },
 
@@ -233,7 +235,7 @@ var builders = {
 
                 // Update the version of build.gradle in each dependent library.
                 var pluginBuildGradle = path.join(projectPath, 'cordova', 'lib', 'plugin-build.gradle');
-                var propertiesObj = extractSubProjectPaths();
+                var propertiesObj = readProjectProperties();
                 var subProjects = propertiesObj.libs;
                 for (var i = 0; i < subProjects.length; ++i) {
                     if (subProjects[i] !== 'CordovaLib') {
@@ -254,6 +256,30 @@ var builders = {
                     depsList += '    debugCompile project(path: "' + p + '", configuration: "debug")\n';
                     depsList += '    releaseCompile project(path: "' + p + '", configuration: "release")\n';
                 });
+                // For why we do this mapping: https://issues.apache.org/jira/browse/CB-8390
+                var SYSTEM_LIBRARY_MAPPINGS = [
+                    [/^\/?extras\/android\/support\/(.*)$/, 'com.android.support:support-$1:+'],
+                    [/^\/?google\/google_play_services\/libproject\/google-play-services_lib\/?$/, 'com.google.android.gms:play-services:+']
+                ];
+                propertiesObj.systemLibs.forEach(function(p) {
+                    var mavenRef;
+                    // It's already in gradle form if it has two ':'s
+                    if (/:.*:/.exec(p)) {
+                        mavenRef = p;
+                    } else {
+                        for (var i = 0; i < SYSTEM_LIBRARY_MAPPINGS.length; ++i) {
+                            var pair = SYSTEM_LIBRARY_MAPPINGS[i];
+                            if (pair[0].exec(p)) {
+                                mavenRef = p.replace(pair[0], pair[1]);
+                                break;
+                            }
+                        }
+                        if (!mavenRef) {
+                            throw new Error('Unsupported system library (does not work with gradle): ' + p);
+                        }
+                    }
+                    depsList += '    compile "' + mavenRef + '"\n';
+                });
                 buildGradle = buildGradle.replace(/(SUB-PROJECT DEPENDENCIES START)[\s\S]*(\/\/ SUB-PROJECT DEPENDENCIES END)/, '$1\n' + depsList + '    $2');
                 var includeList = '';
                 propertiesObj.gradleIncludes.forEach(function(includePath) {


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org