From 317db7df0f7a054444197bc6d28453cf4ab23280 Mon Sep 17 00:00:00 2001 From: Joe Bowser Date: Thu, 16 Nov 2017 10:13:50 -0800 Subject: [PATCH] Merge pull request #417 from DavidStrausz/master CB-13580: (android) fix build for multiple apks (different product flavors) Note from @benjamn: this commit was cherry-picked from version 7.0.0 onto version 6.4.0 in Meteor's fork of cordova-android, since the maintainer has indicated the changes probably will not be back-ported to 6.x: https://github.com/apache/cordova-android/pull/417#issuecomment-345874372 cc @menelike @abernix --- .../cordova/lib/builders/GenericBuilder.js | 19 +++++++++++++++++-- bin/templates/project/build.gradle | 2 ++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/bin/templates/cordova/lib/builders/GenericBuilder.js b/bin/templates/cordova/lib/builders/GenericBuilder.js index 770911b7c5..6515533af8 100644 --- a/bin/templates/cordova/lib/builders/GenericBuilder.js +++ b/bin/templates/cordova/lib/builders/GenericBuilder.js @@ -93,6 +93,14 @@ GenericBuilder.prototype.extractRealProjectNameFromManifest = function () { module.exports = GenericBuilder; function apkSorter (fileA, fileB) { + // De-prioritize arch specific builds + var archSpecificRE = /-x86|-arm/; + if (archSpecificRE.exec(fileA)) { + return 1; + } else if (archSpecificRE.exec(fileB)) { + return -1; + } + // De-prioritize unsigned builds var unsignedRE = /-unsigned/; if (unsignedRE.exec(fileA)) { @@ -101,7 +109,7 @@ function apkSorter (fileA, fileB) { return -1; } - var timeDiff = fs.statSync(fileA).mtime - fs.statSync(fileB).mtime; + var timeDiff = fs.statSync(fileB).mtime - fs.statSync(fileA).mtime; return timeDiff === 0 ? fileA.length - fileB.length : timeDiff; } @@ -109,7 +117,14 @@ function findOutputApksHelper (dir, build_type, arch) { var shellSilent = shell.config.silent; shell.config.silent = true; - var ret = shell.ls(path.join(dir, build_type, '*.apk')).filter(function (candidate) { + // list directory recursively + var ret = shell.ls('-R', dir).map(function (file) { + // ls does not include base directory + return path.join(dir, file); + }).filter(function (file) { + // find all APKs + return file.match(/\.apk?$/i); + }).filter(function (candidate) { var apkName = path.basename(candidate); // Need to choose between release and debug .apk. if (build_type === 'debug') { diff --git a/bin/templates/project/build.gradle b/bin/templates/project/build.gradle index 76496b7f5a..b870dc41bd 100644 --- a/bin/templates/project/build.gradle +++ b/bin/templates/project/build.gradle @@ -184,6 +184,8 @@ android { buildToolsVersion cdvBuildToolsVersion if (Boolean.valueOf(cdvBuildMultipleApks)) { + flavorDimensions "default" + productFlavors { armv7 { versionCode defaultConfig.versionCode*10 + 2