From 36d07d7a15432e0bade5dd0c4ab0f0c38cb56fb2 Mon Sep 17 00:00:00 2001 From: Nikita Matrosov Date: Fri, 28 Jul 2017 14:05:53 +0300 Subject: [PATCH] CB-13031: Fix bug with case-sensitivity of android-packageName this closes #397 --- bin/lib/create.js | 2 +- bin/templates/cordova/lib/prepare.js | 21 +++++++++++++-------- spec/unit/create.spec.js | 2 +- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/bin/lib/create.js b/bin/lib/create.js index ae32ce40..40df3665 100755 --- a/bin/lib/create.js +++ b/bin/lib/create.js @@ -247,7 +247,7 @@ exports.create = function (project_path, config, options, events) { return Q.reject(new CordovaError('Project already exists! Delete and recreate')); } - var package_name = config.packageName() || 'my.cordova.project'; + var package_name = config.android_packageName() || config.packageName() || 'my.cordova.project'; var project_name = config.name() ? config.name().replace(/[^\w.]/g, '_') : 'CordovaExample'; diff --git a/bin/templates/cordova/lib/prepare.js b/bin/templates/cordova/lib/prepare.js index b0bfb299..39f9ae4e 100644 --- a/bin/templates/cordova/lib/prepare.js +++ b/bin/templates/cordova/lib/prepare.js @@ -24,6 +24,7 @@ var path = require('path'); var shell = require('shelljs'); var events = require('cordova-common').events; var AndroidManifest = require('./AndroidManifest'); +var checkReqs = require('./check_reqs'); var xmlHelpers = require('cordova-common').xmlHelpers; var CordovaError = require('cordova-common').CordovaError; var ConfigParser = require('cordova-common').ConfigParser; @@ -181,10 +182,10 @@ function updateProjectAccordingTo (platformConfig, locations) { events.emit('verbose', 'Wrote out android application name "' + name + '" to ' + locations.strings); // Java packages cannot support dashes - var pkg = (platformConfig.android_packageName() || platformConfig.packageName()).replace(/-/g, '_'); + var androidPkgName = (platformConfig.android_packageName() || platformConfig.packageName()).replace(/-/g, '_'); var manifest = new AndroidManifest(locations.manifest); - var orig_pkg = manifest.getPackageId(); + var manifestId = manifest.getPackageId(); manifest.getActivity() .setOrientation(platformConfig.getPreference('orientation')) @@ -192,13 +193,13 @@ function updateProjectAccordingTo (platformConfig, locations) { manifest.setVersionName(platformConfig.version()) .setVersionCode(platformConfig.android_versionCode() || default_versionCode(platformConfig.version())) - .setPackageId(pkg) + .setPackageId(androidPkgName) .setMinSdkVersion(platformConfig.getPreference('android-minSdkVersion', 'android')) .setMaxSdkVersion(platformConfig.getPreference('android-maxSdkVersion', 'android')) .setTargetSdkVersion(platformConfig.getPreference('android-targetSdkVersion', 'android')) .write(); - var javaPattern = path.join(locations.root, 'src', orig_pkg.replace(/\./g, '/'), '*.java'); + var javaPattern = path.join(locations.root, 'src', manifestId.replace(/\./g, '/'), '*.java'); var java_files = shell.ls(javaPattern).filter(function (f) { return shell.grep(/extends\s+CordovaActivity/g, f); }); @@ -209,12 +210,16 @@ function updateProjectAccordingTo (platformConfig, locations) { events.emit('log', 'Multiple candidate Java files that extend CordovaActivity found. Guessing at the first one, ' + java_files[0]); } - var destFile = path.join(locations.root, 'src', pkg.replace(/\./g, '/'), path.basename(java_files[0])); + var destFile = path.join(locations.root, 'src', androidPkgName.replace(/\./g, '/'), path.basename(java_files[0])); shell.mkdir('-p', path.dirname(destFile)); - shell.sed(/package [\w\.]*;/, 'package ' + pkg + ';', java_files[0]).to(destFile); - events.emit('verbose', 'Wrote out Android package name "' + pkg + '" to ' + destFile); + shell.sed(/package [\w\.]*;/, 'package ' + androidPkgName + ';', java_files[0]).to(destFile); + events.emit('verbose', 'Wrote out Android package name "' + androidPkgName + '" to ' + destFile); - if (orig_pkg !== pkg) { + var removeOrigPkg = checkReqs.isWindows() || checkReqs.isDarwin() ? + manifestId.toUpperCase() !== androidPkgName.toUpperCase() : + manifestId !== androidPkgName; + + if (removeOrigPkg) { // If package was name changed we need to remove old java with main activity shell.rm('-Rf', java_files[0]); // remove any empty directories diff --git a/spec/unit/create.spec.js b/spec/unit/create.spec.js index 8fdbdb81..bfd6295e 100644 --- a/spec/unit/create.spec.js +++ b/spec/unit/create.spec.js @@ -148,7 +148,7 @@ describe('create', function () { spyOn(shell, 'cp'); spyOn(shell, 'mkdir'); spyOn(shell, 'sed'); - config_mock = jasmine.createSpyObj('ConfigParser mock instance', ['packageName', 'name', 'android_activityName']); + config_mock = jasmine.createSpyObj('ConfigParser mock instance', ['packageName', 'android_packageName', 'name', 'android_activityName']); events_mock = jasmine.createSpyObj('EventEmitter mock instance', ['emit']); spyOn(check_reqs, 'get_target').and.returnValue(fake_android_target); });