2013-02-15 2 views
1

나는 그것에 대해 이미 질문이 있다는 것을 알고 있지만, 모든 답을 성공없이 시도했다.안드로이드 애플 리케이션을위한 루트 액세스 요청

("루트"라는 제목) 간단한 CheckBoxPreference있다 :

<CheckBoxPreference 
    android:key="root" 
    android:title="@string/root" 
    android:summary="@string/root_summary" 
    android:defaultValue="false" /> 

지금 내가 게인 루트 액세스에 OnPreferenceChangeListener를 설정할 필요가. 체크 박스에 체크해야 그렇다면, 그렇지 않으면 안 :

public class Settings extends PreferenceActivity implements OnPreferenceChangeListener { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.settings); 

     findPreference("root").setOnPreferenceChangeListener(this); 
    } 

    @Override 
    public boolean onPreferenceChange(Preference preference, Object newValue) { 
     String key = preference.getKey(); 
     if ("root".equals(key) && !((CheckBoxPreference) preference).isChecked()) { 
      try { 
       Process p = Runtime.getRuntime().exec("su"); 
       p.waitFor(); 
       Log.d("Settings", Integer.toString(p.exitValue())); 
       if (p.exitValue() == 255) { 
        Log.d("Settings", "###NO ROOT###"); 
        return false; 
       } 
      } catch (Exception e) { 
       Log.d("Settings", "###NO ROOT###"); 
       Log.d("Settings", e.getMessage()); 
       return false; 
      } 
      Log.d("Settings", "!!!ROOT!!!"); 
     } 

     return true; 
    } 

} 

수퍼 유저 루트 액세스를 제대로하라는 메시지가 표시됩니다. exitValue가 1 (???)이고 전체 앱을 정지시킬 수 있으므로 (p.waitFor에서 추측합니다) 부인은 true를 반환합니다.

현재 su 바이너리 3.1.1 (최신 버전)으로 수퍼 유저 3.1.3을 실행하고 있습니다. Activity pause timeout for ActivityRecord{42c0ebb8 com.example/.gui.Settings}

답변

3

실행중인 명령은 단지, 내가 의심, 수퍼 유저로 쉘을 실행 su이다 : 나는 다음과 같은 메시지를 볼 수있는 로그 캣으로 살펴보면

. 쉘이 끝나기를 기다리고 있습니다.

su some-command-here-which-needs-to-run-as-root을 지정해야합니다.

안타깝게도 Android 프로젝트 내에서 Java 코드에 대한 수퍼 유저 권한을 얻는 방법은 없습니다. 근원은 su에 의해 생성 된 명령에만 적용됩니다.

+0

어떻게 ES 파일 관리자가이 작업을 수행합니까? 같은 절차입니다 : 설정 -> 루트 - 설정 -> 루트 탐색기 (CheckBoxPreference)입니다. 나는 똑같이하고 싶다. 어떤 명령을 수행합니까? 수행해야합니까? – dtrunk

+0

루트로 개별 파일 작업을 실행한다고 가정합니다 (예 :'mv','ls' 등의 UNIX 명령) –

+0

onPreferenceChange에서 직접 ?! 나는 그렇게 생각하지 않는다 ... – dtrunk

관련 문제