苦心钻研6天以及各路朋友的帮助下终于有了成果,安卓6.0系统重启后也可以修改有关有线网的IP,网关地址等。

  在这里分享出来,帮助更多人少走弯路。

  不罗嗦切入正题,实现以太网的IP修改主要分为以下步骤:
一.拿到系统的Framework源码,也就是jar包(目的调用系统的隐藏方法)
  我的jar是底层开发的同事给我的,导入到项目中,导入方式可参考这个帖子:
  http://www.jianshu.com/p/ccda0c6938ea
二.调用系统源码,修改信息

    (1)声明变量:
    EthernetManager mEthManager;
    private  static String mEthIpAddress = "192.168.253.247";  //IP
    private  static String mEthNetmask = "255.255.255.0";  //  子网掩码
    private  static String mEthGateway = "192.168.88.1";   //网关
    private  static String mEthdns1 = "8.8.8.8";   // DNS1
    private  static String mEthdns2 = "8.8.4.4";   // DNS2
   (2)在需要改变信息的地方加上如下代码:
mEthManager = (EthernetManager)getSystemService("ethernet");
        InetAddress ipaddr=NetworkUtils.numericToInetAddress(mEthIpAddress);
        DhcpInfo dhcpInfo = new DhcpInfo();
        dhcpInfo.ipAddress = inetAddressToInt(ipaddr);
        Inet4Address inetAddr= Utils.getIPv4Address(mEthIpAddress);
        int prefixLength=Utils.maskStr2InetMask(mEthNetmask);
        InetAddress gatewayAddr = Utils.getIPv4Address(mEthGateway);
        InetAddress dnsAddr = Utils.getIPv4Address(mEthdns1);
        if (inetAddr.getAddress().toString().isEmpty() || prefixLength ==0 || gatewayAddr.toString().isEmpty()
                || dnsAddr.toString().isEmpty()) {
            return;
        }
        Class<?> clazz = null;
        try {
            clazz = Class.forName("android.net.LinkAddress");
        } catch (Exception e) {
            // TODO: handle exception
        }

Class[] cl = new Class[]{InetAddress.class, int.class};
        Constructor cons = null;

try {
            cons = clazz.getConstructor(cl);
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        }

Object[] x = {inetAddr, prefixLength};
        StaticIpConfiguration mStaticIpConfiguration = new StaticIpConfiguration();
        String dnsStr2 = mEthdns2;
        //mStaticIpConfiguration.ipAddress = new LinkAddress(inetAddr, prefixLength);
        try {
            mStaticIpConfiguration.ipAddress = (LinkAddress) cons.newInstance(x);
            Log.d("232323", "chanson 1111111");
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }

mStaticIpConfiguration.gateway=gatewayAddr;
        mStaticIpConfiguration.dnsServers.add(dnsAddr);

if (!dnsStr2.isEmpty()) {
            mStaticIpConfiguration.dnsServers.add(Utils.getIPv4Address(dnsStr2));
        }
        Log.d("2312321", "chanson mStaticIpConfiguration  ====" + mStaticIpConfiguration);

IpConfiguration  mIpConfiguration = new IpConfiguration(IpConfiguration.IpAssignment.STATIC,

IpConfiguration.ProxySettings.NONE, mStaticIpConfiguration, null);

mEthManager.setConfiguration(mIpConfiguration);

Utils类相关方法:
public static Inet4Address getIPv4Address(String text) {
        try {
            return (Inet4Address) NetworkUtils.numericToInetAddress(text);
        } catch (IllegalArgumentException|ClassCastException e) {
            return null;
        }
    }
    public static 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("33333","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;
    }

三.签名,打包(目的为了获取系统权限)

(1)在桌面新建文件夹,放入以下文件:

    (2)编辑signapk.bat文件:
    (3)双击signapk.bat,会在新建文件夹下看到new.apk,装到手机看效果即可。
  至此所有步骤完成,如果有写的不好的地方请见谅,有错误请指正批评,有更好的实现方式请留言,谢谢支持。
参考帖子:http://www.jianshu.com/p/e1191c41d70a
补充:修改以太网,网络连接模式(动态获取或静态)
找到代码: IpConfiguration  mIpConfiguration = new IpConfiguration(IpConfiguration.IpAssignment.STATIC, IpConfiguration.ProxySettings.NONE, mStaticIpConfiguration, null);
第一个参数,点击进入可以看到有三个选项:STATIC,DHCP,UNASSIGNED;选择STATIC即静态链接,DHCP即动态获取。
最新补充:最后打包的时候,放到文件夹的apk要先用AS进行打包,然后再把打包生成的apk放进去,生成系统级apk。
QQ群:Android开发交流  243624914

Android6.0修改以太网IP相关推荐

  1. Android 如何修改以太网IP

    这个问题可以说困扰了我很久,百度上当然有大神做出来,但是呢基本都很难复刻,这是一个很不常规的功能.我认为做普通APP是不需要的,只有在做一些嵌入式设备,比如什么广告机,售货机,取票机这类的设备的时候才 ...

  2. linux 7.0修改网卡ip,CentOS7修改网卡为静态IP

    CentOS7修改网卡DHCP获取IP为静态IP 1.修改网卡配置 [root@centos7 ~]#cd /etc/sysconfig/network-scripts/ [root@centos7 ...

  3. Andorid 6.0 设置以太网ip,网关

    真机需要root,下面在adb演示过程: 1.移动设备使用数据线连接PC,PC在cmd中获取root权限并进入adb C:\Users\Administrator>adb root C:\Use ...

  4. android6.0修改默认dns

    我们的手机做了个多流功能,该功能可以实现上google,在这个过程中,创建了个虚拟网卡tun0,如下图: 有了这个虚拟网卡,然后我们需要将默认DNS改为tun的DNS.修改如下: 1.Connecti ...

  5. C# 修改本地以太网ip地址

    因为某项需求,要修改以太网的ip地址,研究了一段时间,因不太懂网络的知识,只实现了最基本的修改以太网ip的功能.如果有错误,欢迎指出 等价于在这里修改: 实现代码: //设置ip地址private v ...

  6. Android6.0 源码修改之 仿IOS添加全屏可拖拽浮窗返回按钮...

    Android6.0 源码修改之 仿IOS添加全屏可拖拽浮窗返回按钮 前言 之前写过屏蔽系统导航栏功能的文章,具体可看Android6.0 源码修改之屏蔽导航栏虚拟按键(Home和RecentAPP) ...

  7. android launcher 字体大小,Android6.0 Launcher3 修改app字体大小

    在原生的Android6.0中,在修改了系统字体大小后,Launcher 3上的app字体大小没有改变,下面方法可以解决:--- a/packages/apps/Launcher3/src/com/a ...

  8. android6.0 framwork修改

    基于android6.0.7.01.20 默认使用Launcher2,修改Launcher2 packages/apps/Launcher3/src/com/android/launcher3/Lau ...

  9. Android6.0 usb默认MTP模式的修改方法

    Android6.0 usb默认MTP模式的修改方法 在6.0以前的系统 只需要修改默认的 persist.sys.usb.config 的值就可以了, 但是6.0,无论你怎能修改persist.sy ...

最新文章

  1. (C#)AJAX post方式传值
  2. 深度学习与计算机视觉系列(4)_最优化与随机梯度下降\数据预处理,正则化与损失函数
  3. WPF 4 DataGrid 控件(基本功能篇)
  4. Construct Binary Tree from Preorder and Inorder Traversal
  5. sealos kubernetes(k8s)高可用安装教程
  6. scala case class 继承_数字硬件系统设计之一:Scala快速入门(2)
  7. python:第一个简单爬虫程序
  8. php 同时导出两个文件_使用orangehill/iseed自动反向生成数据填充文件
  9. Linux的铜墙铁壁:防火墙之iptables
  10. PCL综合开发(一):Qt 5.14 + PCL 1.8.1 +VS 2017环境配置
  11. 作文 —— 景物描写
  12. datagrid 重载本地数据_jQuery easyui datagrid重新加载数据
  13. javascript时钟代码 DEMO-002
  14. Typora入门手册
  15. 蓝桥杯练习题之圆的面积
  16. 南阳oj 题目10 skiing
  17. MySQL单表数据量过大的处理方式经验
  18. C++模拟扑克过五关
  19. 【论文笔记】A Survey on Federated Learning: The Journey From Centralized to Distributed On-Site...(综述)
  20. 萌新记录自己刷过的题

热门文章

  1. 快速搭建BI商业报表平台
  2. UDP搜索IP与端口
  3. 第七届开源操作系统年度技术会议(OS2ATC)盛大开幕,从编译器到软件定义卫星精彩议题大曝光
  4. Extrinsic Calibration of a Camera and Laser Range Finder (improves camera calibration)阅读笔记
  5. 关于branch XYZ is published (but not merged) and is now N commits behind错误的一点分析
  6. 基于 HTML+CSS+JS 的纸牌记忆游戏
  7. Tech Talk · 云技术有话聊 | 关键基础部件如何保障高可靠?
  8. 有很多事情要做,究竟怎么确定执行顺序?
  9. 最近做到一道好题,特来和大家分享一下。
  10. SVN各种错误提示产生原因及处理方法大全