为了方便给出前一篇地址:http://blog.csdn.net/weiyirong/article/details/7380651调了几天这个root权限获取问题终于搞定了,各种百度谷歌,各种方法全部都测试过终于有眉目了.
我通过这几天测试总结了三个方法获取root权限问题:
1 上一篇文章所引用的方法
- publicstaticbooleanRootCommand(Stringcommand){
- Processprocess=null;
- DataOutputStreamos=null;
- try{
- process=Runtime.getRuntime().exec("su");
- os=newDataOutputStream(process.getOutputStream());
- os.writeBytes(command+"\n");
- os.writeBytes("exit\n");
- os.flush();
- process.waitFor();
- }catch(Exceptione){
- returnfalse;
- }finally{
- try{
- if(os!=null){
- os.close();
- }
- process.destroy();
- }catch(Exceptione){
- }
- }
- returntrue;
- }
这个方法要注意的问题在那条命令
- chmod777getPackageCodePath()
有的地方是这样写的
- chmod777/dev/block/mmcblk0
经过几次的测试,我发现后面那一句的话虽然能够成功获取权限,但是!但是运行后的状况是:手机运行,但是程序卡死,时不时的跳出是否强制关闭,我刚开始以为是耗时工作必须放在线程里才不会卡死,就用了异步线程和Thread测试,发现程序仍然卡死,当然有的时候在模拟器上可以运行,而在真机上却卡死也有可能是耗时操作导致,需开线程处理。 但是在这里的情况线程明显不是问题,调了好久,我索性就把权限获取注释掉,发现可以用!运行正常,真机模拟器都可以,这下问题找到了吧!我尝试着把命令改成第一种测试,OK了!!!所有大伙注意这两个的区别。(注:个人认为第二种虽然获取得权限,但是获取权限的进程很快就关闭了,所以接下去的操作仍有问题,而第一种是获取为此应用程序的获取权限,因此可以正常执行,当然这只是个人见解,有不同看法大家可以指点指点我哈)。
2. RootExplorer获取root权限的方法(以下是来自RootExplorer的源码)
- ProcessBuilderpb=newProcessBuilder("/system/bin/sh");
- pb.directory(newFile("/"));
- try{
- Processproc=pb.start();
- BufferedReaderin=newBufferedReader(newInputStreamReader(proc.getInputStream()));
- BufferedReadererr=newBufferedReader(newInputStreamReader(proc.getErrorStream()));
- PrintWriterout=newPrintWriter(newBufferedWriter(newOutputStreamWriter(proc
- .getOutputStream())),true);
- out.println("pwd");
- out.println("suroot");
- out.println("cd/data/data");
- out.println("ls-l");
- out.println("exit");
- Stringline;
- while((line=in.readLine())!=null){
- System.out.println(line);
- }
- while((line=err.readLine())!=null){
- System.out.println(line);
- }
- in.close();
- out.close();
- proc.destroy();
- }catch(Exceptione){
- System.out.println("exception:"+e);
经过我的测试也是可行的,不过问题还是一样的,就是黑屏,还会时而跳出是否强制关闭程序。伤不起
3来自谷歌http://code.google.com/p/superuser/(关于Superuser超级管理器大伙自个百度之),下面是他的获取root权限源码
- Filesuperuser=newFile("/system/bin/superuser");
- if(superuser.exists())
- {
- Processprocess=Runtime.getRuntime().exec("superuser");
- DataOutputStreamos=newDataOutputStream(process.getOutputStream());
- os.writeBytes("mount-oremount,rw/dev/block/mtdblock3/system\n");
- os.writeBytes("busyboxcp/system/bin/superuser/system/bin/su\n");
- os.writeBytes("busyboxchown0:0/system/bin/su\n");
- os.writeBytes("chmod4755/system/bin/su\n");
- os.writeBytes("rm/system/bin/superuser\n");
- os.writeBytes("exit\n");
- os.flush();
- }
这种方法我测试了下,没办法,估计还要改一些地方,不推荐使用,当然可以研究研究呵呵,
转自:http://blog.csdn.net/weiyirong/article/details/7400036
分享到:
相关推荐
许多机友新购来的Android机器没有破解过Root权限,无法使用一些需要高权限的软件,以及进行一些高权限的操作,其实破解手机Root权限是比较简单及安全的,破解Root权限的原理就是在手机的/system/bin/或/system/xbin/...
主要介绍了android 无须root截图方案的实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
ROOT的含义以及手机获取root权限的好处
虽然编译后能运行,但由于使用了原始套接字,必须root权限运行,这与和Linux下真实的ping有差别:后者是不需要输入sudo或者切换到#才能运行的。linux中的ping源码没有找到,但是看到oschina上有一例自制的ping源码...
最近项目需要,用NDK编程,遇到了些问题,在访问底层的设备时,没有权限,后来就在网上查找了资料,一开始还以为有root权限,找来找去,弄来弄去,程序都获取不到root权限,后来找到原来用system权限就可以访问设备...
在有 root 权限和没有 root 权限的 Android 手机上从小米手环导出数据。 在您的电脑上显示来自乐队的信息 如何使用: 确保为您的设备正确安装了 USB 驱动程序,并且当您通过 USB 连接时,ADB 可以访问您的设备 将...
这个函数需要root权限或者运行与系统 在android的API中有提供SystemClock.setCurrentTimeMillis()函数来修改系统时间,可惜无论你怎么调用这个函数都是没用的,无论模拟器还是真机,在logcat中总会得到...
权限管理 工具类大全 轮播图 状态栏相关 二维码 屏幕适配 下拉刷新 音视频相关 自定义控件 完整项目 收藏网站 名称 简介 free-programming-books-zh_CN 免费的计算机编程类书籍(中文版) Android ...
不需要 root 权限 Termux 就可以正常运行。Termux 基本实现 Linux 下的许多基本操作。可以使用 Termux 安装 python,并实现 python 编程,可以用手机架设 Server,同样可以用于渗透测试等等。 Termux 是一个 ...
网络调试助手是一款用于Android端网络调试的工具,支持TCP,UDP协议,支持机器自带的串口(可能需要root权限)支持多种网络端口的链接,让网络维修人员或者是个人能够更加简单的对网络进行深度的调试,从而让整个网络...
ProjectFrame集mvp+rxjava+retrofit+rxbus+greendao一体的安卓项目快速开发架构...项目主要第三方库1.Rx家族java响应式编程android响应式编程事件总线View事件扩展权限检测2.控件绑定ButterKnife3.图片加载Glide4.网络
不需要root权限。 单个应用程序最多支持16个安卓设备同时连接。 同时支持GNU/Linux,Windows和MacOS三大主流桌面平台 自定义按键映射(仅windows平台开启) 可以根据需要,自己编写脚本将PC键盘按键映射为手机的触摸...