现在的位置: 首页 > 综合 > 正文

Android 运行底层linux外部命令的实现

2017年12月11日 ⁄ 综合 ⁄ 共 2685字 ⁄ 字号 评论关闭
分类: Android 600人阅读 评论(0) 收藏 举报
Android运行底层linux外部命令的实现
android的底层实际是Linux内核,当然在shell环境下可以运行linux命令,尤其是经过root处理的android系统,基本上可以通过调用linux命令完全控制手机,下面的RootCmd.java代码就是实现运行linux外部命令。 

 

[java] view
plain
copy

  1. package my.android.code;  
  2.    
  3. import android.os.Environment;  
  4. import dalvik.annotation.Signature;  
  5. import java.io.BufferedReader;  
  6. import java.io.DataInputStream;  
  7. import java.io.DataOutputStream;  
  8. import java.io.File;  
  9. import java.io.FileReader;  
  10. import java.io.InputStream;  
  11. import java.io.OutputStream;  
  12. import java.util.Vector;  
  13.    
  14. public final class RootCmd  
  15. {  
  16.   //执行linux命令并且输出结果  
  17.   protected static Vector execRootCmd(String paramString)  
  18.   {  
  19.     Vector localVector = new Vector();  
  20.     try  
  21.     {  
  22.       Process localProcess = Runtime.getRuntime().exec("su ");//经过Root处理的android系统即有su命令  
  23.       OutputStream localOutputStream = localProcess.getOutputStream();  
  24.       DataOutputStream localDataOutputStream = new DataOutputStream(localOutputStream);  
  25.       InputStream localInputStream = localProcess.getInputStream();  
  26.       DataInputStream localDataInputStream = new DataInputStream(localInputStream);  
  27.       String str1 = String.valueOf(paramString);  
  28.       String str2 = str1 + "\n";  
  29.       localDataOutputStream.writeBytes(str2);  
  30.       localDataOutputStream.flush();  
  31.       String str3 = localDataInputStream.readLine();  
  32.       localVector.add(str3);  
  33.       localDataOutputStream.writeBytes("exit\n");  
  34.       localDataOutputStream.flush();  
  35.       localProcess.waitFor();  
  36.       return localVector;  
  37.     }  
  38.     catch (Exception localException)  
  39.     {  
  40.       localException.printStackTrace();  
  41.     }  
  42.   }  
  43.    
  44.    //执行linux命令但不关注结果输出  
  45.   protected static int execRootCmdSilent(String paramString)  
  46.   {  
  47.     try  
  48.     {  
  49.       Process localProcess = Runtime.getRuntime().exec("su");  
  50.       Object localObject = localProcess.getOutputStream();  
  51.       DataOutputStream localDataOutputStream = new DataOutputStream((OutputStream)localObject);  
  52.       String str = String.valueOf(paramString);  
  53.       localObject = str + "\n";  
  54.       localDataOutputStream.writeBytes((String)localObject);  
  55.       localDataOutputStream.flush();  
  56.       localDataOutputStream.writeBytes("exit\n");  
  57.       localDataOutputStream.flush();  
  58.       localProcess.waitFor();  
  59.       localObject = localProcess.exitValue();  
  60.       return localObject;  
  61.     }  
  62.     catch (Exception localException)  
  63.     {  
  64.       localException.printStackTrace();  
  65.     }  
  66.   }  
  67.    
  68.  //判断机器Android是否已经root,即是否获取root权限  
  69.   protected static boolean haveRoot()  
  70.   {  
  71.   
  72.     int i = execRootCmdSilent("echo test"); //通过执行测试命令来检测  
  73.     if (i != -1)  return true;  
  74.     retrun false;  
  75.   }  
  76.    
  77. }  

抱歉!评论已关闭.