Two phones both report Android 12 in Settings, and only one of them still starts the old IPsec XAuth profile your gateway offers. The difference is not a setting the user can reach: the guard that gates the native legacy IKEv1 path looks at the SDK level the device shipped with, not only the release it is running now. That single detail decides whether a fleet comparison is meaningful, and it also decides which of three migration paths you actually need.

Two Android 12 phones are not the same test case

The AOSP change that stopped new devices from starting legacy IKEv1 profiles compares DEVICE_INITIAL_SDK_INT with Android S, which is API 31. In the native legacy startup path, a qualifying profile raises an unsupported-operation failure before any useful connection exists. A phone that shipped with Android 11 and later updated still passes that guard; a model that launched on Android 12 does not.

You can read the two numbers on a device with debugging enabled:

adb shell getprop ro.product.first_api_level
adb shell getprop ro.build.version.sdk
adb shell getprop ro.build.version.release

The first value is the launch level that the guard cares about, the second is what the phone runs today. Where the property is absent, fall back to the model support documentation rather than guessing from the marketing name, and do not assume a vendor build preserves every compatibility path its base release had.

One more distinction saves an hour of wasted support time: a saved profile still listed in VPN settings proves nothing about whether the platform will start it. Re-entering the PSK or editing routes cannot remove a protocol-support check that runs earlier, and the failure looks like a credentials problem when it is not.

Path one: keep the native legacy stack where it still runs

The legacy stack is the one that reads IPsec XAuth PSK, IPsec Hybrid RSA and L2TP/IPsec PSK profiles from the system VPN screen. On a device that shipped below API 31 it remains a viable path after an upgrade, which is why a pilot on an older handset can succeed while a new handset fails the same profile.

The comparison that matters is per device class, not per Android version: list the models in the fleet, read their launch API levels, and split them into devices that still start the profile and devices that cannot. Anything else produces a support policy that contradicts itself the moment a user buys a new phone.

Path two: platform IKEv2 profiles

Android's public provisioning model for IKEv2 is a different object, not a renamed IKEv1 profile. The platform API for IKEv2 profiles arrived with API 30 and expects IKEv2 with the authentication method the gateway offers, usually certificate-based or EAP. There is no wire-compatible upgrade from IKEv1 XAuth or Hybrid to IKEv2: the gateway has to be configured for the new protocol, and the profile has to carry the matching identity.

This is the path with the longest life, and also the one that exposes the real work. Identity validation, user authentication, DNS, split-tunnel routes and resource authorization all have to survive the migration; getting only the handshake to succeed leaves users connected to a tunnel that reaches nothing.

Deployment usually goes through an MDM or a managed configuration rather than a user typing fields. If that infrastructure does not exist yet, the migration plan has to include it, because re-entering an IKEv2 profile by hand on every device is not an operation a help desk can absorb.

Path three: a third-party client application

Some VPN applications ship their own protocol implementation and do not depend on the native legacy stack at all. That makes them a legitimate stopgap for a fleet that cannot migrate quickly, but the compatibility question moves to the app: whether it implements the exact IKEv1 mode your gateway speaks, with the authentication and cipher suites the gateway requires.

Treat the app's own support matrix as the authority rather than the store description, and test one real device against the real gateway before recommending it. Rooting a phone to restore a removed platform path is not a maintained solution either; it moves the problem into an unsupported configuration that the next system update can break silently.

Choose by what the gateway can offer

The decision narrows once you know two things: which devices launched on or after API 31, and whether the gateway can present an IKEv2 service with the same enrollment model. If the gateway can, migrate and stop investing in the legacy profile. If it cannot yet, keep IKEv1 for the devices that still start it, and give new devices a third-party client as a documented, time-boxed exception rather than an unstated workaround.

Two points make the plan defensible. First, record the reason for each exception with the model and launch level, so an auditor can see that the boundary is a platform guard rather than an unexplained preference. Second, treat the migration as planned work: IKEv1 is deprecated by the standards track (RFC 9395), which means the remaining devices will keep shrinking and the exceptions should expire with them.

Allakkat attuumassuteqartut