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

 我来答
雨过天晴日丶
2016-04-06 · TA获得超过2636个赞
知道大有可为答主
回答量:1879
采纳率:91%
帮助的人:1673万
展开全部

在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>

效果图:

育知同创教育
2016-03-13 · 百度知道合伙人官方认证企业
育知同创教育
1【专注:Python+人工智能|Java大数据|HTML5培训】 2【免费提供名师直播课堂、公开课及视频教程】 3【地址:北京市昌平区三旗百汇物美大卖场2层,微信公众号:yuzhitc】
向TA提问
展开全部
ADB接口的作用主要是让电脑等其它设备控制安卓系统的,所以,称为“中间桥”;
不是为安卓自已用的,自已可直接执行称为SHELL,这与ADB无关。
所以安卓JAVA不一定有封装的ADB类。电脑上有ADB服务程序,端口5037,
它是中间程序,与安卓系统上守护进程(Daemon)通讯。
如果要在自已的手机上应该也能执行adb命令,应该直接跟守护进程
(Daemon)通讯了。百度上可以搜到的方法并不满意。

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

自已用socket/tcp直接发命令效果不知怎样,地址用127.0.0.1, 安卓daemon进程的端口
5555 是奇数开始。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
千锋教育
2016-03-25 · 做真实的自己 用良心做教育
千锋教育
千锋教育专注HTML5大前端、JavaEE、Python、人工智能、UI&UE、云计算、全栈软件测试、大数据、物联网+嵌入式、Unity游戏开发、网络安全、互联网营销、Go语言等培训教育。
向TA提问
展开全部
首先确认已经配置好adb环境,检测方法为输入adb devices,如果提示不识别adb命令时需要安装好adb配置环境后,
1. adb配置好以后,执行adb root
2. (如果要对内部文件执行操作,需要在这里加一个步骤: adb amount )
3. 然后即可执行adb shell
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式