安卓修改以太网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);
        }

 

你可能感兴趣的:(Android)