RK Android7.1 出厂第一次开机 以太网模式默认静态

修改Android5.1源码,配置以太网设置默认为静态ip

一.这个类提供了一个用于存储和管理以太网网络配置的API

frameworks\opt\net\ethernet\java\com\android\server\ethernet\EthernetConfigStore.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package com.android.server.ethernet;
 
import android.net.IpConfiguration;
import android.net.IpConfiguration.IpAssignment;
import android.net.IpConfiguration.ProxySettings;
import android.os.Environment;
import android.util.Log;
import android.util.SparseArray;
 
import com.android.server.net.IpConfigStore;
 
 
/**
 * This class provides an API to store and manage Ethernet network configuration.
 */
public class EthernetConfigStore extends IpConfigStore {
    private static final String TAG = "EthernetConfigStore";
 
    private static final String ipConfigFile = Environment.getDataDirectory() +
            "/misc/ethernet/ipconfig.txt";
 
    public EthernetConfigStore() {
    }
 
    public IpConfiguration readIpAndProxyConfigurations() {
        SparseArray<IpConfiguration> networks = readIpAndProxyConfigurations(ipConfigFile);
 
        if (networks.size() == 0) {
            Log.w(TAG, "No Ethernet configuration found. Using default.");
            return new IpConfiguration(IpAssignment.DHCP, ProxySettings.NONE, null, null);
        }
 
        if (networks.size() > 1) {
            // Currently we only support a single Ethernet interface.
            Log.w(TAG, "Multiple Ethernet configurations detected. Only reading first one.");
        }
 
        return networks.valueAt(0);
    }
 
    public void writeIpAndProxyConfigurations(IpConfiguration config) {
        SparseArray<IpConfiguration> networks = new SparseArray<IpConfiguration>();
        networks.put(0, config);
        writeIpAndProxyConfigurations(ipConfigFile, networks);
    }
}

   

 

 

二.出厂开机第一次默认

2.1.packages\apps\Provision\AndroidManifest.xml

1
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />

 

2.2.packages\apps\Provision\src\com\android\provision\DefaultActivity.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
package com.android.provision;
 
import android.app.Activity;
import android.content.ComponentName;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.provider.Settings;
import android.content.Context;
import android.util.Log;
 
import android.net.EthernetManager;
import android.net.StaticIpConfiguration;
import android.net.IpConfiguration;
import android.net.IpConfiguration.IpAssignment;
import android.net.IpConfiguration.ProxySettings;
import android.net.NetworkUtils;
import android.net.LinkAddress;
 
import java.net.InetAddress;
import java.net.Inet4Address;
import java.util.regex.Pattern;
 
import android.os.SystemProperties;
import java.lang.reflect.Method;
/**
 * Application that sets the provisioned bit, like SetupWizard does.
 */
public class DefaultActivity extends Activity {
 
    EthernetManager mEthManager;
    StaticIpConfiguration mStaticIpConfiguration;
    IpConfiguration mIpConfiguration;
    String ipAddr = "1.1.1.1";
    String netMask = "255.255.255.0";
    String gateway = "1.1.1.1";
    String dns1 = "0.0.0.0";
    String dns2 = "0.0.0.0";
 
    @Override
    protected void onCreate(Bundle icicle) {
        super.onCreate(icicle);
 
        // Add a persistent setting to allow other apps to know the device has been provisioned.
        Settings.Global.putInt(getContentResolver(), Settings.Global.DEVICE_PROVISIONED, 1);
        Settings.Secure.putInt(getContentResolver(), Settings.Secure.USER_SETUP_COMPLETE, 1);
         
        mEthManager = (EthernetManager) getSystemService(Context.ETHERNET_SERVICE);
        mStaticIpConfiguration = new StaticIpConfiguration();
        Settings.System.putString(getContentResolver(), "ethernet_static_ip", ipAddr);
        Settings.System.putString(getContentResolver(), "ethernet_static_gateway", gateway);
        Settings.System.putString(getContentResolver(), "ethernet_static_netmask", netMask);
        Settings.System.putString(getContentResolver(), "ethernet_static_dns1", dns1);
        Settings.System.putString(getContentResolver(), "ethernet_static_dns2", dns2);
         
         
        /*
         * get ip address, netmask,dns ,gw etc.
         */
        Inet4Address inetAddr = getIPv4Address(ipAddr);
        int prefixLength = maskStr2InetMask(netMask);
        InetAddress gatewayAddr = getIPv4Address(gateway);
        InetAddress dnsAddr = getIPv4Address(dns1);
         
        String dnsStr2 = dns2;
        mStaticIpConfiguration.ipAddress = new LinkAddress(inetAddr,
                prefixLength);
        mStaticIpConfiguration.gateway = gatewayAddr;
        mStaticIpConfiguration.dnsServers.add(dnsAddr);
         
        mStaticIpConfiguration.dnsServers.add(getIPv4Address(dnsStr2));
         
        mIpConfiguration = new IpConfiguration(IpAssignment.STATIC,
                ProxySettings.NONE, mStaticIpConfiguration, null);
         
        mEthManager.setConfiguration(mIpConfiguration);
         
        setProperty("persist.sys.first_xhboot","true");
                                         
        // remove this activity from the package manager.
        PackageManager pm = getPackageManager();
        ComponentName name = new ComponentName(this, DefaultActivity.class);
        pm.setComponentEnabledSetting(name, PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                PackageManager.DONT_KILL_APP);
 
        // terminate the activity.
        finish();
    }
     
    private Inet4Address getIPv4Address(String text)
    {
        try {
            return (Inet4Address) NetworkUtils.numericToInetAddress(text);
        } catch (IllegalArgumentException|ClassCastException e) {
            return null;
        }
    }
 
    private int maskStr2InetMask(String maskStr)
    {
        StringBuffer sb;
        String str;
        int inetmask = 0;
        int count = 0;
        /*
         * check the subMask format
         */
        Pattern pattern = Pattern
                .compile("(^((\\d|[01]?\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(\\d|[01]?\\d\\d|2[0-4]\\d|25[0-5])$)|^(\\d|[1-2]\\d|3[0-2])$");
        if (pattern.matcher(maskStr).matches() == false)
        {
            Log.e("gatsby", "subMask is error");
            return 0;
        }
 
        String[] ipSegment = maskStr.split("\\.");
        for (int n = 0; n < ipSegment.length; n++)
        {
            sb = new StringBuffer(Integer.toBinaryString(Integer
                    .parseInt(ipSegment[n])));
            str = sb.reverse().toString();
            count = 0;
            for (int i = 0; i < str.length(); i++)
            {
                i = str.indexOf("1", i);
                if (i == -1)
                    break;
                count++;
            }
            inetmask += count;
        }
        return inetmask;
    }
     
   public void setProperty(String key, String value) {
       try {
           Class<?> c = Class.forName("android.os.SystemProperties");
           Method set = c.getMethod("set", String.class, String.class);
           set.invoke(c, key, value);
       } catch (Exception e) {
           e.printStackTrace();
       }
   }   
         
}

 三.第二种方法 太low了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
diff --git a/frameworks/opt/net/ethernet/java/com/android/server/ethernet/EthernetServiceImpl.java b/frameworks/opt/net/ethernet/java/com/android/server/ethernet/EthernetServiceImpl.java
index 7729d9c..7de3bc7 100755
--- a/frameworks/opt/net/ethernet/java/com/android/server/ethernet/EthernetServiceImpl.java
+++ b/frameworks/opt/net/ethernet/java/com/android/server/ethernet/EthernetServiceImpl.java
@@ -43,6 +43,7 @@ import java.io.FileDescriptor;
 import java.io.PrintWriter;
 import java.util.concurrent.atomic.AtomicBoolean;
 import android.provider.Settings;
+import java.util.regex.Pattern;
  
 /**
  * EthernetServiceImpl handles remote Ethernet operation requests by implementing<br> */ 
@@ -72,20 +73,26 @@ public class EthernetServiceImpl extends IEthernetManager.Stub {
         mStaticIpConfiguration = new StaticIpConfiguration();
         if (SystemProperties.get("persist.sys.static.enable","1").equals("1")){                            
                 String mIpAddress = "192.168.5.66";
-                int mNetmask = 24;
+                String mNetmask = "255.255.255.0";
                 String mGateway = "192.168.5.1";
-                String mDns1 = "202.96.128.86";
-                String mDns2 = "202.96.128.166";
+                String mDns1 = "192.168.5.1";
+                //String mDns2 = "202.96.128.166";
  
                 Inet4Address inetAddr = getIPv4Address(mIpAddress);
-                int prefixLength = mNetmask;
+                int prefixLength = maskStr2InetMask(mNetmask);
                 InetAddress gatewayAddr =getIPv4Address(mGateway);
                 InetAddress dnsAddr = getIPv4Address(mDns1);
                  
+                Settings.System.putString(mContext.getContentResolver(), "ethernet_static_ip", mIpAddress);
+                       Settings.System.putString(mContext.getContentResolver(), "ethernet_static_gateway", mGateway);
+                       Settings.System.putString(mContext.getContentResolver(), "ethernet_static_netmask", mNetmask);
+                       Settings.System.putString(mContext.getContentResolver(), "ethernet_static_dns1", mDns1);
+                       //Settings.System.putString(mContext.getContentResolver(), "ethernet_static_dns2", mDns2);
+               
                 mStaticIpConfiguration.ipAddress = new LinkAddress(inetAddr, prefixLength);
                 mStaticIpConfiguration.gateway=gatewayAddr;
                 mStaticIpConfiguration.dnsServers.add(dnsAddr);
-                mStaticIpConfiguration.dnsServers.add(getIPv4Address(mDns2));
+                //mStaticIpConfiguration.dnsServers.add(getIPv4Address(mDns2));
                 mIpConfiguration = new IpConfiguration(IpAssignment.STATIC, ProxySettings.NONE,mStaticIpConfiguration,null);
                 mEthernetConfigStore.writeIpAndProxyConfigurations(mIpConfiguration);
                 SystemProperties.set("persist.sys.static.enable","0");                                        
@@ -98,6 +105,36 @@ public class EthernetServiceImpl extends IEthernetManager.Stub {
         mTracker = new EthernetNetworkFactory(mListeners);
     }
      
+    private int maskStr2InetMask(String maskStr) {
+       StringBuffer sb ;
+       String str;
+       int inetmask = 0;
+       int count = 0;
+       /*
+        * check the subMask format
+        */
+       Pattern pattern = Pattern.compile("(^((\\d|[01]?\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(\\d|[01]?\\d\\d|2[0-4]\\d|25[0-5])$)|^(\\d|[1-2]\\d|3[0-2])$");
+       if (pattern.matcher(maskStr).matches() == false) {
+           Log.e(TAG,"subMask is error");
+           return 0;
+       }
+      
+       String[] ipSegment = maskStr.split("\\.");
+       for(int n =0; n<ipSegment.length;n++) {
+           sb = new StringBuffer(Integer.toBinaryString(Integer.parseInt(ipSegment[n])));
+           str = sb.reverse().toString();
+           count=0;
+           for(int i=0; i<str.length();i++) {
+               i=str.indexOf("1",i);
+               if(i==-1
+                   break;
+               count++;
+           }
+           inetmask+=count;
+       }
+       return inetmask;
+    }
+   
     private Inet4Address getIPv4Address(String text) {
            try {
                    return (Inet4Address) NetworkUtils.numericToInetAddress(text);

  

posted @   CrushGirl  阅读(1233)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示