A minimal Android app that lets you set any active eSIM as your mobile data SIM independently of your voice SIM — no root required.
Built for Samsung Galaxy Z Fold 7 (One UI 8 / Android 16), but works on any Android 8+ dual-SIM device.
Opens a screen listing all your active SIMs. Tap one to make it the default data provider. Your voice SIM stays unchanged.
It uses a hidden system API (SubscriptionManager.setDefaultDataSubId) that requires one ADB permission grant — done once, permanently.
- A Windows/Mac/Linux PC with ADB installed
- Android Studio (to build the APK), or just install the pre-built debug APK if available
- USB cable (or Wi-Fi ADB)
- Settings → About phone
- Tap Build number 7 times rapidly
- Enter your PIN if prompted
- Go back to Settings → Developer options
- Enable USB debugging
- Clone this repo:
git clone https://github.com/QuantDeveloperUSA/sim-data-switcher.git - Open the folder in Android Studio
- Click Build → Build Bundle(s) / APK(s) → Build APK(s)
- APK will be at:
app/build/outputs/apk/debug/app-debug.apk
git clone https://github.com/QuantDeveloperUSA/sim-data-switcher.git
cd sim-data-switcher
./gradlew assembleDebug # Mac/Linux
gradlew.bat assembleDebug # Windows PowerShellAPK output: app/build/outputs/apk/debug/app-debug.apk
Connect your phone via USB, accept the "Allow USB debugging" prompt on the phone, then:
adb install app/build/outputs/apk/debug/app-debug.apkThis is the critical step. The app needs MODIFY_PHONE_STATE which can only be granted via ADB:
adb shell pm grant com.abfstech.simswitcher android.permission.MODIFY_PHONE_STATEYou only need to do this once. The permission persists across reboots.
- Open SIM Switcher from your app drawer
- Your active SIMs are listed (mint, usa urozet, etc.)
- The currently active data SIM is highlighted in green with a ✓
- Tap any SIM to switch data to it
- The screen refreshes immediately confirming the change
Your voice/calls SIM (mint) remains unchanged.
"No active SIMs found" → Make sure the SIMs you want are toggled ON in Settings → Connections → SIM manager
"Error: permission denied" → Re-run the ADB grant command in Step 4. Make sure USB debugging is enabled.
App crashes on launch → Ensure you're running Android 8.0 (API 26) or higher. Check with Settings → About phone → Android version.
ADB not recognized in PowerShell → Download Platform Tools, extract the zip, and run the commands from inside that folder:
cd C:\path\to\platform-tools
.\adb.exe install ...
.\adb.exe shell pm grant ...Android exposes SubscriptionManager.setDefaultDataSubId(int subId) as a hidden API. It requires the MODIFY_PHONE_STATE permission, which is normally reserved for system/carrier apps. However, Android allows granting it via ADB on debug builds without root.
The app calls this method via reflection, meaning it works without any special build flags.
sim-data-switcher/
├── app/
│ ├── src/main/
│ │ ├── java/com/abfstech/simswitcher/
│ │ │ └── MainActivity.java ← entire app, ~120 lines
│ │ └── AndroidManifest.xml
│ └── build.gradle
├── build.gradle
├── settings.gradle
└── gradle/wrapper/gradle-wrapper.properties
No dependencies. No XML layouts. Pure Java, single activity.