2015-06-03 86 views
1

我正在嘗試構建一個android應用程序,該程序可以訪問/ data dir(例如),而不需要分析在執行su之後在shell上運行的命令的輸出。android應用程序根目錄或系統權限

我的意思是,在研究了很多之後,並且也在一些根探索者的代碼中,他們在需要root權限時執行的操作是在執行su之後解析命令的輸出。

我要的是做這樣的事情是什麼:

File file = new File("/data"); 
File[] files = file.listFiles();// get the list array of file 
for (int i = 0; i < files.length; i++) { 
    File fileItem = files[i]; 
    System.out.println("FILE NAME: "+fileItem.getName().toString()) { 
} 

爲了實現這一點,我覺得申請過程中必須從執行開始時以root身份運行。

我試圖做蘇這種方式之後,從shell中運行的APP:

$su 
#am start -n com.example.test/.ui.Activity 

但它看着ps命令我看到應用程序作爲用戶的輸出後,同樣的「u0_a110 「而不是根。

此外,我嘗試使用參數 - 用戶0和 - 用戶1000,具有相同的結果...我認爲,達爾維克虛擬機從父進程中刪除權限。

我也試圖應用變換成一個系統的應用程序它具有相同的結果移動到/系統/ PRIV應用內,

(該應用它不是根,也沒有系統的運行的用戶)可能是搭配:

android:sharedUserId="android.uid.system" 

在應用程序運行至少用戶系統的清單,我想這種方式運行應用程序,並放置在/系統/私法,應用程序,手機並沒有完成引導。

我認爲這是錯誤,因爲應用程序需要使用製造商的系統密鑰進行簽名。

它可能運行一些Android應用程序作爲根或至少系統?我知道,如果我爲ARM(或手機的體系結構)交叉編譯Linux應用程序並以root身份在shell中運行該應用程序,那麼該應用程序將具有root訪問權限,但是,這是唯一方法嗎?我想用android java應用程序來實現這一點。

回答

2

據我所知,java應用程序無法實現這一點。即使將系統uid分配給應用程序並使用平臺認證進行簽名,它仍然無法獲得root權限。 systemuid的思想是訪問一些系統級別的apis,如控制飛行模式,獲取framebuffer,強制停止軟件包等,但不能以root權限控制文件系統。

+0

如果你看看輸出:ps | grep系統,你會看到很多以系統用戶身份運行的android應用程序,其中一些我幾乎可以確定是java應用程序。像com.android.settings –

+0

@Mario Rial:舊設備上可能會出現這種情況。但是在目前的Android 5設備上,只有deamons正在使用系統權限或root權限運行。 – Robert

+0

我的測試設備是一個android 4.4.2,你的意思是守護進程?一個android系統服務或一個常規的linux守護進程?所以在目前的Android版本中,以root用戶或至少系統的方式運行應用程序的唯一方法是編譯android的常規linux應用程序並以root身份運行它。 –

0

Android Rooting這些天很常見。每個人都要求根Root他們的Android設備時感到神聖,但現在互聯網上有很多應用程序,這將幫助你在幾秒鐘內完成你的Android根源。無需知道編碼和所有。也不需要PC

據我們所知,沒有辦法在此上添加Java。所有你需要做的只是從應用程序商店的Play商店安裝一些best root apps,並開始構建你的應用程序。

它可以幫助你很多事情,使你的應用程序以極大的UI和AI 爲root權限更具吸引力嘗試這些代碼

try { 

String[] reboot = new String[] { "su", "-c", "reboot" }; 
//-c will cause the next argument to be treated as a command 

Process process = Runtime.getRuntime().exec(reboot); 

process.waitFor(); //wait for the native process to finish executing. 

    } catch (Exception e) { 

Toast.makeText(getApplicationContext()," Device not rooted.\n Could not reboot...",Toast.LENGTH_SHORT).show(); 

} 

非常感謝!