Android中執(zhí)行java命令的方法及java代碼執(zhí)行并解析shell命令
android中執(zhí)行java命令的方法大家都曉得嗎,下面一段內(nèi)容給大家?guī)砹司唧w解析。
android的程序基于java開發(fā),當(dāng)我們接上調(diào)試器,執(zhí)行adb shell,就可以執(zhí)行l(wèi)inux命令,但是卻并不能執(zhí)行java命令。
那么在android的shell中是否就不能執(zhí)行java程序了呢。
答案是否定的。我們可以通過app_process來執(zhí)行java程序。
寫一個(gè)hello world吧,就是剛開始學(xué)java的時(shí)候 寫得那個(gè)hello world,這次要在android上運(yùn)行。
用記事本新建hello.java文件,編寫如下代碼:
public static class hello {
public void main(String args[]){
System.out.println("Hello Android");
}
}
得到hello.class文件 執(zhí)行"java hello" 可以看到輸出結(jié)果
那么如何讓這個(gè)最簡單的java程序 在android上運(yùn)行呢。
.class文件可以在普通的jvm上運(yùn)行,要放到android下還需要轉(zhuǎn)換成dex,需要用android sdk中的dx工具進(jìn)行轉(zhuǎn)換
dx --dex --output=hello.dex hello.class
得到hello.dex,這個(gè)hello.dex就可以放到android上執(zhí)行了。
連接手機(jī),打開usb調(diào)試
adb push hello.dex /sdcard/
adb shell 進(jìn)入android命令行
使用app_process 運(yùn)行hello.dex
app_process -Djava.class.path=/sdcard/hello.dex /sdcard hello
好了,至此我們成功的在android上運(yùn)行了普通的java程序。
要知道這可是用記事本寫的android代碼,真是聞所未聞啊!趕快像小伙伴炫耀一下吧。
PS:JAVA代碼執(zhí)行shell命令并解析
在Android可能有的系統(tǒng)信息沒有直接提供API接口來訪問,為了獲取系統(tǒng)信息時(shí)我們就要在用shell指令來獲取信息,這時(shí)我們可以在代碼中來執(zhí)行命令 ,這里主要用到ProcessBuilder 這個(gè)類.
代碼部分 :
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] : 命令執(zhí)行路徑 如"/" ;
*/
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 ( ) ;
//得到命令執(zhí)行后的結(jié)果
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 ;
}
}
}
相關(guān)文章
Android如何實(shí)現(xiàn)藍(lán)牙配對(duì)連接功能
Android 并沒有開放配對(duì)連接耳機(jī)的接口,而且網(wǎng)上大部分資料都是講解如何連接藍(lán)牙4.0的,很少有資料詳細(xì)介紹藍(lán)牙2.0相關(guān)的。期間還是踩了不少坑才摸索出解決辦法。所以把我自己摸索總結(jié)出來的經(jīng)驗(yàn)梳理記錄下,以便備份2021-05-05
Flutter滾動(dòng)組件之ListView使用方法詳解
這篇文章主要為大家詳細(xì)介紹了Flutter滾動(dòng)組件之ListView的使用方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
Android 中RxPermissions 的使用方法詳解
這篇文章主要介紹了Android 中RxPermissions 的使用方法詳解的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下2017-10-10
Android 斷點(diǎn)下載和自動(dòng)安裝的示例代碼
本篇文章主要介紹了Android斷點(diǎn)下載和自動(dòng)安裝的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-01-01
Android應(yīng)用啟動(dòng)另外一個(gè)apk應(yīng)用的方法
這篇文章主要介紹了Android應(yīng)用啟動(dòng)另外一個(gè)apk應(yīng)用的方法,涉及Android基于intent的package調(diào)用與管理技巧,需要的朋友可以參考下2016-02-02
Android設(shè)置個(gè)性化Dialog小圖標(biāo)的方法
這篇文章主要介紹了Android設(shè)置個(gè)性化Dialog小圖標(biāo)的方法,涉及Android針對(duì)系統(tǒng)資源的設(shè)置與調(diào)用相關(guān)操作技巧,需要的朋友可以參考下2016-08-08
Android List(集合)中的對(duì)象以某一個(gè)字段排序案例
這篇文章主要介紹了Android List(集合)中的對(duì)象以某一個(gè)字段排序案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-08-08
Android嵌套滾動(dòng)與協(xié)調(diào)滾動(dòng)的實(shí)現(xiàn)方式匯總
如何實(shí)現(xiàn)這種協(xié)調(diào)滾動(dòng)的布局呢,我們使用CoordinatorLayout+AppBarLayout或者CoordinatorLayout+Behavior實(shí)現(xiàn),另一種方案是MotionLayout,我們看看都是怎么實(shí)現(xiàn)的吧2022-06-06

