forked from github/cordova-android
CB-8390 Add Gradle support for Play Services and Support libraries
This commit is contained in:
parent
26ee1c4547
commit
ce351f5c38
56
bin/templates/cordova/lib/build.js
vendored
56
bin/templates/cordova/lib/build.js
vendored
@ -97,23 +97,21 @@ function extractProjectNameFromManifest(projectPath) {
|
|||||||
return m[1];
|
return m[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
function extractSubProjectPaths() {
|
function findAllUniq(data, r) {
|
||||||
var data = fs.readFileSync(path.join(ROOT, 'project.properties'), 'utf8');
|
var s = {};
|
||||||
var libsSet = {};
|
|
||||||
var r = /^\s*android\.library\.reference\.\d+=(.*)(?:\s|$)/mg
|
|
||||||
var m;
|
var m;
|
||||||
while (m = r.exec(data)) {
|
while (m = r.exec(data)) {
|
||||||
libsSet[m[1]] = 1;
|
s[m[1]] = 1;
|
||||||
}
|
|
||||||
var gradleSet = {};
|
|
||||||
r = /^\s*cordova\.gradle\.include\.\d+=(.*)(?:\s|$)/mg
|
|
||||||
m;
|
|
||||||
while (m = r.exec(data)) {
|
|
||||||
gradleSet[m[1]] = 1;
|
|
||||||
}
|
}
|
||||||
|
return Object.keys(s);
|
||||||
|
}
|
||||||
|
|
||||||
|
function readProjectProperties() {
|
||||||
|
var data = fs.readFileSync(path.join(ROOT, 'project.properties'), 'utf8');
|
||||||
return {
|
return {
|
||||||
libs: Object.keys(libsSet),
|
libs: findAllUniq(data, /^\s*android\.library\.reference\.\d+=(.*)(?:\s|$)/mg),
|
||||||
gradleIncludes: Object.keys(gradleSet)
|
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);
|
fs.writeFileSync(path.join(projectPath, 'local.properties'), LOCAL_PROPERTIES_TEMPLATE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var subProjects = extractSubProjectPaths().libs;
|
|
||||||
writeBuildXml(ROOT);
|
writeBuildXml(ROOT);
|
||||||
|
var propertiesObj = readProjectProperties();
|
||||||
|
var subProjects = propertiesObj.libs;
|
||||||
for (var i = 0; i < subProjects.length; ++i) {
|
for (var i = 0; i < subProjects.length; ++i) {
|
||||||
writeBuildXml(path.join(ROOT, subProjects[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.
|
// Update the version of build.gradle in each dependent library.
|
||||||
var pluginBuildGradle = path.join(projectPath, 'cordova', 'lib', 'plugin-build.gradle');
|
var pluginBuildGradle = path.join(projectPath, 'cordova', 'lib', 'plugin-build.gradle');
|
||||||
var propertiesObj = extractSubProjectPaths();
|
var propertiesObj = readProjectProperties();
|
||||||
var subProjects = propertiesObj.libs;
|
var subProjects = propertiesObj.libs;
|
||||||
for (var i = 0; i < subProjects.length; ++i) {
|
for (var i = 0; i < subProjects.length; ++i) {
|
||||||
if (subProjects[i] !== 'CordovaLib') {
|
if (subProjects[i] !== 'CordovaLib') {
|
||||||
@ -254,6 +256,30 @@ var builders = {
|
|||||||
depsList += ' debugCompile project(path: "' + p + '", configuration: "debug")\n';
|
depsList += ' debugCompile project(path: "' + p + '", configuration: "debug")\n';
|
||||||
depsList += ' releaseCompile project(path: "' + p + '", configuration: "release")\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');
|
buildGradle = buildGradle.replace(/(SUB-PROJECT DEPENDENCIES START)[\s\S]*(\/\/ SUB-PROJECT DEPENDENCIES END)/, '$1\n' + depsList + ' $2');
|
||||||
var includeList = '';
|
var includeList = '';
|
||||||
propertiesObj.gradleIncludes.forEach(function(includePath) {
|
propertiesObj.gradleIncludes.forEach(function(includePath) {
|
||||||
|
Loading…
Reference in New Issue
Block a user