`
rocky_lei
  • 浏览: 43020 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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

 
阅读更多

[java] view plaincopy
  1. <span style="text-align: left; "></span><pre name="code" class="plain">android的底层实际是Linux内核,当然在shell环境下可以运行linux命令,尤其是经过root处理的android系统,基本上可以通过调用linux命令完全控制手机,下面的RootCmd.java代码就是实现运行linux外部命令。  
[plain] view plaincopy
[java] view plaincopy
  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. }  

源地址:http://monner.iteye.com/blog/754303
分享到:
评论

相关推荐

    AnLinux-App,anlinux允许您在没有根访问权限的android上运行linux。.zip

    通常,在Android设备上安装和运行Linux需要root权限,因为这涉及到对系统底层的修改。然而,AnLinux-App通过创建一个虚拟化环境来规避这一限制,使得用户能够在Android的用户空间内运行Linux。这种技术被称为“用户...

    Android Linux Device Bus Drivers

    在Android操作系统中,Linux设备驱动程序是连接硬件与操作系统内核的关键组件,它们使得系统能够有效地管理和通信硬件资源。本文将深入探讨“Android Linux Device Bus Drivers”,解析其工作原理、重要性以及如何与...

    将Android平台的RIL层移植到基于LINUX的通用平台的研究与实现

    ### 将Android平台的RIL层移植到基于LINUX的通用平台的研究与实现 #### 1. 课题研究的背景和意义 ##### 1.1 Android RIL简介 Android RIL(Radio Interface Layer)是Android操作系统中一个重要的组成部分,它...

    linux 内核启动过程以及挂载android 根文件系统的过程

    - **system**:Android底层库。 - **out**:编译完成后产生的目录。 #### 目标文件系统的组织结构 在构建过程中,生成的目标文件会被放置在`out`目录下,具体路径为`/out/target/product/generic`。这个目录下的...

    Android-Android串口通讯助手使用C实现

    首先,我们要知道在Android系统中,由于其基于Linux内核,因此我们可以利用Linux的API来实现串口通信。C语言作为底层编程的常用语言,能够直接调用这些API,使得串口通讯更为高效。 1. **JNI接口**: Java Native ...

    linux Android基础知识总结.pdf

    Linux内核是Linux操作系统的核心,负责管理系统资源和提供底层服务。 - **内核结构**:了解内核的基本结构和各个组成部分。 - **内核编译**:学习如何编译定制化的内核。 - **驱动开发**:编写内核模块来支持新的...

    Android-Terminal-Emulator-源码.rar

    Android Terminal Emulator 是一款运行在Android设备上的开源终端模拟器应用,它允许用户在手机或平板电脑上访问Linux命令行环境。源码分析将帮助我们深入理解其工作原理,进一步提升对Android系统和Linux内核的理解...

    SerialPort Android串口开发

    在Android平台上进行串口通信(SerialPort)是嵌入式和物联网...通过以上步骤,你可以成功地在Android应用中集成串口功能,实现与外部硬件设备的数据交互。在开发过程中,不断调试、测试,确保应用的稳定性和可靠性。

    新版Android开发教程.rar

    � 采用了对有限内存、电池和 CPU 优化过的虚拟机 Dalvik , Android 的运行速度比想象的要快很多。 � 运营商(中国移动等)的大力支持,产业链条的热捧。 � 良好的盈利模式( 3/7 开),产业链条的各方:运营商、...

    android串口程序 含有串口静态库.so文件

    在Android平台上,开发串口通信程序通常涉及到与硬件底层的交互,这需要用到特定的库来实现。本项目“android串口程序 含有串口静态库.so文件”提供了一个这样的解决方案,它包含了能够运行在手机设备上的串口通信...

    android动态修改设备节点demo

    Android系统从6.0版本开始引入了运行时权限模型,对于一些敏感权限(如写入外部存储),应用需要在运行时请求用户同意。在root环境中,这部分限制可能会被绕过,但这并不意味着应该忽视这些权限管理。 总的来说,...

    linux下opengl编写的简单魔方游戏

    在Linux环境下,OpenGL是一种强大的图形库,用于创建2D和3D图形应用程序。在这个场景中,我们讨论的是一个使用C语言...通过实现这个项目,开发者可以深入理解图形学的基本原理,并提升在Linux环境下开发3D应用的能力。

    Android4.0下使用framebuffer抓屏并保存成bmp文件

    总的来说,通过framebuffer抓屏在Android 4.0上实现屏幕截图是一个涉及Linux底层操作和图像处理的复杂任务,需要对Android系统和Linux内核有深入的理解。然而,一旦掌握这一技术,你就可以在没有系统API支持的情况下...

    android下sd卡文件识别

    使用`df`命令(需在具有root权限的环境中)可以获取文件系统的详细信息,但这超出了常规Android API的能力范围,可能需要借助第三方库或自定义Linux命令执行器。 7. **异常处理**: 在实际操作中,要考虑文件权限...

    Android usb 触摸屏驱动

    在Android系统中,USB触摸屏驱动是连接外部触摸设备与操作系统之间的重要桥梁,它使得用户可以通过触摸屏与设备进行交互。本主题将深入探讨USB触摸屏驱动的工作原理、支持的屏幕类型以及在Android和Linux环境下的...

    [Hasen图示系列]android中vold机制

    Vold机制的实现涉及到Android系统底层架构的多个方面,包括内核、用户空间进程和应用层之间的通信。Vold作为一个守护进程,需要高效稳定地运行,确保外部存储设备的正确管理,以及用户数据的安全和完整性。在Android...

    Android 串口 JNI 代码

    在Android开发中,JNI(Java Native Interface)是一种技术,它允许Java代码和其他语言写的代码进行...通过创建本地方法并在C/C++层面处理串口操作,开发者可以绕过Android SDK的限制,实现更高效、更底层的串口通信。

    android 教程

    应用文件对生成的用户私有,其他应用无法直接访问,这在底层Linux系统的支持下实现了应用之间的隔离。 - **权限模型**:在Android中,应用必须在安装时声明所需权限,如访问网络、读写外部存储等。如果需要共享数据...

    android串口全源码

    这个库使得开发者能够实现与外部设备的低级别通信,而无需深入了解底层硬件细节。 首先,我们要理解串口通信的基本概念。串口,也称为串行通信接口,是一种通过串行数据传输的通信协议。它将数据一位一位地传输,相...

    Android技术面试资料整理

    - **Linux进程**:Android运行在Linux内核之上,每个应用程序都运行在一个独立的Linux进程中。 - **应用程序进程**:指运行在DVM之上的应用程序进程,每个应用程序运行在自己的进程中。 #### 30. SIM卡的EF文件 - ...

Global site tag (gtag.js) - Google Analytics