安卓ROOT权限代码

android上root权限的代码,工具类还提供在手机上执行指令的方法。PS:并不是所有手机都能root成功,开发项目时尽量不要考虑root,这个代码看看就行。

[1].[代码] [Java]代码 跳至 [1]

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

package

com.linin.utils;

import

java.io.DataInputStream;

import

java.io.DataOutputStream;

import

java.io.IOException;

/**

 *
root权限工具类

 *

 *
@author linin

 *

 */

public

class

RootUtil {

    private

static

final

String TAG =
"linin.root";

    private

static

boolean

mHaveRoot =
false;

    /**

     *
判断机器Android是否已经root,即是否获取root权限

     */

    public

static

boolean

haveRoot() {

        if

(!mHaveRoot) {

            int

ret = execRootCmdSilent(
"echo
test"
);
//
通过执行测试命令来检测

            if

(ret != -
1)
{

                L.i(TAG,
"have
root!"
);

                mHaveRoot
=
true;

            }
else

{

                L.i(TAG,
"not
root!"
);

            }

        }
else

{

            L.i(TAG,
"mHaveRoot
= true, have root!"
);

        }

        return

mHaveRoot;

    }

    /**
获取root权限 */

    public

static

boolean

root() {

        try

{

            Runtime.getRuntime().exec(

                    new

String[] {
"/system/bin/su",
"-c",

                            "chmod
777 /dev/graphics/fb0"

});

        }
catch

(IOException e) {

            e.printStackTrace();

            L.i(TAG,
"root
fail!"
);

            return

false
;

        }

        L.i(TAG,
"root
success!"
);

        return

true
;

    }

    /**

     *
执行命令并且输出结果

     */

    public

static

String execRootCmd(String cmd) {

        String
result =
"";

        DataOutputStream
dos =
null;

        DataInputStream
dis =
null;

        try

{

            Process
p = Runtime.getRuntime().exec(
"su");//
经过Root处理的android系统即有su命令

            dos
=
new

DataOutputStream(p.getOutputStream());

            dis
=
new

DataInputStream(p.getInputStream());

            L.i(TAG,
cmd);

            dos.writeBytes(cmd
+
"\n");

            dos.flush();

            dos.writeBytes("exit\n");

            dos.flush();

            String
line =
null;

            while

((line = dis.readLine()) !=
null)
{

                L.d("result",
line);

                result
+= line;

            }

            p.waitFor();

        }
catch

(Exception e) {

            e.printStackTrace();

        }
finally

{

            if

(dos !=
null)
{

                try

{

                    dos.close();

                }
catch

(IOException e) {

                    e.printStackTrace();

                }

            }

            if

(dis !=
null)
{

                try

{

                    dis.close();

                }
catch

(IOException e) {

                    e.printStackTrace();

                }

            }

        }

        return

result;

    }

    /**

     *
执行命令但不关注结果输出

     */

    public

static

int

execRootCmdSilent(String cmd) {

        int

result = -
1;

        DataOutputStream
dos =
null;

        try

{

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

            dos
=
new

DataOutputStream(p.getOutputStream());

            L.i(TAG,
cmd);

            dos.writeBytes(cmd
+
"\n");

            dos.flush();

            dos.writeBytes("exit\n");

            dos.flush();

            p.waitFor();

            result
= p.exitValue();

        }
catch

(Exception e) {

            e.printStackTrace();

        }
finally

{

            if

(dos !=
null)
{

                try

{

                    dos.close();

                }
catch

(IOException e) {

                    e.printStackTrace();

                }

            }

        }

        return

result;

    }

}

时间: 2024-12-10 07:45:53

安卓ROOT权限代码的相关文章

安卓使用Root权限实现后台模拟全局按键、触屏事件方法(类似按键精灵)

继续在网上搜索安卓按键模拟(其实那时都不知道用什么关键字好了,能想到的关键字都用遍了,但是搜索出来的结果,都是之前提到的那几个依赖源码环境和系统权限的方案).发现有很多介绍ADB调试,向手机发送按键事件的文章.刚好之前做过在Root权限下,用Java调用安卓底层的Linux Shell,然后执行pm指令进行APK的安装卸载.这时我突发奇想,能否用Shell调用ADB指令呢? 于是就进行了尝试,使用Java执行Runtime.getRuntime().exec(“su”).getOutputStr

点点守护为什么建议安卓手机别开root权限?

本文摘自点点守护新闻栏目为什么建议安卓手机别开root权限? 为什么建议安卓手机别开root权限?首先我们要知道什么是root root用户是系统中唯一的超级管理员,它具有等同于操作系统的权限.一些需要root权限的应用,比如广告阻挡就是需要root权限的. 对于很多喜欢鼓捣安卓手机的使用者来说,root手机是很平常不过的事了,获取root权限之后手机的作用就可以大幅提升,这对于不少用户来说还是比较有吸引力的.不过,获取手机root之后手机就面临着变成“砖机”的风险了 首先,root之后用户就可

Android 代码判断是否获取ROOT权限

1 /** 2 * 判断当前手机是否有ROOT权限 3 * @return 4 */ 5 public boolean isRoot(){ 6 boolean bool = false; 7 8 try{ 9 if ((!new File("/system/bin/su").exists()) && (!new File("/system/xbin/su").exists())){ 10 bool = false; 11 } else { 12 bo

2017年Q1安卓ROOT类恶意病毒发展趋势研究报告

摘要 1.移动互联网黑产持续性攻击的核武器,用户设备沦陷的最后防线 Android平台作为目前最流行的流量平台,由于它的开源使得大量的厂商加入其阵营,作为当前最大的流量来源,安卓平台是黑产分子眼中的香饽饽,各种恶意应用和手机病毒纷至而来. 由于安卓系统先天就存在的一些限制,习惯了PC时代为所欲为的黑产分子为了绕过Android平台的安全机制以及与手机杀毒软件的对抗,病毒开发者需要获取手机等设备的最高权限以"王"的身份来发号施令.恶意广告弹框一天几十个保底,恶意应用装个一打,恶意短信扣费

闲聊ROOT权限——ROOT权限的前世今生

最近工作一直很忙,竟然慢慢地疏远了CSDN的博客,然而在工作中遇到问题,又会被多次的引导至CSDN,故笔者抽空也将自己学习的成果与大家分享在这里,希望能帮助到需要帮助的人. 本文将从几个方面,由浅至深地讲述ROOT到底是什么东西? 一. ROOT权限简单介绍 二.为什么需要ROOT 三. ADBD的ROOT权限 四.深入源代码 ROOT权限简介: ROOT权限是Linux内核中的最高权限,如果你的身份是ROOT,那么你就具有了ROOT权限.有了最高权限,你就可以为所欲为,换句话说,如果恶意程序获

转:Android随笔之——使用Root权限实现后台模拟全局按键、触屏事件方法(类似按键精灵)

本文转载自CSDN的jzj1993,原文连接:http://blog.csdn.net/jzj1993/article/details/39158865 有时我们需要使用安卓实现在后台模拟系统按键,比如对音量进行调节(模拟音量键),关闭前台正在运行的App(模拟返回键),或者模拟触屏事件.但是对于原生安卓系统而言,后台进程关闭前台进程,甚至模拟用户事件,进而操控整个系统,是不符合系统安全原则的,如果有这样的漏洞被病毒或恶意软件所利用,会非常危险. 由于一些特殊原因,我恰巧需要实现这样的功能,而又

Android应用申请ROOT权限

runtime = Runtime.getRuntime(); 这句话在java中的效果为获取电脑终端,比如在window下面就是dos窗口, 如: runtime.exec("color 2D") 与直接在dos下面直接输入color 2D的效果一样. 在安卓中相当于获取到Linux终端. 要让Android应用获得Root权限,首先Android设备必须已经获得Root权限. 应用获取Root权限的原理:让应用的代码执行目录获取最高权限.在Linux中通过chmod 777 [代码

星云精准测试对安卓底层驱动代码的测试案例分析

Android原生底层驱动应用面极广,但一直没有很好的办法进行质量追踪.本文借助星云精准测试的高可靠性的测试技术手段,针对Android原生底层驱动进行分析.插桩.编译.采集数据.数据分析等,逐步讲解精准测试是如何实现android原生底层驱动的对接. 在本文中,我们可以清晰地查看到如何进行技术对接的每一步,比如如何使用星云精准测试进行代码插桩.实现测试用例与采集底层驱动运行代码的数据追溯.对最终采集的数据进行一系列分析等. 一.安卓源码精准测试流程概述 经分析android源码的编译主要依靠A

转adb Shell root 权限

因为开发需要,我经常会用到adb这个工具(Android Debug Bridge),我们都知道adb shell默认是没有root权限的,修改系统文件就很不方便了,adb push一个文件就提示Permission Denied.删除system下的文件也没有权限.其实有两种方法可以获取adb shell的root权限,这两种方法的前提都是手机已经root. 1.用su可以提权,直接执行su就会看到用户命令提示符由"$"变成了"#",如果手机没有root,会提示s