diff --git a/lib/builders/ProjectBuilder.js b/lib/builders/ProjectBuilder.js index 984502544..d253e73eb 100644 --- a/lib/builders/ProjectBuilder.js +++ b/lib/builders/ProjectBuilder.js @@ -140,7 +140,8 @@ class ProjectBuilder { return { 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) + systemLibs: findAllUniq(data, /^\s*cordova\.system\.library\.\d+=((?!.*\().*)(?:\s|$)/mg), + bomPlatforms: findAllUniq(data, /^\s*cordova\.system\.library\.\d+=platform\((?:'|")(.*)(?:'|")\)/mg) }; } @@ -234,11 +235,24 @@ class ProjectBuilder { [/^\/?google\/google_play_services\/libproject\/google-play-services_lib\/?$/, 'com.google.android.gms:play-services:+'] ]; + propertiesObj.bomPlatforms.forEach(function (p) { + if (!/:.*:/.exec(p)) { + throw new CordovaError('Malformed BoM platform: ' + p); + } + + // Add bom platform + depsList += ' implementation platform("' + p + '")\n'; + }); + propertiesObj.systemLibs.forEach(function (p) { let mavenRef; // It's already in gradle form if it has two ':'s if (/:.*:/.exec(p)) { mavenRef = p; + } else if (/:.*/.exec(p)) { + // Support BoM imports + mavenRef = p; + events.emit('warn', 'Library expects a BoM package: ' + p); } else { for (let i = 0; i < SYSTEM_LIBRARY_MAPPINGS.length; ++i) { const pair = SYSTEM_LIBRARY_MAPPINGS[i];