安卓手机怎么执行Linux脚本

安卓手机怎么执行Linux脚本,第1张

一、Android应用启动服务执行脚本尺首数

1

如何写服务和脚本

在android源码根目录下有/device/tegatech/tegav2/init.rc文件相信大家对这个文件都不陌生(如陵首果不明白就仔细研读下android启动流程)。如果在该脚本文件中添加诸如以下服务:

service

usblp_test

/data/setip/init.usblpmod.sh

oneshot

disabled

注解:每个设备下都会有自己对应的init.rc,init.设备名.rc脚本文件。oneshot

disabled向我们说明了在系统启动的时候这芹世个服务是不会自动启动的。并且该服务的目的是执行/data/setip/init.usblpmod.sh脚本。脚本的内容你可以随便写,只要符合shell语法就可以了,比如脚本可以是简单的设置eth0:

#

!

/system/bin/sh

//脚本的开头必须这样写。

Ifconfig

eth0

172.16.100.206

netmask

255.255.0.0

up//设置ip的命令

首先,关于linux,我们需要知道两个知识点,一个在linux系统下,我们可以将一个文件挂载为一个分区,也就是说如果我有一个磁盘镜像文件,我可以直接挂载为一个linux的分区;这一点与windows的虚拟光驱有点类似,但是在linux下,不仅是光盘镜像文件,所有的镜像文件都可以挂载为一个linux的分区;第二个知识点就是chroot,可能看到这个你就明白了本文讲的方法是如何从安卓设备运行linux系统的,如果还不明白的话,请继续往下看。chroot 就是Change Root,也就是改变程序执行时所参考的根目录位置。有了这两个知识就简单了。

方法:首先启动安卓系统,然后将linux的系统镜像文件挂载为安卓系统的一个分区(所以设备圆族必须支持Loop设备),然后通过chroot命令切换程序执行时所参考的根目录即可。这样我们就可以使用系统镜像文件里的 *** 作系统了。

需要用到的几个软件:BusyBox Pro,Complete Linux Installer(内含终端模拟器 VNC安卓客户端和Linux镜像下载链接),适合于Arm的Ubuntu镜像。这几个软件都可以从Google Play里下载到,其中BusyBox Pro是收费应用,网上应该也有免费的下载,可以搜一下。另外Complete Linux Installer也带有BusyBox如果不想下载那个收费的,用这里带的或许也可以,但是可能会报告一个错误。

软件安卓好之后,将Ubuntu镜像放到SD卡里,最好是Class 10的高速卡,不然可能会稍微卡一点,但是不会非常卡,因为大多数的 *** 作还是依赖于安卓系统构建的系统的了,这跟直接将系统镜像写入SD卡并从SD卡启动不同。这个镜像文件需要放到SD卡的一个文件夹下,注意一定不能使中文。然后打开Complete Linux Installer,里面有一个启动 *** 作系统,右上角会有一个菜单编辑,名称任意,路径当然就要选择我们的镜像所致的路径了,保存并返回。此时点击启动即可启动linux系统。此时会启动终端模拟器,提示几个问题,如果是第一次启动会让设置密码,设置好密码之后,再依次输入y,最好设置分辨率,y,即可。如果启动失败,可以多试几次即可。

之后可以打开VNC客户端,连接127.0.0.1:5900输入刚才设置的用户名密码即可连接登陆。如果显示被拒绝连接,可以检查一下端口号是否正确。检查的方法是到终端模拟器执行 netstat -tlnp 看灶腔旦一下vncserver前面对应的端口号码是多少,再到VNC客户端改为相隐扰应的端口号即可。

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

  }

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8215846.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-14
下一篇2023-04-14

发表评论

登录后才能评论

评论列表(0条)

    保存