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