`

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

阅读更多

 

Android运行底层linux外部命令的实现
android的底层实际是Linux内核,当然在shell环境下可以运行linux命令,尤其是经过root处理的android系统,基本上可以通过调用linux命令完全控制手机,下面的RootCmd.java代码就是实现运行linux外部命令。 
 
package my.android.code;
 
import android.os.Environment;
import dalvik.annotation.Signature;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileReader;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Vector;
 
public final class RootCmd
{
  //执行linux命令并且输出结果
  protected static Vector execRootCmd(String paramString)
  {
    Vector localVector = new Vector();
    try
    {
      Process localProcess = Runtime.getRuntime().exec("su ");//经过Root处理的android系统即有su命令
      OutputStream localOutputStream = localProcess.getOutputStream();
      DataOutputStream localDataOutputStream = new DataOutputStream(localOutputStream);
      InputStream localInputStream = localProcess.getInputStream();
      DataInputStream localDataInputStream = new DataInputStream(localInputStream);
      String str1 = String.valueOf(paramString);
      String str2 = str1 + "\n";
      localDataOutputStream.writeBytes(str2);
      localDataOutputStream.flush();
      String str3 = localDataInputStream.readLine();
      localVector.add(str3);
      localDataOutputStream.writeBytes("exit\n");
      localDataOutputStream.flush();
      localProcess.waitFor();
      return localVector;
    }
    catch (Exception localException)
    {
      localException.printStackTrace();
    }
  }
 
   //执行linux命令但不关注结果输出
  protected static int execRootCmdSilent(String paramString)
  {
    try
    {
      Process localProcess = Runtime.getRuntime().exec("su");
      Object localObject = localProcess.getOutputStream();
      DataOutputStream localDataOutputStream = new DataOutputStream((OutputStream)localObject);
      String str = String.valueOf(paramString);
      localObject = str + "\n";
      localDataOutputStream.writeBytes((String)localObject);
      localDataOutputStream.flush();
      localDataOutputStream.writeBytes("exit\n");
      localDataOutputStream.flush();
      localProcess.waitFor();
      localObject = localProcess.exitValue();
      return localObject;
    }
    catch (Exception localException)
    {
      localException.printStackTrace();
    }
  }
 
 //判断机器Android是否已经root,即是否获取root权限
  protected static boolean haveRoot()
  {

    int i = execRootCmdSilent("echo test"); //通过执行测试命令来检测
    if (i != -1)  return true;
    retrun false;
  }
 
}
分享到:
评论

相关推荐

    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 ...

    SerialPort Android串口开发

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

    linux Android基础知识总结.pdf

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

    Android-Terminal-Emulator-源码.rar

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

    新版Android开发教程.rar

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

    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串口程序 含有串口静态库.so文件

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

    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