Android中執行java命令的方法及java代碼執行並解析shell命令_Android

來源:互聯網
上載者:User

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 ;   }  } } 
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.