前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android 检查应用是否有root权限

Android 检查应用是否有root权限

作者头像
子勰
发布2018-05-22 16:08:16
2.3K0
发布2018-05-22 16:08:16
举报
文章被收录于专栏:子勰随笔子勰随笔

最近写项目的自动化测试,为了尽可能的模拟真实的使用场景,会有一些夸应用的用户点击、输入等事件的模拟。对于ROOT的机器,这个自然很容易做到,但是对于非root的机器,只能提供降级服务。总不能因为这个原因根据是否root还要用两套测试程序或者工具。

要根据不同的机器上应用能获取的权限类型不同和差异化的提供测试脚本,就需要在代码中检查当前应用是否有root权限。个人采用的是直接在代码中执行一个需要root权限的adb命令,根据返回值来检测。

事例代码:

代码语言:javascript
复制
……

File file = new File(filePath);
if (file.exists()) {
	file.delete();
	Log.d(MSDKTest.TAG, "File :" + filePath + "  deleted!");
}

String cmdStr = "uiautomator dump " + filePath;
mIsRoot = CommonUntil.exeCmdWithRoot(cmdStr);

……

CommonUntil中关于exeCmdWithRoot的实现如下:

代码语言:javascript
复制
public static boolean exeCmdWithRoot(String cmdStr){
	if(null == cmdStr || "".equals(cmdStr)){
		Log.d(MSDKTest.TAG,"bad cmdStr" );
		return false;
	}
	Process process = null;
	String[] cmds = new String[] { cmdStr };
	try {
		process = Runtime.getRuntime().exec("su");

		DataOutputStream os = new DataOutputStream(process.getOutputStream());
		for (String cmd : cmds) {
			os.write(new String(cmd + "\n").getBytes());
		}
		os.flush();
		os.close();
	} catch (Exception e) {
		String message = "executeCmd: " + cmdStr + " error: " + e.toString();
		Log.d(MSDKTest.TAG,"errorMessage:"+message);
	}

	if (process != null) {
		Log.d(MSDKTest.TAG,"process wait execed");
		try {
			int status = process.waitFor();
			process.getOutputStream().close();
			process.getErrorStream().close();
			process.getInputStream().close();
			Log.d(MSDKTest.TAG,"status:"+status);
			//这里是关键代码,其实只有status为1的时候是没有权限,这里个人直接把所有运行shell命令的异常都归为失败
			if(0 == status){
				return true;
			}else{
				return false;
			}
		} catch (InterruptedException e) {
			Log.d(MSDKTest.TAG,"InterruptedException");
			e.printStackTrace();
		} catch (IOException e) {
			Log.d(MSDKTest.TAG,"IOException");
			e.printStackTrace();
		}
	}
	return false;
}

通过上面的代码,即可轻松获取当前机器上,被测试的应用是否可以获取到root权限。然后根据是否root,对于同一个测试用例采用不同的测试方法。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015年10月26日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档