如何在APK程序里执行linux命令

如何在APK程序里执行linux命令,第1张

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

  }

}

Linux上的软件少得可怜,要是能够直接运行安卓程序,那将是意见很酷的事情。方法原理:首先这个方法不需要开启安卓虚拟机,是直接在Linux上运行的。 谷歌在很早之前提出了archon的方案,能够直接在PC端运行安卓app,但是并不是很完善,所以不保证所有app可运行,请自测。后来deepin对其进行了加强,在此感谢深度团队。部分为转载内容,再次感谢原作者。理论基于Debian的系统都可以,本人基于Linux mint17.3,其他Linux发行版请自行测试。一、安装运行环境首先要安装chrome浏览器,可到 http://www.google.cn/chrome/browser/desktop/index.html 下载在我提供的资源网址中,选择环境包文件夹安装 archon-integration*.deb 和 deepin-archon*.deb即可二、安装安卓app1.安装打包好的安卓app的deb包直接在我提供的资源网址中,选择Android-apps文件夹下的对应安卓app的安装包即可也可以到网址: http://packages.deepin.com/deepin/pool/non-free/a/ 下载对应的安卓app安装包2.直接运行apka.下载测试的安卓apk程序,请尽量下载Pad版本;b.解压apk程序,终端执行:/usr/lib/node_modules/chromeos-apk/chromeos-apk --archon -t --scale --name "Android App" xxx.apk ##xxx.apk为被解压的apk文件名c.测试运行,终端执行:/lastore/framework/myarchon/archonrun --silent-launch --load-and-launch-app=被解压apk程序的完整路径如果想一部到位,仅仅是测试的,也可以下载环境包中的Android.sh.zip 解压出 Android.sh运行android.sh xx.apk即可看到软件运行情况。

1、在linux中安装virtualbox,然后安装安卓系统,再安装apk2、尝试安装shashlink,这个是安卓的一个模拟库,一般来说,支持x86的安卓的apk才可以运行,只支持arm的不能运行。


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

原文地址: http://outofmemory.cn/yw/7319767.html

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

发表评论

登录后才能评论

评论列表(0条)

保存