diff --git a/cli/src/android/update.ts b/cli/src/android/update.ts index 8da8d8d9d..9593ad6f5 100644 --- a/cli/src/android/update.ts +++ b/cli/src/android/update.ts @@ -37,12 +37,15 @@ export async function updateAndroid(config: Config): Promise { printPlugins(capacitorPlugins, 'android'); const cordovaPlugins = plugins.filter((p) => getPluginType(p, platform) === PluginType.Cordova); - const enableCordova = cordovaPlugins.length > 0; + const enableCordova = cordovaPlugins.length > 0 || config.app.forceCordova; await writePluginsJson(config, capacitorPlugins, enableCordova); await removePluginsNativeFiles(config); if (enableCordova) { logger.info('Found Cordova Plugins: Including Android Cordova Support'); + if (config.app.forceCordova) { + logger.info('Cordova support installation has been forced'); + } await copyPluginsNativeFiles(config, cordovaPlugins); } if (!(await pathExists(config.android.webDirAbs))) { @@ -157,7 +160,7 @@ export async function installGradlePlugins( ); } - const enableCordova = cordovaPlugins.length > 0; + const enableCordova = cordovaPlugins.length > 0 || config.app.forceCordova; const capacitorAndroidPath = resolve(dirname(capacitorAndroidPackagePath), 'capacitor'); const capacitorCordovaAndroidPath = resolve(dirname(capacitorAndroidPackagePath), 'capacitor-cordova'); diff --git a/cli/src/config.ts b/cli/src/config.ts index 9c6c5183d..6a13cfbea 100644 --- a/cli/src/config.ts +++ b/cli/src/config.ts @@ -53,6 +53,7 @@ export async function loadConfig(): Promise { const appId = conf.extConfig.appId ?? ''; const appName = conf.extConfig.appName ?? ''; const webDir = conf.extConfig.webDir ?? 'www'; + const forceCordova = conf.extConfig.forceCordovaInclusion ?? false; const cli = await loadCLIConfig(cliRootDir); const config: Config = { @@ -66,6 +67,7 @@ export async function loadConfig(): Promise { appName, webDir, webDirAbs: resolve(appRootDir, webDir), + forceCordova, package: (await tryFn(readJSON, resolve(appRootDir, 'package.json'))) ?? { name: appName, version: '1.0.0', diff --git a/cli/src/declarations.ts b/cli/src/declarations.ts index 1103b6585..8d1a40e62 100644 --- a/cli/src/declarations.ts +++ b/cli/src/declarations.ts @@ -85,6 +85,15 @@ export interface CapacitorConfig { */ initialFocus?: boolean; + /** + * If set, will include Cordova support libraries regardless + * of whether or not they are needed by plugins. + * + * @since 9.0.0 + * @default false + */ + forceCordovaInclusion?: boolean; + android?: { /** * Specify a custom path to the native Android project. diff --git a/cli/src/definitions.ts b/cli/src/definitions.ts index 2df6398e9..56bf3cdb5 100644 --- a/cli/src/definitions.ts +++ b/cli/src/definitions.ts @@ -65,6 +65,7 @@ export interface AppConfig { readonly extConfigName: string; readonly extConfigFilePath: string; readonly extConfig: ExternalConfig; + readonly forceCordova: boolean; } export interface AndroidConfig extends PlatformConfig { diff --git a/cli/src/ios/update.ts b/cli/src/ios/update.ts index 93a1ad4b5..ca85595c1 100644 --- a/cli/src/ios/update.ts +++ b/cli/src/ios/update.ts @@ -43,10 +43,13 @@ export async function updateIOS(config: Config, deployment: boolean): Promise getPluginType(p, platform) === PluginType.Cordova); - const enableCordova = cordovaPlugins.length > 0; + const enableCordova = cordovaPlugins.length > 0 || config.app.forceCordova; if (enableCordova) { logger.info('Found Cordova Plugins: Including iOS Cordova Support'); + if (config.app.forceCordova) { + logger.info('Cordova support installation has been forced'); + } await copyPluginsNativeFiles(config, cordovaPlugins); } diff --git a/cli/src/util/spm.ts b/cli/src/util/spm.ts index 3243c3efd..1ef002b38 100644 --- a/cli/src/util/spm.ts +++ b/cli/src/util/spm.ts @@ -101,7 +101,7 @@ export async function generatePackageText(config: Config, plugins: Plugin[]): Pr const iosPlatformVersion = await getCapacitorPackageVersion(config, config.ios.name); const iosVersion = getMajoriOSVersion(config); const cordovaPlugins = await getCordovaPlugins(config, 'ios'); - const enableCordova = cordovaPlugins.length > 0; + const enableCordova = cordovaPlugins.length > 0 || config.app.forceCordova; const packageTraits = config.app.extConfig.experimental?.ios?.spm?.packageTraits ?? {}; const packageOptions = config.app.extConfig.experimental?.ios?.spm?.packageOptions ?? {}; const swiftToolsVersion = config.app.extConfig.experimental?.ios?.spm?.swiftToolsVersion ?? '5.9'; diff --git a/cli/test/framework-detection.spec.ts b/cli/test/framework-detection.spec.ts index 46727753c..725398dd4 100644 --- a/cli/test/framework-detection.spec.ts +++ b/cli/test/framework-detection.spec.ts @@ -15,6 +15,7 @@ describe('framework detection', () => { appName: 'appName', webDir: '', webDirAbs: '', + forceCordova: false, package: { name: 'package-name', version: '0.0.0',