设为首页 加入收藏

TOP

Android开发切换host应用
2014-11-24 02:48:14 来源: 作者: 【 】 浏览:1
Tags:Android 开发 切换 host 应用

由于在工作过程中常需要切换手机的host来测试不同服务器上的接口,所以想到需要这么个软件。


SwitchHost在PC上是一款很好用的修改Host的软件,手机上也需要这么一款App(当然手机需要已经ROOT),于是就尝试做这么个手机应用SwitchHost,主要的功能是要能在不同的Host方案之间进行切换。


里面的bin文件夹有apk,可以直接安装。


它的UI设计大概是这样的(用的都是系统自带的控件)


首页弹出浮层修改页设置项增加页


分析这个功能:



这篇记录下开发这个的过程中遇到的问题:


由于Android的host是在/system/etc/hosts,所以需要使用root来进行文件替换。(当然前提是你的机器是已经可以root了)


获取ROOT权限使用这么一个句子:


Process process = Runtime.getRuntime().exec("su");


但是每次调用这个语句的时候都会出现"该应用已经获取了ROOT权限",所以这个process对象有必要使用单例模式来存储。


还有一点,调用这个语句之后,其实是启动了一个process,并不是说当前执行的Activity已经获取了ROOT权限,所以说后续的root操作就需要使用命令行来执行,而不能使用程序。


比如这里获得了root的进程之后,我原本想要使用File类来修改/system/etc/hosts发现还是出现权限错误的异常。后来改成了使用/system/xbin/cp命令才能使用。


在Android中,系统的可执行文件不是在/usr/bin下的,而是在/system/xbin/下的,cp的命令和linux是一样的,加一个-f是强制执行。


下面是一个完整的获取root权限,并执行cp -f source desc的例子:



Process process = null;


DataOutputStream os = null;



try {


String hostPath = context.getFilesDir() + "/" + hostName;


String cmd="/system/xbin/cp -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) {


}


}


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Bash强制脚本使用某用户执行 下一篇我理解的Android加载器

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: