欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2023-12-15 12:22:04
android中执行java命令的方法大家都晓得吗,下面一段内容给大家带来了具体解析。 android的程序基于java开发,当我们接上调试器,执行adb shell...

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 ; 
  } 
 } 
} 

上一篇:

下一篇: