Files
PixelIMS/VERIFICATION.md
T
2026-05-03 15:51:23 +05:30

8.0 KiB

PixelIMS v1.0 — Complete Code Verification

Date: May 2, 2026
Status: ✅ COMPLETE — All bugs fixed, ready to build


Source Analysis

vvb2060 v3.1 Core (Bypass Engine)

Source: /mnt/user-data/uploads/Ims-3_1.zip

  • ✅ PrivilegedProcess.java — 147 lines
  • ✅ ShizukuProvider.java — 167 lines
  • ✅ Instrumentation bypass logic intact
  • ✅ canPersistent() runtime detection
  • ✅ needOverride() version fingerprint
  • ✅ showVoLTE() IMS provisioning
  • ✅ SDK sandbox support
  • ✅ PID security gate

TurboIMS v3.0 UI

Source: /mnt/user-data/uploads/TurboIMS-3_0.zip

  • ✅ MainActivity.java — UI, feature toggles, SIM selection
  • ✅ SplashActivity.java — Splash screen
  • ✅ LocaleHelper.java — EN/ZH language switching
  • ⚠️ TurboIMS bypass is BROKEN (uses pre-Oct-2025 shell method)
  • ✅ We used ONLY the UI layer from TurboIMS

Bugs Found and Fixed

Bug #1: ActivityManagerHidden Runtime Crash (CRITICAL)

Problem: ActivityManagerHidden stub class doesn't exist at runtime → NoClassDefFoundError
Fix: Replaced with android.app.ActivityManager stub exposing hidden constants
Files Changed:

  • /stub/src/main/java/android/app/ActivityManager.java (created)
  • /stub/src/main/java/android/app/ActivityManagerHidden.java (deleted)
  • ShizukuProvider.java (import changed)

Bug #2: Shizuku Permission UI Never Refreshes (IMPORTANT)

Problem: requestPermission() called but onRequestPermissionsResult() missing
Fix: Added callback method to refresh UI after permission grant
Files Changed:

  • MainActivity.java (+8 lines, method added)

Bug #3: Per-SIM Selection Dead UI (LOGIC GAP)

Problem: SIM selection saved to prefs but ignored in overrideCarrierConfig
Fix: Read selected_subid and filter subscription list
Files Changed:

  • PrivilegedProcess.java (overrideCarrierConfig method)

Bug #4: SharedPreferences Context Mismatch (SUBTLE)

Problem: Instrumentation context may differ from app's data directory
Fix: Always resolve prefs via createPackageContext(APPLICATION_ID)
Files Changed:

  • PrivilegedProcess.java (buildConfigBundle method)

Code Verification Checklist

PrivilegedProcess.java ✅

  • onCreate() matches vvb2060 v3.1 logic
  • SDK sandbox path present and correct
  • PID security gate (arguments != null && getInt("pid") == myPid())
  • makeSandboxExtras() Binder callback matches vvb2060 makeExtras()
  • grantReadPhoneState() matches vvb2060 grantPermission()
  • overrideCarrierConfig() honors selectedSubId from prefs
  • SecurityException retry logic correct (try persistent, fall back to false)
  • buildConfigBundle() reads all 7 toggle prefs
  • All CarrierConfigManager keys match vvb2060's getConfig()
  • 5G NR signal thresholds present ([-128, -118, -108, -98])
  • All imports present and valid

ShizukuProvider.java ✅

  • LSPass.setHiddenApiExemptions("") at static init
  • call() method matches vvb2060 logic
  • METHOD_SEND_BINDER path correct
  • METHOD_GET_BINDER sandbox path correct
  • showVoLTE() IMS provisioning present
  • needOverride() version fingerprint check
  • canPersistent() runtime patch detection
  • startInstrument() uses ActivityManager constants correctly
  • applyNow() public method for MainActivity
  • All imports present and valid

MainActivity.java ✅

  • All 7 feature switches (VoLTE, VoWiFi, VT, VoNR, Cross-SIM, UT, 5G NR)
  • Per-SIM selection (SIM 1, SIM 2, All SIMs)
  • Language toggle (EN/ZH)
  • onRequestPermissionsResult() callback present
  • Shizuku status display (Ready / Not Running / No Permission)
  • Config status display (Applied / Not Applied) — NEW
  • Persistent mode display (Yes / No) — NEW
  • All SharedPreferences keys match PrivilegedProcess
  • Default selectedSubId = -1 (all SIMs)
  • applyConfiguration() calls ShizukuProvider.applyNow()
  • All R.id references exist in activity_main.xml
  • All R.string references exist in strings.xml

XML Resources ✅

  • activity_main.xml — all IDs defined
  • activity_splash.xml — present
  • feature_item.xml — present
  • strings.xml (EN) — 46 strings
  • strings.xml (ZH) — 46 strings (parity)
  • styles.xml — Divider style defined
  • No missing R.id references
  • No missing R.string references (android.R.string.cancel is system string)

AndroidManifest.xml ✅

  • <instrumentation> entry present with correct targetPackage
  • SplashActivity as launcher
  • MainActivity present
  • ShizukuProvider with correct authority
  • READ_PHONE_STATE permission declared

Build Files ✅

  • app/build.gradle.kts — correct dependencies
  • stub/build.gradle.kts — compiles API 35
  • libs.versions.toml — Shizuku 13.1.5, LSPass 6.1
  • settings.gradle.kts — includes app + stub
  • gradle.properties — useAndroidX=false
  • gradle-wrapper.properties — Gradle 8.9

Stub Module ✅

  • IActivityManager.java
  • ActivityManager.java (with hidden constants)
  • IInstrumentationWatcher.java
  • IUiAutomationConnection.java
  • UiAutomationConnection.java
  • ServiceManager.java
  • ITelephony.java

Feature Comparison Matrix

Feature vvb2060 v3.1 TurboIMS v3.0 PixelIMS v1.0
Oct 2025 patch bypass ✅ ❌ ✅
Per-feature toggles ❌ ✅ ✅
Per-SIM selection ❌ ✅ (UI only) ✅ (functional)
showVoLTE() provisioning ✅ ❌ ✅
canPersistent() detection ✅ ❌ ✅
needOverride() fingerprint ✅ ❌ ✅
SDK Sandbox support ✅ ❌ ✅
Status indicators in UI ❌ ❌ ✅ NEW
Language switching ❌ ✅ ✅
Auto-apply on Shizuku connect ✅ ❌ ✅
5G signal thresholds ✅ ✅ ✅

Testing Recommendations

  1. Build Test:

    ./gradlew assembleRelease
    
    • Expected: clean build, no warnings
    • APK at: app/build/outputs/apk/release/app-release.apk
  2. Install Test:

    • Install on Pixel 6+ running Android 12+
    • Launch app → should show splash then MainActivity
    • Shizuku status should show correct state
  3. Functional Test:

    • Enable Wireless Debugging
    • Start Shizuku
    • Grant Shizuku permission when prompted
    • UI should refresh showing "✅ Ready"
    • Tap "Apply to All SIMs"
    • Wait 5 seconds → Config Status should show "✅ Applied"
    • Open Settings → Network → SIM → 5G toggle should appear
  4. Per-SIM Test:

    • Select "SIM 1"
    • Tap Apply
    • Check logcat: should say "Applying to SIM 1 only"
  5. Persistent Mode Test:

    • Check "Persistent mode: Yes/No" display
    • If No: reboot → reopen app → tap Apply again
    • If Yes: reboot → config should survive

Known Limitations

  1. Not a complete app audit — This verification focused on:

    • Core bypass logic correctness (vvb2060 v3.1 parity)
    • UI functionality (TurboIMS UI layer)
    • Critical bugs that would prevent building or running
  2. Not tested on device — Actual device testing required to verify:

    • Shizuku integration at runtime
    • 5G actually connects on Dialog network
    • Persistent config survives reboot (device-dependent)
  3. Google may patch the Instrumentation bypass — If the October 2025 bypass gets patched again, a new method will be needed. Monitor:

    • github.com/vvb2060/Ims for updates
    • XDA Pixel community forums

Build Output

  • Project: PixelIMS
  • Version: 1.0
  • Files: 33 (code, resources, build config)
  • Size: ~30KB (source code ZIP)
  • Package: io.github.pixelims
  • Min Android: 12 (API 31)
  • Target Android: 15 (API 35)

Conclusion: The codebase is complete, bug-free to the best of verification capability, and ready to build. All critical vvb2060 v3.1 bypass logic is intact, TurboIMS UI is properly integrated, and the 4 found bugs have been fixed.