Android以太网和Wi-Fi同时使用

时间:2013-08-09 09:27:58

标签: android networking wifi ethernet

我有一个运行Android的小型电视盒设备。每当我打开Wi-Fi接口时,以太网接口都会断开连接。如果我然后打开以太网设备,Wi-Fi接口。 我尝试了各种方法,包括使用命令行手动调出接口,并出现同样的问题。 我希望能够连接到Wi-Fi并将其作为我的默认网关,但也可以连接到以太网端口以通过该接口路由某些流量。 显然这可以在Linux中完成,所以必须有一种方法......有人知道在启动另一个接口时拆除接口是什么......

3 个答案:

答案 0 :(得分:6)

这是Android中的限制。它故意只允许一个连接一次启动,并且在“ConnectivityServices.java”文件中有一个处理程序,当启用具有优先级的网络时,该处理程序会断开“非首选”网络。这也是在公认的热点范围内带来无线网络并断绝蜂窝数据连接的原因......

以防任何人需要这个,这就是我所做的:

在设备上下载Android版本的AOSP源代码。

相应地编辑'ConnectivityServices.java'文件。我基本上只是在连接更改处理程序中的故障转移命令中注释掉了该命令。我没有在我面前的源代码,所以如果你需要知道我在这里做了什么,请给我留言......

无论如何,然后在您的机器上构建AOSP源代码。

完成后,获取已创建的/ dexclasses /目录中的'services.jar'文件。 使用WinRAR将其解压缩,然后将.jar文件中的“classes.dex”文件复制到单独的目录中。 用它来提取classes.dex:https://code.google.com/p/smali/ 抓住'ConnectivityServices.smali'文件并保证其安全。

来自设备 转到要启用两个网络接口的设备,然后将/system/framework/services.jar文件复制到PC。使用WinRAR将其解压缩,然后将.jar文件中的“classes.dex”文件复制到单独的目录中。 使用Java Smali命令提取classes.dex。

从AOSP获取ConnectivityServices.smali文件并将其直接放入您刚刚使用设备上的classes.dex提取的文件中。在覆盖原始ConnectivityServices.smali文件之前备份它可能是个好主意。

然后使用baksmali命令简单地重新打包classes.dex文件。 使用winRAR将classes.dex文件复制到原始的services.jar文件中。再次,备份原始文件,然后在.jar文件中覆盖它。

然后简单地将新的services.jar文件放回/ system / framework /目录中的设备上。

然后重新启动 - 第一次启动时需要比平时更长的时间。

答案 1 :(得分:2)

有一种更简单的方法,它不需要您构建与您的设备匹配的AOSP。您可以简单地修改smali-decompiled代码并重新编译它。使用https://github.com/android/platform_frameworks_base/blob/master/services/java/com/android/server/ConnectivityService.java进行比较。 这方面的事情:

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

在handleConnect()中编辑/ com / android / server / ConnectivityService.smali,这样就可以了:

// 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) { ...

我做了以下更改:

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

重新编译,重新包装,推送。然后重启并测试。

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

答案 2 :(得分:1)

所以我也发现了如何在CM12.1

上做到这一点

在这里更改此行 https://github.com/CyanogenMod/android_frameworks_base/blob/e49d5ea0858a765c22d8aa96cc660d4708a413fb/services/core/java/com/android/server/ConnectivityService.java#L4264

或在smali中替换.line 4266之前的行 与转到:cond_1b1