Android Ethernet y Wi-Fi al mismo tiempo

Tengo un pequeño dispositivo de la caja de TV con Android. Siempre que traigo la interfaz Wi-Fi, la interfaz Ethernet está desconectada. Si luego traigo el dispositivo Ethernet, la interfaz Wi-Fi. He intentado varios métodos incluyendo usar la línea de comando para traer manualmente para arriba las interfaces y el mismo problema ocurre. Quiero poder conectarme a la red Wi-Fi y tenerla como mi puerta de enlace predeterminada pero también estar conectada al puerto Ethernet para encaminar cierto tráfico por esa interfaz. Obviamente, esto es posible hacer en Linux, así que debe haber una manera … ¿Alguien sabe lo que es que está rompiendo las interfaces cuando se inicia el otro …

Esta es una restricción en Android. Propiamente sólo permite que una conexión para arriba a la vez y tiene un controlador en el archivo 'ConnectivityServices.java' que arranca una red 'no preferido' cuando una red con una prioridad está habilitada. Esto también es lo que trae wifi y rompe conexiones de datos celulares cuando en el rango de un hotspot reconocido …

Por si alguien necesita esto, esto es lo que hice:

Descargue el código fuente de AOSP para la versión de Android en el dispositivo.

Edite el archivo 'ConnectivityServices.java' en consecuencia. Básicamente, sólo comentó el comando en el comando de conmutación por error en el controlador de cambio de conexión. No tengo el código fuente delante de mí tan mensaje yo si necesitas saber lo que hice aquí …

De todos modos, a continuación, construir el código fuente AOSP en su máquina.

Una vez completado, tome el archivo 'services.jar' en el directorio / dexclasses / que se ha creado. Extraerlo con WinRAR y luego copiar el archivo 'classes.dex' fuera del archivo .jar a un directorio separado. Use esto para extraer las clases.dex: https://code.google.com/p/smali/ Coge el archivo 'ConnectivityServices.smali' y manténgalo seguro.

Desde el dispositivo Vaya al dispositivo en el que desea habilitar las interfaces de red y copie el archivo /system/framework/services.jar en un PC. Extraerlo con WinRAR y luego copiar el archivo 'classes.dex' fuera del archivo .jar a un directorio separado. Utilice el comando Java Smali para extraer classes.dex.

Tome el archivo ConnectivityServices.smali de AOSP y póngalo en el directorio que acaba de extraer utilizando el classes.dex en el dispositivo. Puede ser una buena idea hacer una copia de seguridad del archivo ConnectivityServices.smali original antes de sobrescribirlo.

A continuación, reempaque el archivo classes.dex utilizando el comando baksmali. Copie el archivo classes.dex en el archivo services.jar original utilizando winRAR. Una vez más, tome una copia de seguridad del original, pero luego sobrescribirlo en el archivo .jar.

A continuación, simplemente vuelva a colocar el nuevo archivo services.jar en el dispositivo en el directorio / system / framework /.

A continuación, reinicie: se tardará más de lo normal en arrancar la primera vez.

Hay una manera más simple, que no requiere que usted construya AOSP que empareja su dispositivo. Simplemente puede modificar el código smali-decompiled y volver a compilarlo. Utilice https://github.com/android/platform_frameworks_base/blob/master/services/java/com/android/server/ConnectivityService.java para comparizon. Algo en este sentido:

adb pull /system/framework/services.jar cp services.jar services.jar.bak unzip services.jar classes.dex java -jar baksmali.jar classes.dex 

Edite out / com / android / server / ConnectivityService.smali en handleConnect (), para que este sea el resultado:

 // if this is a default net and other default is running // kill the one not preferred if (false && mNetConfigs[newNetType].isDefault()) { if (mActiveDefaultNetwork != -1 && mActiveDefaultNetwork != newNetType) { ... 

Hice el siguiente cambio:

 aget-object v5, v5, v1 invoke-virtual {v5}, Landroid/net/NetworkConfig;->isDefault()Z move-result v5 #if-eqz v5, :cond_a6 # changed to unconditional jump goto :cond_a6 

Recompilar, empaquetar, empujar. A continuación, reinicie y pruebe.

 java -jar smali.jar -o classes.dex out zip services.jar classes.dex adb push services.jar /system/framework/services.jar 

Así que también descubrí cómo hacerlo en CM12.1

Cambie esta línea aquí https://github.com/CyanogenMod/android_frameworks_base/blob/e49d5ea0858a765c22d8aa96cc660d4708a413fb/services/core/java/com/android/server/ConnectivityService.java#L4264

O en smali reemplazar la línea antes. Línea 4266 con goto: cond_1b1

  • SecurityException al obtener los resultados de la exploración Wifi
  • WiFi-Direct en JellyBean, WPA Suplicante desordenado
  • Wi-Fi tethering - cómo obtener la lista de clientes conectados
  • Conéctese a wifi sin Internet mediante programación
  • Comprobación de Wi-Fi activado o no en Android
  • Conectarse a WiFi abierto
  • Cómo comprobar el Internet real conectado en android?
  • Como encontrar la dirección de la señal wifi de otro dispositivo en android?
  • Detectar Si no hay conexión a Internet
  • Conecta el iPhone a Android Wifi Direct soft AP
  • ¿Es posible eliminar los grupos Wifi Direct de Android programados?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.