两种方法检查Android是否已获取root权限

现在Android手机root权限可以说是轻松就获取得到的,而关于判断手机是否已经root的方法,你了解吗?如果app有一些特殊功能需要root权限,则需要判断是否root。不知道root是不是意味着手机不安全?说到底还是想一台究竟,你可以学习Android应用开发视频教程。下面介绍两种方法:

方法1:

/**
* @author Kevin Kowalewski
*
*/
public class Root {

private static String LOG_TAG = Root.class.getName();

public boolean isDeviceRooted() {
if (checkRootMethod1()){return true;}
if (checkRootMethod2()){return true;}
if (checkRootMethod3()){return true;}
return false;
}

public boolean checkRootMethod1(){
String buildTags = android.os.Build.TAGS;

if (buildTags != null && buildTags.contains(“test-keys”)) {
return true;
}
return false;
}

public boolean checkRootMethod2(){
try {
File file = new File(“/system/app/Superuser.apk”);
if (file.exists()) {
return true;
}
} catch (Exception e) { }

return false;

public boolean checkRootMethod3() {
if (new ExecShell().executeCommand(SHELL_CMD.check_su_binary) != null){
return true;
}else{
return false;
}
}
}
/**
* @author Kevin Kowalewski
*
*/
public class ExecShell {

private static String LOG_TAG = ExecShell.class.getName();

public static enum SHELL_CMD {
check_su_binary(new String[] {“/system/xbin/which”,”su”}),
;

String[] command;

SHELL_CMD(String[] command){
this.command = command;
}
}

public ArrayList<String> executeCommand(SHELL_CMD shellCmd){
String line = null;
ArrayList<String> fullResponse = new ArrayList<String>();
Process localProcess = null;

try {
localProcess = Runtime.getRuntime().exec(shellCmd.command);
} catch (Exception e) {
return null;
//e.printStackTrace();
}

BufferedWriter out = new BufferedWriter(new OutputStreamWriter(localProcess.getOutputStream()));
BufferedReader in = new BufferedReader(new InputStreamReader(localProcess.getInputStream()));

try {
while ((line = in.readLine()) != null) {
Log.d(LOG_TAG, “–> Line received: ” + line);
fullResponse.add(line);
}
} catch (Exception e) {
e.printStackTrace();
}

Log.d(LOG_TAG, “–> Full response was: ” + fullResponse);

return fullResponse;
}

}

代码来自stackoverflow,向作者致敬。

方法2:

The RootTools library offers simple methods to check for root:

一个开源项目:http://code.google.com/p/roottools/

RootTools.isRootAvailable()判断是否root

RootTools.isAccessGiven()返回true那么手机已经root并且app也被授予root权限。

String commandToExecute = “su”;
executeShellCommand(commandToExecute);
private boolean executeShellCommand(String command){
Process process = null;
try{
process = Runtime.getRuntime().exec(command);
return true;
} catch (Exception e) {
return false;
} finally{
if(process != null){
try{
process.destroy();
}catch (Exception e) {
}
}
}
}

ps:使用这些方法有可能将手机系统拖的非常慢,当应用多次启动后会创建出很多个僵死的进程耗用内存。

还有更多移动互联网教程资讯等请关注e良师益友网。

时间: 2024-12-26 05:32:51

两种方法检查Android是否已获取root权限的相关文章

Android 应用轻松获取Root权限

原文出处: http://blog.csdn.net/steelychen/article/details/40744305 亲,还在为自己编写的应用如何获取Root权限而苦恼吗,还在为网上提供千千万万(有点夸张)的解决办案而不能解决你的问题而苦恼吗.福音来啦,花一分钟看完这篇文章你会觉得原来只需一个jar包即可以实现. 当然这得在你的设备已经Root了的情况下使用. jar包导入工程 1. 在Eclipse中左右你的项目选择Build Path -> config build path 2.

Android手机在获取root权限下的抓包过程

1. 电脑连接手机,进入adb模式:adb shell 2. 获取手机root权限:su 3. 下载tcpdump; 4. 将tcpdump放到手机/data/local/目录下:adb push c:\tcpdump /data/local/tcpdump 5. 赋予/data/local/tcpdump对应权限:chmod 6755 /data/local/tcpdump 6. 进入路径:cd /data/local 7. 开始抓包:/data/local/tcpdump -i any -p

在装完Linux系统之后自己去修改Swap分区的大小(两种方法)

在装完Linux系统之后自己去修改Swap分区的大小(两种方法) 在安装完Linux系统后,swap分区太小怎么办,怎么可以扩大Swap分区呢?有两个办法,一个是从新建立swap分区,一个是增加swap分区.下面介绍这两种方法: 第一您必须有root权限,过程中一定要很小心,一不小心就破坏了整个硬盘的数据,执行下面的过程之前您需要三思而行,错误操作后的后果由执行者自己承担. 新建swap分区 1.以root身份进入控制台,输入 # swapoff -a          #停止交换分区 2. 用

Android第五期 - 更新自己的apk本地与网络两种方法

首先是本地: ParseXmlService部分: package com.szy.update; import java.io.InputStream; import java.util.HashMap; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element

android 实现分享功能两种方法

当我想做一个智能的记事本的时候,我就在尝试自己写一组分享功能.后来才知道,原来每个社交软件中都有自己的分享接口. 这就大大减少了我们的代码量了. 第一种方法:特点--简单 package com.example.share; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.MenuI

Android 读取工程内资源文件的两种方法

前言 欢迎大家我分享和推荐好用的代码段~~ 声明          欢迎转载,但请保留文章原始出处: CSDN:http://www.csdn.net 雨季o莫忧离:http://blog.csdn.net/luckkof 正文 总结: asset目录下文件: 称为原生文件,这类文件在被打包成apk文件时是不会进行压缩的,不会自动生成R文件的ID 访问: 获取路径: file://android_asset/test.xml //工程根目录下的assets文件夹中存放,比如assets/test

Android中使用Gson解析JSON数据的两种方法

Json是一种类似于XML的通用数据交换格式,具有比XML更高的传输效率;本文将介绍两种方法解析JSON数据,需要的朋友可以参考下 Json是一种类似于XML的通用数据交换格式,具有比XML更高的传输效率. 从结构上看,所有的数据(data)最终都可以分解成三种类型: 第一种类型是标量(scalar),也就是一个单独的字符串(string)或数字(numbers),比如"北京"这个单独的词. 第二种类型是序列(sequence),也就是若干个相关的数据按照一定顺序并列在一起,又叫做数组

RadioButon 获取单选按钮组选中值的两种方法!

在单选按钮中我们一般需要获得当前用户选择的按钮值是什么,想要得到用户的选择有两种方法. 第一种:在改变单选按钮组的值时获取.在改变单选按钮的值时获取选中项的值时,首先需要获取单选按钮组,然后为其添加OnCheckedChangeListener,并在onCheckedChanged()方法中根据参数checkedId获取被选中的单选按钮,并通过其getText()方法获取该单选按钮对应的值: 第二种:单击其他按钮时获取.首先需要在该按钮的单击事件的监听器的onClick()方法中,通过for循环

android 中传递对象两种方法探索(Serializable,Parcelable)

相信大家在android开发的过程中总会遇到要在Activity中间传递数据的情况,当然,遇到需要在Intent中传递对象的情况也不可避免,所以我就so了一下相关的知识,在这里总结消化一下.就目前来说,我了解到的只有两种方式: 1.利用Bundle.putSerializable(Key,Object): 2.利用Bundle.putParcelable(Key, Object): 下面详细介绍两种方法的使用和区别: 首先第一点,这两种方法实现的前提都需要将传递的对象Object序列化,那么,问