@capacitor/android 8.5.2 depends on Cordova 129 's own Android library, org.apache.cordova:framework 14.0.1, so a Cordova plugin's Java code (CordovaPlugin, CallbackContext) compiles against Capacitor 243,123 unchanged. What plugin.xml would have done at cordova plugin add time (plugin.xml Wiring), cap sync does on every sync instead. For the notes app's three plugins it did the following:
The plugins' <source-file> Java (Device.java, Notification.java, Geolocation.java) lands in one Gradle 19,597 library module, android/capacitor-cordova-android-plugins, which the app depends on. Their <config-file> manifest entries go into that module's manifest.
Each plugin's <feature> goes into app/src/main/res/xml/config.xml, the file Cordova's plugin manager reads.
cordova.js, a generated cordova_plugins.js and each plugin's www/ JavaScript are copied into assets/public, so device, navigator.notification and navigator.geolocation exist as before.
At run time a Cordova call travels through Capacitor's bridge. Logcat shows the device plugin's first call:
V/Capacitor/Plugin: To native (Cordova plugin): callbackId: Device1801484651, service: Device, action: getDeviceInfo, actionArgs: []
The module is regenerated on every sync, so never edit it: like Cordova's platforms/ (Cordova's platforms/), it is a build artifact.