当前位置: 移动技术网 > 移动技术>移动开发>Android > Android中执行java命令的方法及java代码执行并解析shell命令

Android中执行java命令的方法及java代码执行并解析shell命令

2019年07月24日  | 移动技术网移动技术  | 我要评论

android中执行java命令的方法大家都晓得吗,下面一段内容给大家带来了具体解析。

android的程序基于java开发,当我们接上调试器,执行adb shell,就可以执行linux命令,但是却并不能执行java命令。

那么在android的shell中是否就不能执行java程序了呢。

答案是否定的。我们可以通过app_process来执行java程序。

写一个hello world吧,就是刚开始学java的时候 写得那个hello world,这次要在android上运行。

用记事本新建hello.java文件,编写如下代码:

public static class hello {
  public void main(string args[]){
    system.out.println("hello android");
  }
}

得到hello.class文件 执行"java hello" 可以看到输出结果

那么如何让这个最简单的java程序 在android上运行呢。

.class文件可以在普通的jvm上运行,要放到android下还需要转换成dex,需要用android sdk中的dx工具进行转换

dx --dex --output=hello.dex hello.class

得到hello.dex,这个hello.dex就可以放到android上执行了。

连接手机,打开usb调试

复制代码 代码如下:

adb push hello.dex /sdcard/

adb shell 进入android命令行

使用app_process 运行hello.dex

复制代码 代码如下:

app_process -djava.class.path=/sdcard/hello.dex /sdcard hello

好了,至此我们成功的在android上运行了普通的java程序。

要知道这可是用记事本写的android代码,真是闻所未闻啊!赶快像小伙伴炫耀一下吧。

ps:java代码执行shell命令并解析

在android可能有的系统信息没有直接提供api接口来访问,为了获取系统信息时我们就要在用shell指令来获取信息,这时我们可以在代码中来执行命令 ,这里主要用到processbuilder 这个类.

代码部分  :

package com.yin.system_analysis; 
import java.io.file; 
import java.io.ioexception; 
import java.io.inputstream; 
import android.app.activity; 
import android.os.bundle; 
import android.util.log; 
import android.view.view; 
import android.view.view.onclicklistener; 
import android.widget.button; 
import android.widget.textview; 
public class mainactivity extends activity { 
 private final static string[] args = {"ls","-l"}; 
 private final static string tag = "com.yin.system"; 
 button mbutton; 
 textview mytextview; 
 public void oncreate(bundle savedinstancestate) { 
  super.oncreate(savedinstancestate); 
  setcontentview(r.layout.main); 
  mbutton = (button) findviewbyid(r.id.mybutton); 
  mytextview = (textview) findviewbyid(r.id.textview); 
  mbutton.setonclicklistener(new onclicklistener() { 
   public void onclick(view v) { 
    mytextview.settext(getresult()); 
   } 
  }); 
 } 
 public string getresult(){ 
   shellexecute cmdexe = new shellexecute ( ); 
   string result=""; 
   try { 
   result = cmdexe.execute(args, "/"); 
  } catch (ioexception e) { 
   log.e(tag, "ioexception"); 
   e.printstacktrace(); 
  } 
  return result; 
 } 
 private class shellexecute { 
  /*
   * args[0] : shell 命令 如"ls" 或"ls -1";
   * args[1] : 命令执行路径 如"/" ;
   */ 
  public string execute ( string [] cmmand,string directory) 
  throws ioexception { 
  string result = "" ; 
  try { 
  processbuilder builder = new processbuilder(cmmand); 
  if ( directory != null ) 
  builder.directory ( new file ( directory ) ) ; 
  builder.redirecterrorstream (true) ; 
  process process = builder.start ( ) ; 
  //得到命令执行后的结果 
  inputstream is = process.getinputstream ( ) ; 
  byte[] buffer = new byte[1024] ; 
  while ( is.read(buffer) != -1 ) { 
  result = result + new string (buffer) ; 
  } 
  is.close ( ) ; 
  } catch ( exception e ) { 
   e.printstacktrace ( ) ; 
  } 
  return result ; 
  } 
 } 
} 

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网