我正在構建一個應用程序,該應用程序必須具有超級用戶權限才能在/ data目錄中寫入修改數據庫文件的內容。我寫一些代碼,獲得root訪問權限,但它給我的日誌不能「獲得root權限或用戶拒絕」給Android應用程序的根訪問權限
我的代碼是
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(canRunRootCommands())
Toast.makeText(this, "Can Run Root Commands", Toast.LENGTH_LONG).show();
}
@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;
}
public static boolean canRunRootCommands()
{
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);
}
if (exitSu)
{
os.writeBytes("exit\n");
os.flush();
}
}
}
catch (Exception e)
{
// Can't get root !
// Probably broken pipe exception on trying to write to output stream (os) 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;
}
如何獲得root權限的,這樣我可以更新數據庫文件?
大多數Android設備的根訪問權限受到限制。你必須得到這一點,通常排除設備的保修...... – ppeterka 2013-02-26 10:25:28
意味着我不能根本訪問大多數的Android設備?通過任何方法? – 2013-02-26 10:33:36
沒有。根植的訪問權限僅限於決定根植他們電話(少數)的用戶,並且明確允許您的應用程序根訪問。 – Budius 2013-02-26 10:50:16