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')}