Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.94/50: Рейтинг темы: голосов - 50, средняя оценка - 4.94
Пёс
228 / 76 / 9
Регистрация: 03.02.2013
Сообщений: 311
#1

Как дать своему приложению привилегии Root?

01.09.2013, 23:14. Просмотров 9078. Ответов 16

Нужно записать данные в файл, который имеет права доступа RW-R--R--, соответственно нужен рут. Следующий код не пишет в файл, получаю эксепшен на строчке.

Java
1
FileWriter fw1 = new FileWriter("/sys/class/leds/LED2_B/brightness");
Весь код программы:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package com.example.project_1;
 
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
 
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
 
public class MainActivity extends Activity {
 
    final String cmd = "su";
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main); 
        try {
            Process c = Runtime.getRuntime().exec(cmd);
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        
        try {
            Thread.currentThread().sleep(10000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        writeFile();
        
        
    }
    
    void writeFile() {
 
        try {
            
            
            //FileWriter fw2 = new FileWriter("/sys/class/leds/LED2_B/led_current");
          
            FileReader fr = new FileReader("/sys/class/leds/LED2_B/brightness");
            char d = (char)fr.read();
            fr.close();
            FileWriter fw1 = new FileWriter("/sys/class/leds/LED2_B/brightness");
            fw1.write("240");
            fw1.close();
            
        } catch (Exception e) {
            e.printStackTrace();//  LED недоступно
            
        }
        
      }
 
 
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    
}
Устройство рутованное, при выполнении "su" выскакивает запрос получения прав.

Добавлено через 1 минуту
Как вообще убедится в том, что приложению выданы права root?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.09.2013, 23:14
Ответы с готовыми решениями:

Как реализовать дополнения к приложению
Делаю игру по принципу викторины – вопрос-ответ. Допустим, сделал, выложил в...

Root или не Root
Добрый день, проконсультируйте плииииз! SamsungA5(2016). "фирменный" (с...

Как получить доступ к root файлу
Всем привет. Допустим есть файл, его не видно без доступа к root. Как получить...

Как прикреплять к приложению два дополнительных файла?
http://samsungu.ru/nws/zx1_3188.php Как загрузить на гугл плей прил размером в...

Как подключить api сайта к приложению Android?
Имеется api вида include ('engine/api/api.class.php'). Как мне подключить его в...

16
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
01.09.2013, 23:48 #2
может просто пермишены в манифесте не прописаны?
1
Пёс
228 / 76 / 9
Регистрация: 03.02.2013
Сообщений: 311
02.09.2013, 00:07  [ТС] #3
V0v1k, только что добавил android.permission.ACCESS_SUPERUSER, но что то не помогло... ещё какие то права нужны для этого?
0
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
02.09.2013, 00:20 #4
а что в логах то?
1
Пёс
228 / 76 / 9
Регистрация: 03.02.2013
Сообщений: 311
02.09.2013, 00:47  [ТС] #5
V0v1k, вобщем то.... ничего.. вот скрин
0
Миниатюры
Как дать своему приложению привилегии Root?  
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
02.09.2013, 01:54 #6
если есть екзепшен, значит он должен быть в логах.

Добавлено через 2 минуты
самая первая строчка гласит что нет такого файла. вы верно путь написали? этот файл без расширения?
1
Пёс
228 / 76 / 9
Регистрация: 03.02.2013
Сообщений: 311
02.09.2013, 01:55  [ТС] #7
V0v1k, хм, в дебаге, когда исполнение попадает в блок catch, переменная e указывает на NULL...
0
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
02.09.2013, 01:59 #8
слышал что это вроде как баг дебагера.
1
Пёс
228 / 76 / 9
Регистрация: 03.02.2013
Сообщений: 311
02.09.2013, 01:59  [ТС] #9
V0v1k, с именем файла всё в порядке. Я проверял так: не меняя код программы, заходил в Root Explorer и выставлял разрешения rw-rw-rw этому файлу, потом запускал отладку. Всё отлично пишет, всё читает. Как только я меняю разрешения обратно на те, которые стояли по умолчанию (rw-r--r--) сразу получаю исключение. При этом чтение происходит без ошибок (ну оно и очевидно... права на чтение есть у всех).
0
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
02.09.2013, 02:13 #10
sleep вы используете чтобы успеть подтвердить запрос получение прав? может слип вылетает с InterruptedException и writeFile выполняется до подтверждения?
1
Пёс
228 / 76 / 9
Регистрация: 03.02.2013
Сообщений: 311
02.09.2013, 02:13  [ТС] #11
Помимо всего, я манипулировал с разрешениями того файла и выяснил, что приложение пишет нормально в файл, если его разрешения r--r--rw-, следовательно оно запущено от обычного пользователя. Запрос о правах root нормально выскакивает. Остальные приложения использующие root тоже отлично работают.
0
Миниатюры
Как дать своему приложению привилегии Root?  
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
02.09.2013, 02:15 #12
судя по скрину writeFile уже выполнился, а "Предоставить" вы еще не нажали.
1
Пёс
228 / 76 / 9
Регистрация: 03.02.2013
Сообщений: 311
02.09.2013, 02:22  [ТС] #13
Цитата Сообщение от V0v1k Посмотреть сообщение
sleep вы используете чтобы успеть подтвердить запрос получение прав?
Да, верно.

Цитата Сообщение от V0v1k Посмотреть сообщение
может слип вылетает с InterruptedException и writeFile выполняется до подтверждения?
сейчас проверил... всё нормально, программа выдерживает 10 секунд как и должна.

Скажите, а после выполнения Process c = Runtime.getRuntime().exec("su"); всё приложение должно получить привилегии root или только тот процесс, который находится в "c"?

Добавлено через 2 минуты
V0v1k, скриншот был сделан не спеша, просто что бы показать запрос. В предыдущих тестах я успевал всё подтвердить значительно раньше появления надписи Hello World.
0
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
02.09.2013, 02:24 #14
Цитата Сообщение от Пёс Посмотреть сообщение
Скажите, а после выполнения Process c = Runtime.getRuntime().exec("su"); всё приложение должно получить привилегии root или только тот процесс, который находится в "c"?
к сожалению, не имел опыта с рутом.
0
Пёс
228 / 76 / 9
Регистрация: 03.02.2013
Сообщений: 311
02.09.2013, 02:26  [ТС] #15
V0v1k, да вот я тоже, третий день мучаюсь... решил написать приложение под свой телефон. Раньше писал в основном на С++. Спасибо за попытки помочь.
0
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
02.09.2013, 02:31 #16
http://stackoverflow.com/questions/1...te-permissions

Добавлено через 36 секунд
http://stackoverflow.com/questions/5...android-device

Добавлено через 1 минуту
если я правильно понял, в этих примерах меняют права файла в рантайме командой chmod прежде чем работать с ними.
0
Пёс
228 / 76 / 9
Регистрация: 03.02.2013
Сообщений: 311
02.09.2013, 12:16  [ТС] #17
До такого я и сам смог додуматься... Но это как то странно... Можно еще через su, потом echo 123 > [путь] но это опять какой то танец с бубном. Разве никак нельзя сделать это средствами Java или хотя бы Андроид?
0
02.09.2013, 12:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.09.2013, 12:16

Как выбрать правильно root для телефона?
Здравствуйте, извените , что немного не по теме ,скажите ,как правильно выбрать...

Как сделать скриншот экрана без прав Root-а?
как сделать скриншот всего экрана без использования(getRootView()) без рут прав...

Как отправить из одного приложения другому приложению широковещательное намерение?
Имеется приложение 1, на котором размещен приемник. Также имеется приложение 2,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru