如何在android程序中执行adb shell命令

如题所述

在android程序中执行adb shell命令:

package net.gimite.nativeexe;  
     
import java.io.BufferedReader;  
import java.io.FileOutputStream;  
import java.io.IOException;  
import java.io.InputStream;  
import java.io.InputStreamReader;  
import java.net.HttpURLConnection;  
import java.net.MalformedURLException;  
import java.net.URL;  
     
import net.gimite.nativeexe.R;  
import android.app.Activity;  
import android.os.Bundle;  
import android.os.Handler;  
import android.view.View;  
import android.view.View.OnClickListener;  
import android.widget.*;  
     
public class MainActivity extends Activity {  
     
   private TextView outputView;  
   private Button localRunButton;  
   private EditText localPathEdit;  
   private Handler handler = new Handler();  
   private EditText urlEdit;  
   private Button remoteRunButton;  
     
   /** Called when the activity is first created. */
   @Override
   public void onCreate(Bundle savedInstanceState) {  
       super.onCreate(savedInstanceState);  
       setContentView(R.layout.main);  
     
       outputView = (TextView)findViewById(R.id.outputView);  
       localPathEdit = (EditText)findViewById(R.id.localPathEdit);  
       localRunButton = (Button)findViewById(R.id.localRunButton);  
       localRunButton.setOnClickListener(onLocalRunButtonClick);  
     
     
   }  
     
   private OnClickListener onLocalRunButtonClick = new OnClickListener() {  
       public void onClick(View v) {  
           String output = exec(localPathEdit.getText().toString());  
           output(output);  
//            try {  
//  
//               // Process process = Runtime.getRuntime().exec(localPathEdit.getText().toString());  
//  
//            } catch (IOException e) {  
//                // TODO Auto-generated catch block  
//                e.printStackTrace();  
//            }  
       }  
   };  
     
     
   // Executes UNIX command.  
   private String exec(String command) {  
       try {  
           Process process = Runtime.getRuntime().exec(command);  
           BufferedReader reader = new BufferedReader(  
                   new InputStreamReader(process.getInputStream()));  
           int read;  
           char[] buffer = new char[4096];  
           StringBuffer output = new StringBuffer();  
           while ((read = reader.read(buffer)) > 0) {  
               output.append(buffer, 0, read);  
           }  
           reader.close();  
           process.waitFor();  
           return output.toString();  
       } catch (IOException e) {  
           throw new RuntimeException(e);  
       } catch (InterruptedException e) {  
           throw new RuntimeException(e);  
       }  
   }  
     
   private void download(String urlStr, String localPath) {  
       try {  
           URL url = new URL(urlStr);  
           HttpURLConnection urlconn = (HttpURLConnection)url.openConnection();  
           urlconn.setRequestMethod("GET");  
           urlconn.setInstanceFollowRedirects(true);  
           urlconn.connect();  
           InputStream in = urlconn.getInputStream();  
           FileOutputStream out = new FileOutputStream(localPath);  
           int read;  
           byte[] buffer = new byte[4096];  
           while ((read = in.read(buffer)) > 0) {  
               out.write(buffer, 0, read);  
           }  
           out.close();  
           in.close();  
           urlconn.disconnect();  
       } catch (MalformedURLException e) {  
           throw new RuntimeException(e);  
       } catch (IOException e) {  
           throw new RuntimeException(e);  
       }  
   }  
     
   private void output(final String str) {  
       Runnable proc = new Runnable() {  
           public void run() {  
               outputView.setText(str);  
           }  
       };  
       handler.post(proc);  
   }  
     
}

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

效果图:

温馨提示:内容为网友见解,仅供参考
第1个回答  2016-03-13
ADB接口的作用主要是让电脑等其它设备控制安卓系统的,所以,称为“中间桥”;
不是为安卓自已用的,自已可直接执行称为SHELL,这与ADB无关。
所以安卓JAVA不一定有封装的ADB类。电脑上有ADB服务程序,端口5037,
它是中间程序,与安卓系统上守护进程(Daemon)通讯。
如果要在自已的手机上应该也能执行adb命令,应该直接跟守护进程
(Daemon)通讯了。百度上可以搜到的方法并不满意。

楼主用exec执行CMD命令,这已不是ADB接口了,这是系统的SHELL了!!!

自已用socket/tcp直接发命令效果不知怎样,地址用127.0.0.1, 安卓daemon进程的端口
5555 是奇数开始。本回答被提问者采纳
第2个回答  2016-03-25
首先确认已经配置好adb环境,检测方法为输入adb devices,如果提示不识别adb命令时需要安装好adb配置环境后,
1. adb配置好以后,执行adb root
2. (如果要对内部文件执行操作,需要在这里加一个步骤: adb amount )
3. 然后即可执行adb shell
相似回答