diff --git a/cli/src/cordova.ts b/cli/src/cordova.ts index 343d1695a..7f29a05b4 100644 --- a/cli/src/cordova.ts +++ b/cli/src/cordova.ts @@ -867,14 +867,30 @@ export async function writeCordovaAndroidManifest( }); }); const cleartextString = 'android:usesCleartextTraffic="true"'; - const cleartextValue = - (cleartext || config.app.extConfig.server?.cleartext) && !applicationXMLAttributes.includes(cleartextString) - ? cleartextString + const networkSecurityConfigValue = + cleartext || config.app.extConfig.server?.cleartext || applicationXMLAttributes.includes(cleartextString) + ? 'android:networkSecurityConfig="@xml/network_security_config"' : ''; + const networkSecurityConfigDir = join(config.android.cordovaPluginsDirAbs, 'src', 'main', 'res', 'xml'); + const networkSecurityConfigPath = join(networkSecurityConfigDir, 'network_security_config.xml'); + if (networkSecurityConfigValue) { + await ensureDir(networkSecurityConfigDir); + await writeFile( + networkSecurityConfigPath, + ` + + + +`, + ); + } else if (await pathExists(networkSecurityConfigPath)) { + await remove(networkSecurityConfigPath); + } + let content = ` - + !attr.includes('android:usesCleartextTraffic')).join('\n')} ${networkSecurityConfigValue}> ${applicationXMLEntries.join('\n')} ${rootXMLEntries.join('\n')}