Запустите бинарный файл из корневого приложения Android - PullRequest
3 голосов
/ 23 июня 2011

Я хочу запустить двоичный файл на /dev/local с именем native (я протолкнул его через adb) с правами root.Для этого я написал следующий код:

    try {
        root=Runtime.getRuntime().exec("su");
        DataOutputStream os = new DataOutputStream(root.getOutputStream());
        DataInputStream osRes = new DataInputStream(root.getInputStream());
        os.writeBytes("/data/local/native\n");
        os.flush();
        TextView output=(TextView)findViewById(R.id.textview);
        output.append(osRes.readLine());
        root.waitFor();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        Toast.makeText(this, e.toString() , Toast.LENGTH_SHORT).show();
    }

Это дало мне NullPointerException. Итак, я попытался изменить его на:

    try{
        root=Runtime.getRuntime().exec("su");
        root.waitFor();
        DataOutputStream os = new DataOutputStream(root.getOutputStream());
        DataInputStream osRes = new DataInputStream(root.getInputStream());
        os.writeBytes("/data/local/native\n");
        os.flush();
        TextView output=(TextView)findViewById(R.id.textview);
        output.append(osRes.readLine());
        root.waitFor();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        Toast.makeText(this, e.toString() , Toast.LENGTH_SHORT).show();
    }

С этим яОшибка BrokenPipe.

Пожалуйста, помогите мне, я хочу запустить бинарный файл с правами суперпользователя, есть ли альтернативный способ или что я делаю неправильно?

Ответы [ 3 ]

1 голос
/ 23 июня 2011

Попробуйте запустить su -c /path/to/executable.

0 голосов
/ 31 октября 2013

Я знаю, что мой ответ опоздал, но если вы все еще сталкиваетесь с этой проблемой, вот что я сделал.Мне также пришлось запустить двоичный файл с правами root.Я попробовал несколько вещей, например, поместил бинарный файл в папку / system / app, откуда запускаются системные приложения и, следовательно, он имеет права root.Но это не сработало.Поэтому мне пришлось изменить файл su.c и перекомпилировать ядро, как упоминалось на сайте THIS .Если перекомпиляция ядра не подходит, вы можете попробовать внести те же изменения в roottool (например, busybox) и перекомпилировать их.Теперь вы можете использовать «busybox su -c» вместо просто «su -c».

0 голосов
/ 19 апреля 2012

Я много раз отвечал и помогал другим. Пожалуйста, попробуйте это:

Usage: Run(new String[]{"/system/bin/sh", "-c", "su"});

public String Run(String[] cmd) {
    StringBuffer theRun = null;
    try {
        Process process = Runtime.getRuntime().exec(cmd);

        BufferedReader reader = new BufferedReader(
                new InputStreamReader(process.getInputStream()));
        int read;
        char[] buffer = new char[4096];
        StringBuffer output = new StringBuffer();
        while ((read = reader.read(buffer)) > 0) {
            theRun = output.append(buffer, 0, read);//output
        }
        reader.close();
        process.waitFor();

    } catch (IOException e) {
        throw new RuntimeException(e);
    } catch (InterruptedException e) {
        throw new RuntimeException(e);
    }
        return theRun.toString();//return output
}

Также эта ссылка полезна: http://www.stealthcopter.com/blog/2010/01/android-requesting-root-access-in-your-app/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...