A small Android app that overrides the carrier name (and optionally the SIM country ISO) shown by the system, without rooting your phone. Changes survive reboots. Hit Reset in the app to undo.
This is a fork of nullbytepl/CarrierVanityName
that fixes the crash introduced by the October 2025 Pixel security patch
(upstream issues #29,
#32).
| Version | Min Android | What's new |
|---|---|---|
| 1.2 (this fork) | 9.0 (API 28) | Routes carrier-config writes through an Instrumentation broker on devices with the Oct 2025 patch or later, so Set / Reset no longer crash. |
| 1.1 (upstream) | 9.0 (API 28) | Adds SIM country ISO override. |
- Android 9 or newer.
- Shizuku running and granted to this app. The workaround uses Shizuku's shell-UID binder to call hidden telephony APIs.
- A SIM card in the slot you want to rename.
Warning
Anything that talks to system services through Shizuku can leave your phone in a weird state if something goes wrong. This is provided as is, with no warranty. You use it at your own risk.
Grab the APK from the Releases
page and sideload it. The upstream releases at
nullbytepl/CarrierVanityName
are still up too, but they pre-date the Oct 2025 fix.
- Open Shizuku and make sure the service is running.
- Open Carrier Vanity Name and grant the Shizuku permission prompt.
- Pick the SIM slot.
- Type the carrier name you want shown. Optionally enter a two-letter ISO
country code (e.g.
us,jp) to override the SIM's country. - Tap Set. Tap Reset to revert.
The change is applied via CarrierConfigManager overrides, so it survives
reboots until you reset it.
Carrier Vanity Name calls several hidden Android APIs (ICarrierConfigLoader,
IActivityManager, UiAutomationConnection, TelephonyFrameworkInitializer,
hidden overloads on SubscriptionManager / TelephonyManager, hidden constants
on CarrierConfigManager). None of these are in the public android.jar that
ships with the Android SDK, so a clean gradlew assembleDebug against a stock
SDK install fails to compile.
To get it to build, swap your SDK's android.jar for a hidden-API one:
- Find your Android SDK. On Windows it's usually
%LOCALAPPDATA%\Android\Sdk— Android Studio shows the path under Settings → Languages & Frameworks → Android SDK. - Back up the stock jar:
Copy-Item "$env:LOCALAPPDATA\Android\Sdk\platforms\android-33\android.jar" ` "$env:LOCALAPPDATA\Android\Sdk\platforms\android-33\android.jar.orig"
- Drop in the API 33 jar from
Reginer/aosp-android-jar:Invoke-WebRequest ` -Uri "https://raw.githubusercontent.com/Reginer/aosp-android-jar/main/android-33/android.jar" ` -OutFile "$env:LOCALAPPDATA\Android\Sdk\platforms\android-33\android.jar"
- From the repo root:
The APK ends up at
.\gradlew clean assembleDebugapp\build\outputs\apk\debug\app-debug.apk.
To revert, copy android.jar.orig back over android.jar. The swap only
affects compile time — the device runs against its own framework regardless.
The October 2025 Pixel patch tightened the caller-identity check on
ICarrierConfigLoader.overrideConfig. Calling it over Shizuku (which proxies
as the shell UID) now throws, instead of writing the override. That's the
instant crash on Set / Reset.
On affected builds, the app:
- Reads
Build.VERSION.SECURITY_PATCHand switches to the broker path when the patch date is 2025-10 or later. - Asks the activity manager (over Shizuku) to launch
BrokerInstrumentationinside the app's own process. - From inside the broker, calls
IActivityManager.startDelegateShellPermissionIdentityto take on shell's permission identity, then callsCarrierConfigManager.overrideConfigdirectly. If the system rejectspersistent=true, it retries withpersistent=false. - Older builds still take the original direct path.
nullbytepl/CarrierVanityName— the original app.kyujin-cho/pixel-volte-patch— the broker workaround pattern.BrokerInstrumentation.ktis a port of upstream's file of the same name, and the security-patch-date dispatch inTargetFragment.overrideCarrierConfigfollows the approach fromModer.overrideConfigthere.Reginer/aosp-android-jar— hidden-APIandroid.jarused at build time.- Shizuku — the binder proxy that makes any of this possible on a non-rooted device.
GPL-3.0. See LICENSE. Because the broker code is adapted from
kyujin-cho/pixel-volte-patch (GPL-3.0), this whole project is GPL-3.0 too.