Blog

Google Nearby reduce el rendimiento de WiFi 2.4GHz al interferir con Bluetooth

Google Nearby reduce el rendimiento de WiFi 2.4GHz al interferir con Bluetooth

Tengo un Fairphone FP3+ en el que llevo observando problemas de rendimiento con WiFi 2.4GHz cuando está habilitado al mismo tiempo que Bluetooth. Llegaba como máximo a 4Mbps, cuando lo normal es 41Mbps (banda de 20Mhz). Con 5Ghz no hay problema pero no me cubre todos los puntos de mi vivienda. Necesito Bluetooth para una Mi Band. Estoy en Android 11 rooteado.

Habilitando y deshabilitando location junto con Battery Saver

Hace tiempo, me di cuenta de que deshabilitando la Localización en Android se solucionaba. En su momento leí que pudiera tener relación con el servicio «Nearby» de Google GMS, para comunicar dispositivos cercanos. Está continuamente escaneando por Bluetooth. Desafortunadamente, ahora deshabilitar la localización ya no surtía efecto. Curiosamente, al habilitar adicionalmente «Battery Saver» el rendimiento era el correcto. Mirando Logcat vi que al habilitar Battery Saver se desactivaba NearbyConnections:

Busqué el servicio de Nearby:

j@arai ~ % adb shell dumpsys activity services | grep nearby                                                                                                                             [130]
  * ServiceRecord{364cd30 u0 com.google.android.gms/.nearby.sharing.ReceiveSurfaceService}
    intent={cmp=com.google.android.gms/.nearby.sharing.ReceiveSurfaceService}
    intent={act=com.google.android.chimera.BoundService.START dat=chimera-action:com.google.android.gms.nearby.presence.service.START cmp=com.google.android.gms/.chimera.PersistentApiServiceNoInstantApps}
      intent={act=com.google.android.chimera.BoundService.START dat=chimera-action:com.google.android.gms.nearby.presence.service.START cmp=com.google.android.gms/.chimera.PersistentApiServiceNoInstantApps}
      intent={act=com.google.android.chimera.BoundService.START dat=chimera-action:com.google.android.gms.nearby.sharing.START_SERVICE cmp=com.google.android.gms/.chimera.PersistentApiServiceNoInstantApps}
      intent={act=com.google.android.gms.nearby.connection.service.START pkg=com.google.android.gms}
      intent={act=com.google.android.chimera.BoundService.START dat=chimera-action:com.google.android.gms.nearby.uwb.service.START cmp=com.google.android.gms/.chimera.PersistentApiServiceNoInstantApps}
  * ServiceRecord{b902da9 u0 com.google.android.gms/.nearby.sharing.SendSurfaceService}
    intent={cmp=com.google.android.gms/.nearby.sharing.SendSurfaceService}
  * ServiceRecord{489c590 u0 com.google.android.gms/.nearby.discovery.service.DiscoveryService}
    intent={act=com.google.android.gms.nearby.discovery:ACTION_PERMISSION_CHANGE cmp=com.google.android.gms/.nearby.discovery.service.DiscoveryService}
      intent={act=com.google.android.gms.nearby.discovery:ACTION_DEVICES_LIST_ACTIVITY cmp=com.google.android.gms/.nearby.discovery.service.DiscoveryService}
      intent={act=com.google.android.gms.nearby.discovery:ACTION_DEVICES_LIST_SLICE cmp=com.google.android.gms/.nearby.discovery.service.DiscoveryService}
      intent={act=com.google.android.gms.nearby.discovery:ACTION_ACCOUNT_SETTING cmp=com.google.android.gms/.nearby.discovery.service.DiscoveryService}

Busqué información sobre DiscoveryService:

255|FP3:/ # pm query-services com.google.android.gms/.nearby.discovery.service.DiscoveryService                                                                                               
1 services found:
  Service #0:
    priority=0 preferredOrder=0 match=0x0 specificIndex=-1 isDefault=false
    ServiceInfo:
      name=com.google.android.gms.nearby.discovery.service.DiscoveryService
      packageName=com.google.android.gms
      processName=com.google.android.gms.persistent
      enabled=true exported=true directBootAware=false
      permission=com.google.android.gms.permission.NEARBY_START_DISCOVERER
      flags=0x0
      ApplicationInfo:
        name=co.g.App
        packageName=com.google.android.gms
        labelRes=0x7f150683 nonLocalizedLabel=null icon=0x7f0802b3 banner=0x0
        className=co.g.App
        processName=com.google.android.gms
        taskAffinity=com.google.android.gms
        uid=10125 flags=0xa0cabec5 privateFlags=0xa8089118 theme=0x0
        requiresSmallestWidthDp=0 compatibleWidthLimitDp=0 largestWidthLimitDp=0
        sourceDir=/data/app/~~5qle97wv4EQo6sDPdZ6TyA==/com.google.android.gms-HCo-B9DamziDLLG6hOAFCA==/base.apk
        splitSourceDirs=[/data/app/~~5qle97wv4EQo6sDPdZ6TyA==/com.google.android.gms-HCo-B9DamziDLLG6hOAFCA==/split_CronetDynamite_installtime.apk, /data/app/~~5qle97wv4EQo6sDPdZ6TyA==/com.google.android.gms-HCo-B9DamziDLLG6hOAFCA==/split_DynamiteLoader_installtime.apk, /data/app/~~5qle97wv4EQo6sDPdZ6TyA==/com.google.android.gms-HCo-B9DamziDLLG6hOAFCA==/split_DynamiteModulesA_installtime.apk, /data/app/~~5qle97wv4EQo6sDPdZ6TyA==/com.google.android.gms-HCo-B9DamziDLLG6hOAFCA==/split_DynamiteModulesC_installtime.apk, /data/app/~~5qle97wv4EQo6sDPdZ6TyA==/com.google.android.gms-HCo-B9DamziDLLG6hOAFCA==/split_GoogleCertificates_installtime.apk, /data/app/~~5qle97wv4EQo6sDPdZ6TyA==/com.google.android.gms-HCo-B9DamziDLLG6hOAFCA==/split_MapsDynamite_installtime.apk, /data/app/~~5qle97wv4EQo6sDPdZ6TyA==/com.google.android.gms-HCo-B9DamziDLLG6hOAFCA==/split_MeasurementDynamite_installtime.apk, /data/app/~~5qle97wv4EQo6sDPdZ6TyA==/com.google.android.gms-HCo-B9DamziDLLG6hOAFCA==/split_config.en.apk, /data/app/~~5qle97wv4EQo6sDPdZ6TyA==/com.google.android.gms-HCo-B9DamziDLLG6hOAFCA==/split_config.es.apk, /data/app/~~5qle97wv4EQo6sDPdZ6TyA==/com.google.android.gms-HCo-B9DamziDLLG6hOAFCA==/split_config.ja.apk, /data/app/~~5qle97wv4EQo6sDPdZ6TyA==/com.google.android.gms-HCo-B9DamziDLLG6hOAFCA==/split_config.xxhdpi.apk]
        seinfo=default:privapp:targetSdkVersion=30
        seinfoUser=:complete
        dataDir=/data/user/0/com.google.android.gms
        deviceProtectedDataDir=/data/user_de/0/com.google.android.gms
        credentialProtectedDataDir=/data/user/0/com.google.android.gms
        sharedLibraryFiles=[/system/framework/org.apache.http.legacy.jar, /apex/com.android.extservices/javalib/android.ext.adservices.jar, /system/framework/com.android.media.remotedisplay.jar, /system/framework/com.android.location.provider.jar]
        splitClassLoaderNames=[dalvik.system.DelegateLastClassLoader, dalvik.system.DelegateLastClassLoader, dalvik.system.DelegateLastClassLoader, dalvik.system.DelegateLastClassLoader, dalvik.system.DelegateLastClassLoader, dalvik.system.DelegateLastClassLoader, dalvik.system.DelegateLastClassLoader, null, null, null, null]
        enabled=true minSdkVersion=30 targetSdkVersion=34 versionCode=244738022 targetSandboxVersion=1
        manageSpaceActivityName=co.g.Space
        supportsRtl=true
        fullBackupContent=true
        crossProfile=false
        networkSecurityConfigRes=0x7f190095
        category=7
        HiddenApiEnforcementPolicy=2
        usesNonSdkApi=false
        allowsPlaybackCapture=true

Aquí encontré cómo deshabilitarlo:

FP3:/data/user/0/com.google.android.gms/files/nearby # pm disable com.google.android.gms/.nearby.sharing.SendSurfaceService
Component {com.google.android.gms/com.google.android.gms.nearby.sharing.SendSurfaceService} new state: disabled

La barra entre gms y .nearby es correcta, no es una errata.

De momento funciona bien. He comprobado que después de reiniciar sigue yendo bien. ¡Cruzo los dedos!

ACTUALIZACIÓN: Al día siguiente se ha vuelto a activar automáticamente el proceso de Nearby, pero ahora al desactivar Localización sí que se solventa el problema, que es el comportamiento que recordaba de hace tiempo.