Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 59, средняя оценка - 4.76
Пёс
228 / 76 / 4
Регистрация: 03.02.2013
Сообщений: 311
#1

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

01.09.2013, 23:14. Просмотров 7973. Ответов 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?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.09.2013, 23:14
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как дать своему приложению привилегии Root? (Программирование Android):

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

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

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

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

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

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

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

Добавлено через 2 минуты
самая первая строчка гласит что нет такого файла. вы верно путь написали? этот файл без расширения?
Пёс
228 / 76 / 4
Регистрация: 03.02.2013
Сообщений: 311
02.09.2013, 01:55  [ТС] #7
V0v1k, хм, в дебаге, когда исполнение попадает в блок catch, переменная e указывает на NULL...
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
02.09.2013, 01:59 #8
слышал что это вроде как баг дебагера.
Пёс
228 / 76 / 4
Регистрация: 03.02.2013
Сообщений: 311
02.09.2013, 01:59  [ТС] #9
V0v1k, с именем файла всё в порядке. Я проверял так: не меняя код программы, заходил в Root Explorer и выставлял разрешения rw-rw-rw этому файлу, потом запускал отладку. Всё отлично пишет, всё читает. Как только я меняю разрешения обратно на те, которые стояли по умолчанию (rw-r--r--) сразу получаю исключение. При этом чтение происходит без ошибок (ну оно и очевидно... права на чтение есть у всех).
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
02.09.2013, 02:13 #10
sleep вы используете чтобы успеть подтвердить запрос получение прав? может слип вылетает с InterruptedException и writeFile выполняется до подтверждения?
Пёс
228 / 76 / 4
Регистрация: 03.02.2013
Сообщений: 311
02.09.2013, 02:13  [ТС] #11
Помимо всего, я манипулировал с разрешениями того файла и выяснил, что приложение пишет нормально в файл, если его разрешения r--r--rw-, следовательно оно запущено от обычного пользователя. Запрос о правах root нормально выскакивает. Остальные приложения использующие root тоже отлично работают.
Миниатюры
Как дать своему приложению привилегии Root?  
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
02.09.2013, 02:15 #12
судя по скрину writeFile уже выполнился, а "Предоставить" вы еще не нажали.
Пёс
228 / 76 / 4
Регистрация: 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.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
02.09.2013, 02:24 #14
Цитата Сообщение от Пёс Посмотреть сообщение
Скажите, а после выполнения Process c = Runtime.getRuntime().exec("su"); всё приложение должно получить привилегии root или только тот процесс, который находится в "c"?
к сожалению, не имел опыта с рутом.
Пёс
228 / 76 / 4
Регистрация: 03.02.2013
Сообщений: 311
02.09.2013, 02:26  [ТС] #15
V0v1k, да вот я тоже, третий день мучаюсь... решил написать приложение под свой телефон. Раньше писал в основном на С++. Спасибо за попытки помочь.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.09.2013, 02:26
Привет! Вот еще темы с ответами:

Как назначить своему приложению входящие параметры? - C#
Всем добрый день!:) Допустим я собрал простенькое winForms-приложение C:\1.exe Хочу чтобы при ее запуске из cmd с параметром допустим...

.NET 4.x Как не дать стороннему приложению закрыть программу - C#
Что нужно сделать чтобы мою программу не закрывало левое приложение! Вообщем когда запускаю другое приложения, то моя программа...

Как дать права root для gedit? - Debian Linux
Добрый день. Я совершенно начинающий юзер Debian. Только-только его поставил. Установил Апач, ПХП, SQL. Пытаюсь редактировать файлы в папке...

Как выполнить событие в FormClosing и только потом дать закрыться приложению? - C#
Здравствуйте!Как выполнить какое либо действие в событии FormClosing до его стандартного закрытия? Т.е. допустим при клике на крестик мне...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
02.09.2013, 02:26
Ответ Создать тему
Опции темы

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