安卓修改以太網IP模式爲純IPv4或IPv4 & IPv6兼容模式方法。

本文針對安卓9.0源碼進行修改。 

本來是想在安卓9.0實現以太網的三種ip模式,純IPv4/純IPv6/IPv4 & IPv6兼容模式,但是隻通過簡單修改framework代碼無法實現純IPv6模式(改成純IPv6模式後,以太網圖標不顯示,也無法聯網了)。本文主要講解以太網如何實現純IPv4和IPv4 & IPv6兼容模式。
修改文件目錄:\frameworks\opt\net\ethernet\java\com\android\server\ethernet\EthernetNetworkFactory.java
具體修改:
import android.os.SystemProperties;

//EthernetNetworkFactory 中可以禁用IPV6,具體代碼如下,目前只禁用ipv6或ipv4&ipv6共存(系統默認)都沒問題,想只用純ipv6不行,切記。
private static void provisionIpClient(IpClient ipClient, IpConfiguration config,
                String tcpBufferSizes) {
            if (config.getProxySettings() == ProxySettings.STATIC ||
                    config.getProxySettings() == ProxySettings.PAC) {
                ipClient.setHttpProxy(config.getHttpProxy());
            }

            if (!TextUtils.isEmpty(tcpBufferSizes)) {
                ipClient.setTcpBufferSizes(tcpBufferSizes);
            }

            final ProvisioningConfiguration provisioningConfiguration;
			// add by zzh, ipv6 default support but xxx device @{
            // ipv6是否默認可用,定義在device\自定義目錄\產品型號\system.prop
            // # add by zzh for set ipv6 default is enable,這邊我們定義自己的產品型號默認不        
            // 支持ipv6模式
            // ro.enable_ipv6_default=false
			boolean ipv6DefaultEnable = SystemProperties.getBoolean("ro.enable_ipv6_default", true);
            // 這個系統屬性可在app中設置,從而在app中控制是否支持ipv6
			boolean ipv6Enable = SystemProperties.getBoolean("persist.sys.ipv6.enable", ipv6DefaultEnable);
            // 這個系統屬性可在app中設置,從而在app中控制是否支持ipv4
			boolean ipv4Enable = SystemProperties.getBoolean("persist.sys.ipv4.enable", true);
			// @}
            if (config.getIpAssignment() == IpAssignment.STATIC) {
				// add by zzh @{
				if (ipv4Enable && !ipv6Enable){
					provisioningConfiguration = IpClient.buildProvisioningConfiguration()
						.withStaticConfiguration(config.getStaticIpConfiguration())
						.withoutIPv6()
						.build();
				} else if (!ipv4Enable && ipv6Enable){
					provisioningConfiguration = IpClient.buildProvisioningConfiguration()
						.withStaticConfiguration(config.getStaticIpConfiguration())
						.withoutIPv4()
						.build();
				} else {
					// @}
					provisioningConfiguration = IpClient.buildProvisioningConfiguration()
						.withStaticConfiguration(config.getStaticIpConfiguration())
						.build();
				}		
            } else {
				// add by zzh @{
				if (ipv4Enable && !ipv6Enable){
					provisioningConfiguration = IpClient.buildProvisioningConfiguration()
						.withProvisioningTimeoutMs(0)
						.withoutIPv6()
						.build();
				} else if (!ipv4Enable && ipv6Enable){
					provisioningConfiguration = IpClient.buildProvisioningConfiguration()
						.withProvisioningTimeoutMs(0)
						.withoutIPv4()
						.build();
				} else {
					// @}
					provisioningConfiguration = IpClient.buildProvisioningConfiguration()
                        .withProvisioningTimeoutMs(0)
                        .build();
				}
            }

            ipClient.startProvisioning(provisioningConfiguration);
        }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章