分享好友 最新动态首页 最新动态分类 切换频道
android在apk中获取root权限,并执行命令
2024-12-27 00:59

在apk中,有时候需要root权限,例如通过apk更新系统库等system的文件等,避免升级固件,或者在apk中需要直接访问某些设备等。下面是在apk中获取root权限的方法,前提是设备已经root过了。

关键点在于下面这句,通过执行su产生一个具有root权限的进程

Process p = Runtime.getRuntime().exec(“su”);

然后,在向这个进程的写入要执行的命令,即可达到以root权限执行命令

dos = new DataOutputStream(p.getOutputStream());

dos.writeBytes(cmd + “ ”);

dos.flush();

或者用下面的方式

Runtime.getRuntime().exec(new String[]{“/system/bin/su”,“-c”, cmd});

经过测试,以root权限执行命令,只在真机上测试成功,在模拟器上没有成功过。

第一次运行时,会出现请求root权限的界面,选中记住,并允许

测试程序界面,如果已经root,界面中可以显示出/system分区对应的设备节点

主要文件:RootCmd.java

[java]

package org.ckl.root;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.IOException;

import android.util.Log;

public final class RootCmd {

private static final String TAG = “RootCmd”;

private static boolean mHaveRoot = false;

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

public static boolean haveRoot() {

if (!mHaveRoot) {

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

if (ret != -1) {

Log.i(TAG, “have root!”);

mHaveRoot = true;

} else {

Log.i(TAG, “not root!”);

}

} else {

Log.i(TAG, “mHaveRoot = true, have root!”);

}

return mHaveRoot;

}

// 执行命令并且输出结果

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());

Log.i(TAG, cmd);

dos.writeBytes(cmd + “ ”);

dos.flush();

dos.writeBytes(“exit ”);

dos.flush();

String line = null;

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

Log.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());

Log.i(TAG, cmd);

dos.writeBytes(cmd + “ ”);

dos.flush();

dos.writeBytes(“exit ”);

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;

}

}

相关文件:SystemPartition.java,获取/system分区设备节点,并支持重新mount /system为可读写

[java]

package org.ckl.root;

import java.io.DataInputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.IOException;

import android.util.Log;

public class SystemPartition {

private static final String TAG = “SystemMount”;

private static String TMP_PATH = “/sdcard/mount.txt”;

private static String mMountPiont = null;

private static boolean mWriteable = false;

private SystemPartition() {

Log.i(TAG, “new SystemMount()”);

}

private static class SystemPartitionHolder {

private static SystemPartition instance = new SystemPartition();

}

public SystemPartition getInstance() {

return SystemPartitionHolder.instance;

}

public static String getSystemMountPiont() {

DataInputStream dis = null;

if (mMountPiont == null) {

try {

RootCmd.execRootCmd("mount > " + TMP_PATH);

//              Runtime.getRuntime().exec("mount > " + TMP_PATH);

dis = new DataInputStream(new FileInputStream(TMP_PATH));

null;

if (mMountPiont == null) {

try {

RootCmd.execRootCmd("mount > " + TMP_PATH);

//              Runtime.getRuntime().exec("mount > " + TMP_PATH);

最新文章
WPS怎么建文件夹
在日常办公和学习中,WPS Office作为一款功能强大的办公软件套件,被广泛应用于文档处理、表格制作和幻灯片演示等领域。在使用WPS的过程中,有时我们需要创建文件夹来整理和管理文件,以便提高工作效率。那么,如何在WPS中创建文件夹呢?以
谷歌插件——关键词规划师(Google adwords)
调研关键词在上新品时不可或缺的一环,成功的找到商品利基的重要关键词,可以提升销售潜力,提升商品搜索排名和搜索量。关键词的重要性应该不需要在多加赘述,这就分享给小伙伴。Google Keywords Planner(谷歌关键词规划师),这款免费又好
重庆建设指南,零基础打造专属个性化教程
重庆搭建步骤详解,涵盖从选择域名、购买空间、安装CMS到设计界面、优化SEO等全过程。本文从零基础出发,手把手教你打造个性化,助力你的事业发展。搭建前的筹备工作重庆搭建流程重庆搭建要点1. 明确类型与功能在着手搭建之前,首要任务是
网站制作案例价格多少合适,有哪些可以让大学生自学ps、pr、office的网站值得推荐?
关于“网站制作案例价格多少”的问题,小编就整理了【4】个相关介绍“网站制作案例价格多少”的解答:有哪些可以让大学生自学ps、pr、office的网站值得推荐?  谢谢邀请回答这个问题,网上学习这三个软件的网站实在太多了,选择了几个自
VMware Workstation Pro V17.5.2.23775571 官方版免费软件全功能绿色商业破解版注册码下载
VMware Workstation Pro V17.5.2.23775571 官方版免费软件万水千山自高自痛定思痛大11. 转角,是奇遇,是机遇,还是一场灾难的开始?记忆中,转角就是回家的路,转过一个弯,再一个弯,仰头与那盏熟悉的灯火交汇,空气中弥漫熟悉的味道……
销售提成系统哪个好用?
在选择销售提成系统时,以下几个系统因其功能强大、用户体验良好而备受推荐:1、;2、Salesforce;3、Zoho ;4、HubSpot CRM;5、SAP。其中,简道云因其高度定制化、简单易用和强大的数据分析能力,成为许多企业的首选。简道云可以根据企业
一文讲清楚AI,以及AI的基础理论
科普,科普。AI大热。NVIDIA成为美股市值最高的公司,没有自动驾驶能力的汽车公司最终都成为诺基亚,AI是“人类”最后一项重要发明,机器学习、通用人工智能(AGI)、AI会取代80%的工作岗位,各种故事令人眼花缭乱。我想用一篇文章讲从头到
考研机器人工程就业方向及就业前景
随着科技的不断进步,机器人工程专业逐渐成为研究生们热衷追求的领域之一。那么,机器人工程专业的就业前景如何?未来的发展趋势又是怎样的呢?本文将从这两个方面进行探讨。机器人工程专业是一个充满挑战和机遇的领域。随着人工智能和自动
推荐12个AI免费一键生成PPT的网站【2024年最新】
制作PPT演示文稿是一项重要的技能,无论是在商务会议、教育培训还是各类演讲中。虽然PowerPoint本身提供了许多设计工具和模板,但有时我们还是需要一些额外的帮助来提升演示文稿的专业度和吸引力。幸运的是,随着人工智
相关文章
推荐文章
发表评论
0评