You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by ia...@apache.org on 2014/11/06 20:34:59 UTC

[1/3] cordova-lib git commit: CB-3445: Android: Fail gracefully when adding plugins to nongradle project

Repository: cordova-lib
Updated Branches:
  refs/heads/CB-3445-2 [created] ea7b2bf94


CB-3445: Android: Fail gracefully when adding plugins to nongradle project


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

Branch: refs/heads/CB-3445-2
Commit: 1805d4cbe0b30cd1965d1445ba4a1637219b73fc
Parents: 759c4cb
Author: Ian Clelland <ic...@chromium.org>
Authored: Mon Aug 18 10:41:56 2014 -0400
Committer: Ian Clelland <ic...@chromium.org>
Committed: Thu Nov 6 12:05:48 2014 -0500

----------------------------------------------------------------------
 cordova-lib/src/plugman/util/android-project.js | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/1805d4cb/cordova-lib/src/plugman/util/android-project.js
----------------------------------------------------------------------
diff --git a/cordova-lib/src/plugman/util/android-project.js b/cordova-lib/src/plugman/util/android-project.js
index 5dc28d0..2f11f9a 100644
--- a/cordova-lib/src/plugman/util/android-project.js
+++ b/cordova-lib/src/plugman/util/android-project.js
@@ -202,7 +202,9 @@ AndroidProject.prototype = {
 
         var gradleSettingsFile = path.resolve(parentDir, 'settings.gradle');
         var gradleLibrariesFile = path.resolve(parentDir, 'libraries.gradle');
-        addGradleLibraryReference(gradleSettingsFile, gradleLibrariesFile, module.exports.getRelativeLibraryPath(parentDir, subDir).split('/'));
+        if (fs.existsSync(gradleSettingsFile)) {
+            addGradleLibraryReference(gradleSettingsFile, gradleLibrariesFile, module.exports.getRelativeLibraryPath(parentDir, subDir).split('/'));
+        }
 
         this._subProjectDirs[subDir] = true;
         this._dirty = true;
@@ -213,7 +215,9 @@ AndroidProject.prototype = {
         removeLibraryReference(parentProperties, module.exports.getRelativeLibraryPath(parentDir, subDir));
         var gradleSettingsFile = path.resolve(parentDir, 'settings.gradle');
         var gradleLibrariesFile = path.resolve(parentDir, 'libraries.gradle');
-        removeGradleLibraryReference(gradleSettingsFile, gradleLibrariesFile, module.exports.getRelativeLibraryPath(parentDir, subDir).split('/'));
+        if (fs.existsSync(gradleSettingsFile)) {
+            removeGradleLibraryReference(gradleSettingsFile, gradleLibrariesFile, module.exports.getRelativeLibraryPath(parentDir, subDir).split('/'));
+        }
         delete this._subProjectDirs[subDir];
         this._dirty = true;
     },


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


[2/3] cordova-lib git commit: CB-3445: Android: Add library projects to gradle build config on plugin install

Posted by ia...@apache.org.
CB-3445: Android: Add library projects to gradle build config on plugin install


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

Branch: refs/heads/CB-3445-2
Commit: 759c4cb1cff2b440742ed265277497f11e020996
Parents: 30d68ac
Author: Ian Clelland <ic...@chromium.org>
Authored: Fri Aug 8 12:34:27 2014 -0400
Committer: Ian Clelland <ic...@chromium.org>
Committed: Thu Nov 6 12:05:48 2014 -0500

----------------------------------------------------------------------
 cordova-lib/src/plugman/util/android-project.js | 131 +++++++++++++++++++
 1 file changed, 131 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/759c4cb1/cordova-lib/src/plugman/util/android-project.js
----------------------------------------------------------------------
diff --git a/cordova-lib/src/plugman/util/android-project.js b/cordova-lib/src/plugman/util/android-project.js
index bedec6b..5dc28d0 100644
--- a/cordova-lib/src/plugman/util/android-project.js
+++ b/cordova-lib/src/plugman/util/android-project.js
@@ -56,6 +56,130 @@ function removeLibraryReference(projectProperties, libraryPath) {
     }
 }
 
+function updateGradleSettingsFile(settingsFile, updateFn) {
+    try {
+        var settings = fs.readFileSync(settingsFile, {encoding: 'utf8'});
+        var lines = settings.split('\n');
+        for (var i = 0; i < lines.length; ++i) {
+            var line = lines[i].trim();
+            if (line.substr(0,8) == 'include ') {
+                var libs = line.substr(8).split(/,\s*/);
+                updateFn(libs);
+                lines[i] = 'include ' + libs.join(', ');
+                break;
+            }
+        }
+        fs.writeFileSync(settingsFile, lines.join('\n'), {encoding: 'utf8'});
+    } catch (e) {
+        if (e.code != 'ENOENT') {
+            throw e;
+        }
+    }
+}
+
+function addGradleLibraryToSettings(settingsFile, gradleLibraryPath) {
+    updateGradleSettingsFile(settingsFile, function(libs) {
+        var exists = false;
+        var index;
+        for (index = 0; index < libs.length; ++index) {
+            if (libs[index] == gradleLibraryPath) {
+                exists = true;
+                break;
+            }
+        }
+        if (!exists) {
+            libs.splice(1, 0, gradleLibraryPath);
+        }
+    });
+}
+
+function removeGradleLibraryFromSettings(settingsFile, gradleLibraryPath) {
+    updateGradleSettingsFile(settingsFile, function(libs) {
+        var exists = false;
+        var index;
+        for (index = 0; index < libs.length; ++index) {
+            if (libs[index] == gradleLibraryPath) {
+                exists = true;
+                break;
+            }
+        }
+        if (exists) {
+            libs.splice(index, 1);
+        }
+    });
+}
+
+function updateGradleLibrariesFile(librariesFile, updateFn) {
+    try {
+        var libraries = fs.readFileSync(librariesFile, {encoding: 'utf8'});
+        var lines = libraries.split('\n');
+        var openLine, closeLine;
+        var exists = false;
+        for (var i = 0; i < lines.length; ++i) {
+            var line = lines[i];
+            if (line.indexOf('dependencies {') > -1) {
+                openLine = i;
+            }
+            if ((typeof closeLine == 'undefined') && (typeof openLine !== 'undefined') && line.indexOf('}') > -1) {
+                closeLine = i;
+                break;
+            }
+        }
+        if ((typeof closeLine !== 'undefined') && (typeof openLine !== 'undefined')) {
+            updateFn(lines, openLine, closeLine);
+            fs.writeFileSync(librariesFile, lines.join('\n'), {encoding: 'utf8'});
+        } else {
+            console.log('Cannot update libraries.gradle');
+        }
+    } catch (e) {
+        if (e.code != 'ENOENT') {
+            throw e;
+        }
+    }
+}
+
+function addGradleLibraryToLibraries(librariesFile, gradleLibraryPath) {
+    updateGradleLibrariesFile(librariesFile, function(lines, openLine, closeLine) {
+        var exists = false;
+        for (var i = openLine; i < closeLine; ++i) {
+            if (lines[i].indexOf('compile project(' + gradleLibraryPath + ')') > -1) {
+                exists = true;
+            }
+        }
+        if (!exists) {
+            lines.splice(closeLine, 0, '    compile project(' + gradleLibraryPath + ')');
+        }
+    });
+}
+
+function removeGradleLibraryFromLibraries(librariesFile, gradleLibraryPath) {
+    updateGradleLibrariesFile(librariesFile, function(lines, openLine, closeLine) {
+        var foundLine;
+        var exists = false;
+        for (var i = 0; i < lines.length; ++i) {
+            if (lines[i].indexOf('compile project(' + gradleLibraryPath + ')') > -1) {
+                exists = true;
+                foundLine = i;
+            }
+        }
+        if (exists) {
+            lines.splice(foundLine, 1);
+        }
+    });
+}
+
+function addGradleLibraryReference(settingsFile, librariesFile, libraryPathComponents) {
+    var gradleLibraryPath = '\':' + libraryPathComponents.join(':') + '\'';
+    addGradleLibraryToSettings(settingsFile, gradleLibraryPath);
+    addGradleLibraryToLibraries(librariesFile, gradleLibraryPath);
+}
+
+function removeGradleLibraryReference(settingsFile, librariesFile, libraryPathComponents) {
+    var gradleLibraryPath = '\':' + libraryPathComponents.join(':') + '\'';
+    removeGradleLibraryFromSettings(settingsFile, gradleLibraryPath);
+    removeGradleLibraryFromLibraries(librariesFile, gradleLibraryPath);
+}
+
 function AndroidProject() {
     this._propertiesEditors = {};
     this._subProjectDirs = {};
@@ -76,6 +200,10 @@ AndroidProject.prototype = {
         var subProperties = this._getPropertiesFile(subProjectFile);
         subProperties.set('target', parentProperties.get('target'));
 
+        var gradleSettingsFile = path.resolve(parentDir, 'settings.gradle');
+        var gradleLibrariesFile = path.resolve(parentDir, 'libraries.gradle');
+        addGradleLibraryReference(gradleSettingsFile, gradleLibrariesFile, module.exports.getRelativeLibraryPath(parentDir, subDir).split('/'));
+
         this._subProjectDirs[subDir] = true;
         this._dirty = true;
     },
@@ -83,6 +211,9 @@ AndroidProject.prototype = {
         var parentProjectFile = path.resolve(parentDir, 'project.properties');
         var parentProperties = this._getPropertiesFile(parentProjectFile);
         removeLibraryReference(parentProperties, module.exports.getRelativeLibraryPath(parentDir, subDir));
+        var gradleSettingsFile = path.resolve(parentDir, 'settings.gradle');
+        var gradleLibrariesFile = path.resolve(parentDir, 'libraries.gradle');
+        removeGradleLibraryReference(gradleSettingsFile, gradleLibrariesFile, module.exports.getRelativeLibraryPath(parentDir, subDir).split('/'));
         delete this._subProjectDirs[subDir];
         this._dirty = true;
     },


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


[3/3] cordova-lib git commit: Add a type named "gradleReference" in framework

Posted by ia...@apache.org.
Add a type named "gradleReference" in framework

It's too complex to dependence AAR in plugin, it need build the plugin
to a android project which include AndroidManifest.xml. This patch
reference the *.gradle in plugin to build.gradle in root project. Below is
a demo.
plugin.xml:
<framework src="libs/xwalk_core_library/xwalk.gradle" custom="true" type="gradleReference"/>

xwalk.gradle:
repositories {
    maven {
        url 'https://download.01.org/crosswalk/releases/crosswalk/android/maven2'
    }
}
dependencies {
    compile 'org.xwalk:xwalk_core_library_beta:9.38.208.4'
}

The build.gradle will add blow section:
// PLUGIN GRADLE EXTENSIONS START
apply from: 'libs/xwalk_core_library/xwalk.gradle'
// PLUGIN GRADLE EXTENSIONS END


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

Branch: refs/heads/CB-3445-2
Commit: ea7b2bf94f0616fc079abb240f4e95b759e2342a
Parents: 1805d4c
Author: fujunwei <ju...@intel.com>
Authored: Fri Oct 24 16:11:59 2014 +0800
Committer: Ian Clelland <ic...@chromium.org>
Committed: Thu Nov 6 12:07:03 2014 -0500

----------------------------------------------------------------------
 cordova-lib/src/plugman/platforms/android.js    | 15 +++-
 cordova-lib/src/plugman/util/android-project.js | 73 +++++++++++++++++++-
 2 files changed, 85 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/ea7b2bf9/cordova-lib/src/plugman/platforms/android.js
----------------------------------------------------------------------
diff --git a/cordova-lib/src/plugman/platforms/android.js b/cordova-lib/src/plugman/platforms/android.js
index 2c2c6d9..08804bd 100644
--- a/cordova-lib/src/plugman/platforms/android.js
+++ b/cordova-lib/src/plugman/platforms/android.js
@@ -107,7 +107,13 @@ module.exports = {
             }
 
             var projectConfig = module.exports.parseProjectFile(project_dir);
-            projectConfig.addSubProject(parentDir, subDir);
+            var type = source_el.attrib.type;
+            if (type == 'gradleReference') {
+                //add reference to build.gradle
+                projectConfig.addGradleReference(parentDir, subDir);
+            } else {
+                projectConfig.addSubProject(parentDir, subDir);
+            }
         },
         uninstall:function(source_el, project_dir, plugin_id) {
             var src = source_el.attrib.src;
@@ -130,7 +136,12 @@ module.exports = {
             }
 
             var projectConfig = module.exports.parseProjectFile(project_dir);
-            projectConfig.removeSubProject(parentDir, subDir);
+            var type = source_el.attrib.type;
+            if (type == 'gradleReference') {
+                projectConfig.removeGradleReference(parentDir, subDir);
+            } else {
+                projectConfig.removeSubProject(parentDir, subDir);
+            }
         }
     },
     parseProjectFile: function(project_dir){

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/ea7b2bf9/cordova-lib/src/plugman/util/android-project.js
----------------------------------------------------------------------
diff --git a/cordova-lib/src/plugman/util/android-project.js b/cordova-lib/src/plugman/util/android-project.js
index 2f11f9a..d78f2a3 100644
--- a/cordova-lib/src/plugman/util/android-project.js
+++ b/cordova-lib/src/plugman/util/android-project.js
@@ -114,7 +114,6 @@ function updateGradleLibrariesFile(librariesFile, updateFn) {
         var libraries = fs.readFileSync(librariesFile, {encoding: 'utf8'});
         var lines = libraries.split('\n');
         var openLine, closeLine;
-        var exists = false;
         for (var i = 0; i < lines.length; ++i) {
             var line = lines[i];
             if (line.indexOf('dependencies {') > -1) {
@@ -168,6 +167,64 @@ function removeGradleLibraryFromLibraries(librariesFile, gradleLibraryPath) {
     });
 }
 
+function updateBuildGradleFile(librariesFile, updateFn) {
+    try {
+        var libraries = fs.readFileSync(librariesFile, {encoding: 'utf8'});
+        var lines = libraries.split('\n');
+        var openLine, closeLine;
+        for (var i = 0; i < lines.length; ++i) {
+            var line = lines[i];
+            if (line.indexOf('// PLUGIN GRADLE EXTENSIONS START') > -1) {
+                openLine = i;
+            }
+            if ((typeof openLine !== 'undefined') && line.indexOf('// PLUGIN GRADLE EXTENSIONS END') > -1) {
+                closeLine = i;
+                break;
+            }
+        }
+        if ((typeof closeLine !== 'undefined') && (typeof openLine !== 'undefined')) {
+            updateFn(lines, openLine, closeLine);
+            fs.writeFileSync(librariesFile, lines.join('\n'), {encoding: 'utf8'});
+        } else {
+            console.log('Cannot update build.gradle');
+        }
+    } catch (e) {
+        if (e.code != 'ENOENT') {
+            throw e;
+        }
+    }
+}
+
+function addReferenceToGradle(librariesFile, gradlePath) {
+    updateBuildGradleFile(librariesFile, function(lines, openLine, closeLine) {
+        var exists = false;
+        for (var i = openLine; i < closeLine; ++i) {
+            if (lines[i].indexOf('apply from: \'' + gradlePath + '\'') > -1) {
+                exists = true;
+            }
+        }
+        if (!exists) {
+            lines.splice(closeLine, 0, 'apply from: \'' + gradlePath + '\'');
+        }
+    });
+}
+
+function removeReferenceFromGradle(librariesFile, gradlePath) {
+    updateBuildGradleFile(librariesFile, function(lines, openLine, closeLine) {
+        var foundLine;
+        var exists = false;
+        for (var i = 0; i < lines.length; ++i) {
+            if (lines[i].indexOf('apply from: \'' + gradlePath + '\'') > -1) {
+                exists = true;
+                foundLine = i;
+            }
+        }
+        if (exists) {
+            lines.splice(foundLine, 1);
+        }
+    });
+}
+
 function addGradleLibraryReference(settingsFile, librariesFile, libraryPathComponents) {
     var gradleLibraryPath = '\':' + libraryPathComponents.join(':') + '\'';
     addGradleLibraryToSettings(settingsFile, gradleLibraryPath);
@@ -221,6 +278,20 @@ AndroidProject.prototype = {
         delete this._subProjectDirs[subDir];
         this._dirty = true;
     },
+    addGradleReference: function(parentDir, subDir) {
+        var gradleExtrasFile = path.resolve(parentDir, 'build.gradle');
+        var gradleReference = module.exports.getRelativeLibraryPath(parentDir, subDir);
+        if (fs.existsSync(gradleExtrasFile)) {
+            addReferenceToGradle(gradleExtrasFile, gradleReference);
+        }
+    },
+    removeGradleReference: function(parentDir, subDir) {
+        var gradleExtrasFile = path.resolve(parentDir, 'build.gradle');
+        var gradleReference = module.exports.getRelativeLibraryPath(parentDir, subDir);
+        if (fs.existsSync(gradleExtrasFile)) {
+            removeReferenceFromGradle(gradleExtrasFile, gradleReference);
+        }
+    },
     write: function(platformVersion) {
         if (!this._dirty) return;
 


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