使得Android app获取root权限

package com.example.writefile;

import android.util.Log;

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;

public class suHelper {
    public boolean canRunRootCommands(ArrayList<String> cmds) {
        boolean retval = false;
        Process suProcess;
        try {
            suProcess = Runtime.getRuntime().exec("su");

            DataOutputStream os = new DataOutputStream(suProcess.getOutputStream());
            DataInputStream osRes = new DataInputStream(suProcess.getInputStream());

            if (null != os && null != osRes) {
                // Getting the id of the current user to check if this is root
                os.writeBytes("id\n");
                os.flush();

                String currUid = osRes.readLine();
                boolean exitSu = false;
                if (null == currUid) {
                    retval = false;
                    exitSu = false;
                    Log.d("ROOT", "Can't get root access or denied by user");
                } else if (true == currUid.contains("uid=0")) {
                    retval = true;
                    exitSu = true;
                    Log.d("ROOT", "Root access granted");
                } else {
                    retval = false;
                    exitSu = true;
                    Log.d("ROOT", "Root access rejected: " + currUid);
                }

                for (int i = 0; i < cmds.size(); i++) {
                    os.writeBytes(cmds.get(i) + "\n");
                    os.flush();
                }

                if (exitSu) {
                    os.writeBytes("exit\n");
                    os.flush();
                }

                BufferedReader reader = new BufferedReader(new InputStreamReader(
                        suProcess.getInputStream()));
                int read;
                char[] buffer = new char[4096];
                StringBuffer output = new StringBuffer();
                while ((read = reader.read(buffer)) > 0) {
                    output.append(buffer, 0, read);
                }
                reader.close();
                Log.d("ROOT", "canRunRootCommands: "+output.toString());

            }
        } catch (Exception e) {
            // Can't get root !
            // Probably broken pipe exception on trying to write to output
            // stream after su failed, meaning that the device is not rooted

            retval = false;
            Log.d("ROOT",
                    "Root access rejected [" + e.getClass().getName() + "] : " + e.getMessage());
        }

        return retval;
    }

}

        ArrayList<String> cmd = new ArrayList<>();
        cmd.add("chmod 777 " + "/data/data/"+getPackageName()+"/runcx");
        cmd.add("cd /data/data/"+getPackageName());
        //cmd.add("ls " + "/data/data/"+getPackageName());
        //cmd.add("ls");
        cmd.add("./runcx");
        new suHelper().canRunRootCommands(cmd);


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值