diff --git a/lib/definitions/project.d.ts b/lib/definitions/project.d.ts index f178dd9eb3..8d22af3047 100644 --- a/lib/definitions/project.d.ts +++ b/lib/definitions/project.d.ts @@ -215,6 +215,12 @@ interface IPlatformProjectService { * @returns {void} */ stopServices(): Promise; + + /** + * Removes build artifacts specific to the platform + * @returns {void} + */ + cleanProject(projectRoot: string, options: string[]): Promise } interface IAndroidProjectPropertiesManager { diff --git a/lib/services/android-project-service.ts b/lib/services/android-project-service.ts index 209518af5c..73021e62ba 100644 --- a/lib/services/android-project-service.ts +++ b/lib/services/android-project-service.ts @@ -405,7 +405,7 @@ export class AndroidProjectService extends projectServiceBaseLib.PlatformProject return this.$childProcess.spawnFromEvent(gradleBin, ["--stop", "--quiet"], "close", { stdio: "inherit", cwd: projectRoot }); } - private async cleanProject(projectRoot: string, options: string[]): Promise { + public async cleanProject(projectRoot: string, options: string[]): Promise { options.unshift("clean"); let gradleBin = path.join(projectRoot, "gradlew"); diff --git a/lib/services/ios-project-service.ts b/lib/services/ios-project-service.ts index db2fb9e794..71eb1b6f39 100644 --- a/lib/services/ios-project-service.ts +++ b/lib/services/ios-project-service.ts @@ -636,6 +636,10 @@ We will now place an empty obsolete compatability white screen LauncScreen.xib f return Promise.resolve({stderr: "", stdout: "", exitCode: 0}); } + public async cleanProject(projectRoot: string, options: string[]): Promise { + return Promise.resolve(); + } + private async mergeInfoPlists(): Promise { let projectDir = this.$projectData.projectDir; let infoPlistPath = this.$options.baseConfig || path.join(projectDir, constants.APP_FOLDER_NAME, constants.APP_RESOURCES_FOLDER_NAME, this.platformData.normalizedPlatformName, this.platformData.configurationFileName); diff --git a/lib/services/platform-service.ts b/lib/services/platform-service.ts index 9e1d8bdefe..9c55849558 100644 --- a/lib/services/platform-service.ts +++ b/lib/services/platform-service.ts @@ -216,6 +216,16 @@ export class PlatformService implements IPlatformService { this.$logger.trace("Changes info in prepare platform:", changesInfo); if (changesInfo.hasChanges) { + // android build artifacts need to be cleaned up when switching from release to debug builds + if (platform.toLowerCase() === "android") { + let previousPrepareInfo = this.$projectChangesService.getPrepareInfo(platform); + // clean up prepared plugins when not building for release + if (previousPrepareInfo && previousPrepareInfo.release !== this.$options.release) { + let platformData = this.$platformsData.getPlatformData(platform); + await platformData.platformProjectService.cleanProject(platformData.projectRoot, []); + } + } + await this.preparePlatformCore(platform, changesInfo); this.$projectChangesService.savePrepareInfo(platform); } else { diff --git a/test/stubs.ts b/test/stubs.ts index 9a7fd1a850..711064100b 100644 --- a/test/stubs.ts +++ b/test/stubs.ts @@ -345,6 +345,9 @@ export class PlatformProjectServiceStub implements IPlatformProjectService { async stopServices(): Promise { return Promise.resolve({stderr: "", stdout: "", exitCode: 0}); } + async cleanProject(projectRoot: string, options: string[]): Promise { + return Promise.resolve(); + } } export class ProjectDataService implements IProjectDataService {