Android2.3 Ethernet Framework 移植(一)

 

本文主要是介绍如何移植android-x86现成的Ethernet框架到android2.3 中, 实现系统对Ethernet的支持。

前面大部分内容摘自于网络, 后面是个人补充, 力求让整个Ethernet框架更完善.

 

一、下载android-x86代码,

repo init -u git://android-x86.git.sf.net/gitroot/android-x86/x86/platform/manifest.git -b gingerbread-x86

;gingerbread-x86代表2.3版本, 全部源码太大, 可以用下面的命令只下载和Ethernet相关的代码

repo sync platform/frameworks/base
repo sync platform/packages/apps/Settings

 

二、移植framework部分(+号的行代表增加的内容,-号的行代表删除的内容)
源路径:你下载的gingerbread-x86
目标路径: 你的项目路径

2.1.将源路径framework/base/ethernet 复制到目标路径的framework/base/目录下

2.2.修改目标路径的framework/base目录下的Android.mk
    vpn/java/android/net/vpn/IVpnService.aidl \
+ ethernet/java/android/net/ethernet/IEthernetManager.aidl \
    voip/java/android/net/sip/ISipSession.aidl \

2.3. 将源路径文件frameworks/base/services/java/com/android/server/EthernetService.java复制到目标路径frameworks/base/services/java/com/android/server/目录下

2.4. 修改目标路径framework/base/service/java/com/android/server目录下的ConnectivityService.java文件
import android.net.wifi.WifiStateTracker;
+import android.net.ethernet.EthernetStateTracker;
import android.net.wimax.WimaxManagerConstants;
//-----------------------------------------------------------------------------------------
if (mNetAttributes[n.mType] != null) {
    Slog.e(TAG, "Error in networkAttributes - ignoring attempt to redefine type " +
        n.mType);
    continue;
}
-if (mRadioAttributes[n.mRadio] == null) {
+if ((n.mType != ConnectivityManager.TYPE_ETHERNET) && (mRadioAttributes[n.mRadio] == null)) { 
    Slog.e(TAG, "Error in networkAttributes - ignoring attempt to use undefined " +
        "radio " + n.mRadio + " in network type " + n.mType);
    continue;
}
mNetAttributes[n.mType] = n;
mNetworksDefined++;
} catch(Exception e) {
+Slog.e(TAG, "wrong dev exception " + e); 
// ignore it - leave the entry null
}
//-----------------------------------------------------------------------------------------
wifiService.startWifi();
mNetTrackers[ConnectivityManager.TYPE_WIFI] = wst;
wst.startMonitoring();
break;
+case ConnectivityManager.TYPE_ETHERNET:
+if (DBG) Slog.v(TAG, "#########Starting Ethernet Service.");  
+EthernetStateTracker est = new EthernetStateTracker(context, mHandler);  
+EthernetService ethService = new EthernetService(context, est);  
+ServiceManager.addService(Context.ETHERNET_SERVICE, ethService);  
+mNetTrackers[ConnectivityManager.TYPE_ETHERNET] = est;  
+est.startMonitoring(); 
+break;//by bjw
case ConnectivityManager.TYPE_MOBILE:
//-----------------------------------------------------------------------------------------
if (noMobileData) {
    if (DBG) Slog.d(TAG, "tearing down WiMAX networks due to setting");
    mNetTrackers[netType].teardown();
}
break;
default:
// Slog.e(TAG, "Trying to create a DataStateTracker for an unknown radio type " +
// mNetAttributes[netType].mRadio);

2.5. 将源路径framework/base/core/jni/android_net_ethernet.cpp复制到目标路径framework/base/core/jni/目录下

2.6. 修改目标路径framework/base/core/jni/AndroidRuntime.cpp文件
extern int register_android_net_wifi_WifiManager(JNIEnv* env);
+extern int register_android_net_ethernet_EthernetManager(JNIEnv* env);
extern int register_android_security_Md5MessageDigest(JNIEnv *env);
//-----------------------------------------------------------------------------------------
REG_JNI(register_android_net_wifi_WifiManager),
+REG_JNI(register_android_net_ethernet_EthernetManager),
REG_JNI(register_android_nfc_NdefMessage),

2.7. 修改目标路径framework/base/core/jni/Android.mk文件,添加ethernetJNI接口文件的编译项
android_net_wifi_Wifi.cpp \
+android_net_ethernet.cpp \
android_nio_utils.cpp \

2.8. 修改目标路径framework/base/java/android/content/Context.java
public static final String WIFI_SERVICE = "wifi";
+public static final String ETHERNET_SERVICE = "ethernet";

2.9. 修改目标路径frameworks/base/core/java/android/provider/Settings.java
        public static final String WIFI_ON = "wifi_on";

+        /**
+         * Ethernet related configurations
+         */
+        public static final String ETHERNET_ON      = "ethernet_on";
+        public static final String ETHERNET_MODE    = "ethernet_mode";
+        public static final String ETHERNET_IP      = "ethernet_ip";
+        public static final String ETHERNET_MASK    = "ethernet_netmask";
+        public static final String ETHERNET_DNS     = "ethernet_dns";
+        public static final String ETHERNET_ROUTE   = "ethernet_iproute";
+        public static final String ETHERNET_CONF    = "ethernet_conf";
+        public static final String ETHERNET_IFNAME  = "ethernet_ifname";

2.10. 修改目标路径frameworks/base/core/java/android/app/ContextImpl.java
import android.net.wifi.WifiManager;
+import android.net.ethernet.IEthernetManager;
+import android.net.ethernet.EthernetManager;
import android.nfc.NfcManager;
//-----------------------------------------------------------------------------------------
private static WifiManager sWifiManager;
+private static EthernetManager sEthernetManager;
private static LocationManager sLocationManager;
//-----------------------------------------------------------------------------------------
    } else if (WIFI_SERVICE.equals(name)) {
        return getWifiManager();
+    } else if (ETHERNET_SERVICE.equals(name)) {  
+        return getEthernetManager();  //by bjw
    } else if (NOTIFICATION_SERVICE.equals(name)) {
        return getNotificationManager();
//-----------------------------------------------------------------------------------------
return sWifiManager;
    }
+    private EthernetManager getEthernetManager()  
+    {  
+        synchronized (sSync) {  
+            if (sEthernetManager == null) {    
+                IBinder b = ServiceManager.getService(ETHERNET_SERVICE);

+                if (b == null) {
+                        Log.w(TAG, "Error getting service name:" + ETHERNET_SERVICE);
+                } 
+                IEthernetManager service = IEthernetManager.Stub.asInterface(b);  
+                sEthernetManager = new EthernetManager(service, mMainThread.getHandler());  
+            }  
+        }  
+        return sEthernetManager;  
+    }
private NotificationManager getNotificationManager() {

2.11. 修改目标路径frameworks/base/core/res/res/values/config.xml
<item><xliff:g id="id">wifi</xliff:g></item>
+<item><xliff:g id="id">ethernet</xliff:g></item>
<item><xliff:g id="id">cdma_eri</xliff:g></item>
//-----------------------------------------------------------------------------------------
<item>"mobile_hipri,5,0,3"</item>
+<item>"ethernet,9,9,1"</item>
</string-array>

2.12. 修改目标路径frameworks/base/core/java/android/net/ConnectivityManager.java

public static final int TYPE_WIMAX       = 6;
+public static final int TYPE_ETHERNET    = 9;
+public static final int MAX_RADIO_TYPE   = TYPE_ETHERNET;
public static final int MAX_NETWORK_TYPE = TYPE_ETHERNET;//modify TYPE_MOBILE_HIPRI to TYPE_ETHERNET

 

--120917

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Android 9.0是一款广泛应用于移动设备的操作系统,它提供了强大的连接功能,包括无线和有线网络。而ethernet模块是其中一个重要的组成部分。 在Android 9.0中,ethernet模块是用于连接有线网络的功能。它允许用户通过有线网络连接设备,以获取更稳定和高速的数据传输。与无线网络相比,有线网络具有更高的带宽和更低的延迟,适用于一些对网络稳定性有更高要求的场景。比如,在办公室或家庭中,用户可以通过ethernet模块将设备连接到路由器或交换机上,以提供更稳定的网络连接。 ethernet模块的设置非常简单。用户只需将网线插入设备的ethernet接口,然后在系统设置中进行一些简单的配置即可。一般来说,用户需要指定IP地址、子网掩码、网关等网络参数。此外,用户还可以设置DNS服务器地址,以便设备能够正确解析域名。 通过ethernet模块连接有线网络后,用户可以享受到更快速的网络体验。无论是浏览网页、观看视频还是进行在线游戏,都能够感受到更低的延迟和更稳定的连接。此外,ethernet模块还可以用于实现局域网共享,用户可以在局域网内共享文件、打印机和其他资源。 总的来说,Android 9.0的ethernet模块提供了一种可靠稳定的有线网络连接方式,使用户可以更好地利用有线网络资源,以获取更高速的数据传输和更稳定的网络连接。无论是在家庭、办公室还是其他需要高稳定性网络场景中,ethernet模块都能够为用户带来更好的网络体验。 ### 回答2: Android 9.0引入了Ethernet模块,使得Android设备可以通过有线网络连接。Ethernet模块提供了一套API,供开发者在Android应用中操控有线网络。 在Android 9.0及以上版本中,Ethernet模块可以通过“EthernetManager”类相关的API进行控制。开发者可以使用这些API来管理设备的Ethernet连接,包括获取当前连接状态、启用或禁用有线网络、获取有线网络的IP地址等。 在代码中,可以通过获取EthernetManager实例,然后调用相关方法来操作Ethernet连接。例如,可以通过“getEthernetState()”方法获取Ethernet的当前连接状态,返回值为“EthernetManager.ETHERNET_STATE_DISABLED”表示有线网络已禁用,返回值为“EthernetManager.ETHERNET_STATE_ENABLED”表示有线网络已启用。 除了控制有线网络的连接状态,Ethernet模块还提供了获取有线网络的IP地址的功能。通过“getIpAddress()”方法可以获取当前有线网络的IP地址信息。 虽然Ethernet模块在Android 9.0中引入,但需要注意的是,并非所有的Android设备都支持有线网络连接。因此,在使用Ethernet模块相关功能之前,建议开发者先检查设备是否支持有线网络连接,以避免在不支持的设备上使用导致错误。 总之,Android 9.0的Ethernet模块为开发者提供了方便的API,用于管理和控制Android设备的有线网络连接。通过使用相关的API,开发者可以轻松地获取和操控有线网络的连接状态和IP地址等信息。这一功能为Android设备的网络连接提供了更多选择和灵活性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值