RootExplorer怎么样获取root权限的
Android系統上面有名的RootExplorer很強大,可以操作任何目錄下的文件,包括像/data/data這樣需要root權限才能訪問的地方。它是怎么樣做到的呢?
?
?
這里要先提一個開源項目,地址是:
http://code.google.com/p/superuser/
大家可以用SVN把源碼下載到本地,與系統源碼一起編譯就可以了。編譯完成后會生成兩個文件,一個是二進制可執行文件su,另一個是Superuser.apk。把su復制到系統的/system/bin目錄,再把Superuser.apk復制到系統的/system/app目錄。
這樣,就可以用下面的代碼執行su命令時,就會啟動Superuser.apk中的Activity彈出標題為“以下程序要求授予最高權限...”的對話框,用戶同意之后,APK就有ROOT權限了。
?
?
下面看看APK里面的代碼。
?
ProcessBuilder pb = new ProcessBuilder("/system/bin/sh"); pb.directory(new File("/"));//設置shell的當前目錄。 try {Process proc = pb.start();//獲取輸入流,可以通過它獲取SHELL的輸出。BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));BufferedReader err = new BufferedReader(new InputStreamReader(proc.getErrorStream()));//獲取輸出流,可以通過它向SHELL發送命令。PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(proc.getOutputStream())), true);out.println("pwd");out.println("su root");//執行這一句時會彈出對話框(以下程序要求授予最高權限...),要求用戶確認。out.println("cd /data/data");//這個目錄在系統中要求有root權限才可以訪問的。out.println("ls -l");//這個命令如果能列出當前安裝的APK的數據文件存放目錄,就說明我們有了ROOT權限。out.println("exit");// proc.waitFor();String line;while ((line = in.readLine()) != null) {System.out.println(line);}while ((line = err.readLine()) != null) {System.out.println(line);}in.close();out.close();proc.destroy(); } catch (Exception e) {System.out.println("exception:" + e); }?
?
有了root權限,再結合ls,cp,mv等命令,整個系統的所有目錄都可以操作了。
?
有一些問題目前還沒有找到答案:
如果我用ADB從Ubuntu上面執行su root,用戶在彈出的對話框上選同意的話,命令會很快返回,接下面提示符就變成#了。
但是,我用代碼在APK里面測試的時候,只是偶爾會成功,發現大部分時候會卡死在out.println("su root");這一句上。即,用戶在對話框上面選同意后程序沒有響應,DDMS也看不到輸出。再等上一會兒,程序無響應需要強制關閉的對話框就出來了。這個項目還是不完善的地方,不過思路真的不錯。
?
?
總結
以上是生活随笔為你收集整理的RootExplorer怎么样获取root权限的的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ACE下载地址
- 下一篇: Android Studio —— To