关于Host的修改
。。。哈哈,hello,最近总是工作效率低得很厉害哦。随便一个东西都可以让我为难很久,这不是,一个权限的问题,结果呢,自己总是不是很明白。。。。记下来咯,说不定下次会有用呢。。。、
hosts文件!就是在系统底层的一个文件,没有任何的后缀名字。。
然后我们这边的机顶盒总是在dns的时候,一部分呢,会出现解析不了的情况,所以呀,就像根据程序最原始的走法了,既然都会自己去读一下系统里面的hosts里面的ip地址的话,不如我们就自己写进去,这样就不用程序老去自己解析什么的咯,而且这样服务器可能也是很受不了的。。。。
好了,麻烦开始来了,开始会简单的在配置文件里面写了权限的什么,但是基本上都是关于SD卡可读或者可写的权限,根本就没有什么多大的作用。。。
。。。然后在安装的时候,问题又来咯,结果说是要获得系统签名,就是androidshareid="com.uid.system"什么的东西,记得不是很清楚咯,可是这个就无关紧要咯,其实有了这个,在安装apk的时候,就需要跟程序一样的签名咯。。。
。。。。。
刷机后又不行了,为什么了,原来hosts有个坏脾气,就是如果你想要用代码修改他呢,必须要是他之前被你修改过,不然就这样那原始固件里面的,真的没办法改动嘛。。。。然后。。。。针对如果就拿原始的出来改动,现在还没有找到问题,如果有angel,就请给出回答吧。
这里其实还是有一部分代码是需要注意的:
获得root权限:
Process process = null; DataOutputStream os = null; try { String hostPath = context.getFilesDir() + "/" + hostName; String cmd="/system/xbin -f " + hostPath + " " + "/etc/hosts"; process = Runtime.getRuntime().exec("su"); //切换到root帐号 os = new DataOutputStream(process.getOutputStream()); os.writeBytes(cmd + "\n"); os.writeBytes("exit\n"); os.flush(); process.waitFor(); } catch (Exception e) { return false; } finally { try { if (os != null) { os.close(); } process.destroy(); } catch (Exception e) { } }
当然会有好几种写法:
public static void modifyFile(File file) { Process process = null; try { String command = "chmod -R 777 " + file.getAbsolutePath(); Runtime runtime = Runtime.getRuntime(); process = runtime.exec(command); process.waitFor(); } catch (Exception e) { } }
。。。。。等等。。。。。
当然还会遇到关于权限EACCES的这个警告,但是不可小觑哦,就是它害得我现在还没捣鼓出来。。。。
大神见着,一定要相助于我哦!-