怎么获取root权限获取 在这里先谢谢你们

为什么刷机前需要先获取ROOT权限?_百度知道
为什么刷机前需要先获取ROOT权限?
提问者采纳
比如安卓系统自带的的升级功能以及使用第三方Recovery的方法,而刷官方ROM则不需要,刷机和获取ROOT权限本身是没有直接关系的。一些用户不使用刷机工具,就是刷第三方ROM时就需要ROOT权限。简而言之,但是如果在使用刷机工具(比如卓大师)刷机时,刷机工具必须获取权限才能对手机进行操作,只是第三方Recovery也必须要有ROOT权限才可以刷入,完成刷机工作,而是选择卡刷的方式您好
其他类似问题
为您推荐:
其他1条回答
三星 索尼的刷机前都不需要ROOT(刷rom包就必须先root)才能装载恢复模式(recovery)进行卡刷,而不是固件,一般情况下是不用的除非您是刷ROM包
root权限的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁30802人阅读
Android Framework(73)
Android系统上面有名的RootExplorer很强大,可以操作任何目录下的文件,包括像/data/data这样需要root权限才能访问的地方。它是怎么样做到的呢?&&这里要先提一个开源项目,地址是:/p/superuser/大家可以用SVN把源码下载到本地,与系统源码一起编译就可以了。编译完成后会生成两个文件,一个是二进制可执行文件su,另一个是Superuser.apk。把su复制到系统的/system/bin目录,再把Superuser.apk复制到系统的/system/app目录。这样,就可以用下面的代码执行su命令时,就会启动Superuser.apk中的Activity弹出标题为“以下程序要求授予最高权限...”的对话框,用户同意之后,APK就有ROOT权限了。&&下面看看APK里面的代码。&ProcessBuilder pb = new ProcessBuilder(&/system/bin/sh&);
pb.directory(new File(&/&));//设置shell的当前目录。
Process proc = pb.start();
//获取输入流,可以通过它获取SHELL的输出。
BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
BufferedReader err = new BufferedReader(new InputStreamReader(proc.getErrorStream()));
//获取输出流,可以通过它向SHELL发送命令。
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(proc
.getOutputStream())), true);
out.println(&pwd&);
out.println(&su root&);//执行这一句时会弹出对话框(以下程序要求授予最高权限...),要求用户确认。
out.println(&cd /data/data&);//这个目录在系统中要求有root权限才可以访问的。
out.println(&ls -l&);//这个命令如果能列出当前安装的APK的数据文件存放目录,就说明我们有了ROOT权限。
out.println(&exit&);
// proc.waitFor();
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 (Exception e) {
System.out.println(&exception:& + e);
}&&有了root权限,再结合ls,cp,mv等命令,整个系统的所有目录都可以操作了。&有一些问题目前还没有找到答案:如果我用ADB从Ubuntu上面执行su root,用户在弹出的对话框上选同意的话,命令会很快返回,接下面提示符就变成#了。但是,我用代码在APK里面测试的时候,只是偶尔会成功,发现大部分时候会卡死在out.println(&su root&);这一句上。即,用户在对话框上面选同意后程序没有响应,DDMS也看不到输出。再等上一会儿,程序无响应需要强制关闭的对话框就出来了。这个项目还是不完善的地方,不过思路真的不错。&&
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1316766次
积分:12944
积分:12944
排名:第656名
原创:164篇
译文:37篇
评论:425条
精彩运动视频汇集地;
时尚运动户外交流社区;
运动户外技术干货;
各路达人运动心得分享;
Android老码农,与CSDN博客同步更新
基于ffmpeg的mp4视频文件压缩工具手机怎么获取root权限_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
手机怎么获取root权限
上传于||暂无简介
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
你可能喜欢方法1:使用内部APIs
  该方法和其他所有内部没有向外正式公布的APIs一样存在它自己的风险。原理是通过获得WindowManager的一个实例来访问injectKeyEvent/injectPointerEvent这两个事件注入方法。
IBinder wmbinder = ServiceManager.getService( "window" );
IWindowManager m_WndManager = IWindowManager.Stub.asInterface( wmbinder );
  ServiceManager和Windowsmanager被定义为存根Stubs类。我们根据我们的需要绑定上这些服务并访问里面的方法。 To send a key do the following: 通过以下方式发送一个事件:
// key down
m_WndManager.injectKeyEvent( new KeyEvent( KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_A ),true );
m_WndManager.injectKeyEvent( new KeyEvent( KeyEvent.ACTION_UP, KeyEvent.KEYCODE_A ),true );
  发送touch/mouse事件:
//pozx goes from 0 to SCREEN WIDTH , pozy goes from 0 to SCREEN HEIGHT
m_WndManager.injectPointerEvent(MotionEvent.obtain(SystemClock.uptimeMillis(),
SystemClock.uptimeMillis(),MotionEvent.ACTION_DOWN,pozx, pozy, 0), true);
m_WndManager.injectPointerEvent(MotionEvent.obtain(SystemClock.uptimeMillis(),
SystemClock.uptimeMillis(),MotionEvent.ACTION_UP,pozx, pozy, 0), true);
  这种方法能在你的应用中很好的工作,但,也仅仅只能在你的应用中而已
一旦你想要往其他窗口注入keys/touch事件,你将会得到一个强制关闭的消息:
E/AndroidRuntime(4908): java.lang.SecurityException: Injecting to another application requires INJECT_EVENTS permission
  苦逼了吧,毕竟INJECT_EVENTS是需要系统权限的,一些可能解决的方案在和有讨论到。 (天地会珠海分舵注注:请查看本人上一篇翻译的《》里面有更详细针对这个问题的描述)
方法2: 使用instrumentation对象
  相对以上的隐藏接口和方法,这个是比较干净(上面的是隐藏的,故需要用到android不干净不推荐的方法去获取)的方式,但不幸的事它依然有上面的JINECT_EVENTS这个只有系统应用(基本上就是android自己提供的,如monkey)才被允许的权限问题。
Instrumentation m_Instrumentation = new Instrumentation();
m_Instrumentation.sendKeyDownUpSync( KeyEvent.KEYCODE_B );
  以下是触摸事件实例:
//pozx goes from 0 to SCREEN WIDTH , pozy goes from 0 to SCREEN HEIGHT
m_Instrumentation.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(),
SystemClock.uptimeMillis(),MotionEvent.ACTION_DOWN,pozx, pozy, 0);
m_Instrumentation.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(),
SystemClock.uptimeMillis(),MotionEvent.ACTION_UP,pozx, pozy, 0);
  在应用内操作的话完全没有问题,但一旦跳出这个应用去触发按键事件的话就会崩溃。不是因为这个方法不工作,而是因为android开发人员做了限制。谢谢你们,android的开发者们,你牛逼!个屁。
  通过分析sendPointerSync的对应代码,可以看到其实instrumentation使用到的注入事件方式其实和方法一提到的通过WindowManager.injectPointerEvents是一样的,所以穿的都是同一条内裤,只是Robotium出来走动的时候套上条时尚喇叭裤,而以上直接调用WindowManager的方式就犹如只穿一条内裤出街的区别而已。
public void sendPointerSync(MotionEvent event) {
validateNotAppThread();
(IWindowManager.Stub.asInterface(ServiceManager.getService("window")))
.injectPointerEvent(event, true);
} catch (RemoteException e) {
方法3:直接注入事件到设备/dev/input/eventX
  linux以系统设备的方式向用户暴露了一套统一的事件注入接口/dev/input/eventX(其中X代表一个整数)。我们可以直接跳用而跳过以上的平台(android这个机遇linux的平台)限制问题。但是这需要工作的话,你需要rooted过的设备。
  设备文件eventX默认是被设置为660这个权限的(Owner和同组成员有读写,而owner是root)。为了向这个设备注入事件,你必须让它能可写。所以请先做以下动作:
chmod 666 /dev/input/event3
  你将需要root权限来运行chmod命令。
微信知识共享公众号
天地会珠海分舵
TechGoGoGo
阅读(...) 评论()

我要回帖

更多关于 小米root权限获取 的文章

 

随机推荐