7.7 KiB
PixelIMS — VoLTE para Pixel con operadores no certificados
Fork de vvb2060/Pixel IMS (motor de bypass v3.1) con interfaz de TurboIMS, compilado, corregido y verificado en un Pixel 6 con la red de Altán Redes (MVNO NeWWW, México).
Habilita VoLTE, VoWiFi, 5G NR, VoNR, video llamadas, cross-SIM y servicios UT en Google Pixel (Tensor) cuando el operador no está en la lista certificada de Google — sin root (vía Shizuku).
Estado verificado
- ✅ Compila desde fuente (ver Construir desde fuente)
- ✅ Instala y aplica la configuración en un Pixel 6 (oriole) con Android 16, parche 2026-04-05
- ✅ VoLTE activo y funcionando con NeWWW (Red Altán, MCC/MNC 334-140)
- ⚠️ Tras cada reinicio hay que re-aplicar (ver Comportamiento tras reinicio)
Requisitos
- Google Pixel 6 o posterior (chip Tensor)
- Android 12+ (
minSdk 31) - Shizuku 13.1.5+ (Play Store, gratis)
- Sin root, sin PC obligatorio (solo para la instalación inicial por adb o para arrancar Shizuku por cable)
Instalación
- Instalar el APK (ya compilado en
dist/PixelIMS-1.0.apk):adb install dist/PixelIMS-1.0.apk - Instalar Shizuku desde Play Store y arrancarlo:
- Sin PC: Developer options → Depuración inalámbrica → pairing desde Shizuku, o
- Por cable:
adb shell sh /sdcard/Android/data/moe.shizuku.privileged.api/start.sh
- Abrir PixelIMS → conceder permiso de Shizuku → esperar "✅ Ready".
- Pulsar "Apply to All SIMs" → esperar el diálogo de éxito.
- Activar el toggle: Ajustes → Red e internet → SIMs → NeWWW → Llamadas 4G (VoLTE) → ON.
- Verificar:
*#*#4636#*#*→ ⋮ → Estado del servicio IMS → "Voice over LTE: Available".
Nota: la app hace visibles y editables los toggles de VoLTE/VoWiFi en los ajustes del SIM, pero no los enciende por sí sola — el paso 5 es manual (y solo una vez).
Comportamiento tras reinicio
- La app se auto-aplica sola cada vez que Shizuku entrega su binder (no hay que pulsar Apply de nuevo); los toggles quedan guardados.
- Pero Shizuku no sobrevive al reinicio sin root: la depuración inalámbrica se apaga. Rutina por reinicio (2 toques): activar depuración inalámbrica → abrir Shizuku y Start. La app hace el resto automáticamente.
- Si el dispositivo reporta "Persistent: Yes" en la app, la config sobrevive reinicios por sí sola (en builds recientes de Android 15/16 normalmente reporta "No").
- 100% automático solo con root (Magisk): Shizuku arranca por root al boot y la app se auto-aplica. Costo: desbloquear bootloader (borra datos), Play Integrity, OTA manuales.
Construir desde fuente
El código original no compila tal cual: usa ~30 APIs ocultas de Android (CarrierConfigManager.overrideConfig, IActivityManager, ITelephony, PermissionManager, etc.) que no existen en el android.jar público. Tampoco el upstream (vvb2060/Ims v3.1) compila desde un clon limpio — requiere un android.jar completo no versionado en el repo.
Correcciones aplicadas a este fork
settings.gradle.kts— eliminado elversionCatalogs { create("libs") }duplicado (Gradle auto-importagradle/libs.versions.tomlcomolibs).gradle.properties—android.useAndroidX=true(Shizuku 13.1.5 arrastraandroidx.annotationtransitiva).MainActivity.java—Shizuku.onRequestPermissionsResult()no existe en Shizuku 13.1.5; reemplazado poraddRequestPermissionResultListener/removeRequestPermissionResultListener.- APIs ocultas — config migrada a AGP 9.2.0 (plugin
com.android.settings, DSL ensettings.gradle.kts) concompileSdk = release(37), y un SDK local cuyoandroid.jarse reemplaza por el framework completo de Robolectric (org.robolectric:android-all:17-robolectric-15733970, SHA-256f6a41ad548bb45cccd3b1d4774cb50d57826dd319b6e5accd6b6269876e12d71), que sí incluye las clases y métodos ocultos.
Pasos reproducibles
# 1. Prerrequisitos: JDK 17+ y Gradle 9.4.1
# https://services.gradle.org/distributions/gradle-9.4.1-bin.zip
# 2. SDK Android (platform-tools, platform android-37.0, build-tools 37.0.0, licencias aceptadas)
# 3. Crear un SDK local con el android.jar completo:
mkdir -p local-sdk/platforms local-sdk/build-tools
cp -r $ANDROID_HOME/platforms/android-37.0 local-sdk/platforms/
curl -o android-all-37.jar \
https://repo1.maven.org/maven2/org/robolectric/android-all/17-robolectric-15733970/android-all-17-robolectric-15733970.jar
cp android-all-37.jar local-sdk/platforms/android-37.0/android.jar # ← reemplazo clave
ln -s $ANDROID_HOME/build-tools/37.0.0 local-sdk/build-tools/37.0.0
ln -s $ANDROID_HOME/licenses local-sdk/licenses
# y ajustar sdk.dir en local.properties
# 4. Compilar:
gradle assembleRelease
# APK en app/build/outputs/apk/release/app-release.apk (firmado con debug key)
¿Por qué un SDK local? javac prioriza el android.jar del SDK sobre cualquier jar del classpath, así que un módulo de stubs no puede añadir métodos ocultos a clases existentes — la única vía es sustituir el propio android.jar por uno completo (el de Robolectric contiene TODO el framework).
Diagnóstico VoLTE en Pixel 6 + NeWWW (Altán 334-140)
El detalle completo de la investigación con evidencia de logcat/dumpsys está en docs/diagnostico-volte-newww.md. Resumen de la cadena:
- La config de operador se aplica con
persistent=truey el aprovisionamiento IMS quedaPROVISIONING_VALUE_ENABLED. - El APN
imsya viene provisionado en la SIM de NeWWW. - La red concede voz sobre LTE:
availableServices=[VOICE,SMS,VIDEO],mVoiceRegState=IN_SERVICE. - El toggle "Llamadas 4G" aparece en Ajustes → SIMs tras aplicar la config — hay que encenderlo.
- El ImsService del módem Shannon (
com.shannon.imsservice) corre con normalidad.
VozApp (plan B oficial de Altán)
com.altanredes.altanvoip— la app de llamadas VoIP del propio operador (Altán Redes) para equipos sin VoLTE nativo. No está en Play Store; se distribuye por los centros de ayuda de los MVNOs (BAIT, VIVA MX) y espejos de APK.- Espejo verificado en esta investigación: APKCombo,
VozApp_2.1.0.apk, SHA-25675dd0dde4f6184568ea2337c5cf397c6a1b0e28a65bf555588f401cdc4af24ed, firmada por Neusoft Mobile Solutions Oy (plataforma "Silta"). - ⚠️ Crash conocido en Android 16:
ForegroundServiceStartNotAllowedExceptionencom.unikie.vm.application.engine.services.AppStatusServiceal arrancar un servicio en foreground desde segundo plano. Es un bug de la app (plataforma Unikie), no del teléfono. - Con VoLTE nativo funcionando (el objetivo de este proyecto), VozApp queda solo como respaldo.
Créditos y licencia
- vvb2060/Ims — motor de bypass v3.1 (Instrumentation trick,
canPersistent(),showVoLTE()) - Turbo1123/TurboIMS — UI, toggles por feature y por SIM
- VinujaHerath/PixelIMS — fork base de este repo
- RikkaApps/Shizuku y LSPosed/LSPass
El repositorio original no declara licencia. Este proyecto reutiliza ese código con fines de interoperabilidad personal; úsalo bajo tu propio riesgo.
Aviso
Esta app sobrescribe la configuración del operador a nivel de framework (no toca particiones; se revierte desinstalando). Técnicamente contradice las políticas del operador. Los autores no se hacen responsables del uso que se le dé.