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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在android程序中执行adb shell命令相关的知识,希望对你有一定的参考价值。

步骤1:安装USB驱动下载并安装HTC完整驱动程序(http://shuajidown3.lexun.cn/articile/2013/7/3/HTCDriver3.0.0.021.exe)手机进入设置-应用程序-开发-USB调试,将第一个选项打钩选中。然后通过USB线连接电脑,提示安装驱动。步骤2:软件准备1、把ADB工具http://shuajidown3.lexun.cn/articile/2013/7/3/adb工具.rar

解压放到你的电脑系统盘的根目录下

2、运行中,输入cmd进入命令提示符。以下命令均在命令提示符下进行。开始(点开始 在输入框里输入CMD)

3、 输入cd c:\\adb回车,进入ADB所在目录

 现在就可以进行命令的操作了。    

【常用adb shell命令】 

   1. 显示系统中全部android平台:    android list targets 

   2. 显示系统中全部AVD(模拟器):    android list avd   

   3. 创建AVD(模拟器):    android create avd --name 名称 --target 平台编号

   4. 启动模拟器:    emulator -avd 名称 -sdcard ~/名称.img (-skin 1280x800) 

   5. 删除AVD(模拟器):    android delete avd --name 名称 

   6. 创建SDCard:    mksdcard 1024M ~/名称.img 

   7. AVD(模拟器)所在位置:    Linux(~/.android/avd) Windows(C:\\Documents and Settings\\Administrator\\.android\\avd) 

   8. 启动DDMS:    ddms 

   9. 显示当前运行的全部模拟器:    adb devices 

   10. 对某一模拟器执行命令:    abd -s 模拟器编号 命令 

   11. 安装应用程序:    adb install -r 应用程序.apk 

   12. 获取模拟器中的文件:    adb pull <remote> <local> 

   13. 向模拟器中写文件:    adb push <local> <remote>

   14. 进入模拟器的shell模式:    adb shell 

   15. 启动SDK,文档,实例下载管理器:    android

   16. 卸载apk包:    adb shell    cd data/app    rm apk包    exit    adb uninstall apk包的主包名    adb install -r apk包 

   17. 查看adb命令帮助信息:    adb help 

   18. 在命令行中查看LOG信息:    adb logcat -s 标签名

   19. adb shell后面跟的命令主要来自:    源码\\system\\core\\toolbox目录和源码\\frameworks\\base\\cmds目录。

   20. 删除系统应用:    adb remount (重新挂载系统分区,使系统分区重新可写)。    adb shell    cd system/app    rm *.apk

   21. 获取管理员权限:    adb root 

   22. 启动Activity:    adb shell am start -n 包名/包名+类名(-n 类名,-a action,-d date,-m MIME-TYPE,-c category,-e 扩展数据,等)。

   23、发布端口:    你可以设置任意的端口号,做为主机向模拟器或设备的请求端口。    如:adb forward tcp:5555 tcp:8000 

   24、复制文件:    你可向一个设备或从一个设备中复制文件,    复制一个文件或目录到设备或模拟器上:    adb push <source> <destination></destination></source>    如:adb push test.txt /tmp/test.txt    从设备或模拟器上复制一个文件或目录:    adb pull <source> <destination></destination></source>    如:adb pull /addroid/lib/libwebcore.so 

   25、搜索模拟器/设备的实例:    取得当前运行的模拟器/设备的实例的列表及每个实例的状态:    adb devices 

   26、查看bug报告:    adb bugreport 

   27、记录无线通讯日志:    一般来说,无线通讯的日志非常多,在运行时没必要去记录,但我们还是可以通过命令,设置记录:    adb shell    logcat -b radio

   28、获取设备的ID和序列号:    adb get-product    adb get-serialno  

   29、访问数据库SQLite3    adb shell    sqlite3    #cd system/sd/data //进入系统内指定文件夹    #ls //列表显示当前文件夹内容    #rm -r xxx //删除名字为xxx的文件夹及其里面的所有文件    #rm xxx //删除文件xxx     #rmdir xxx //删除xxx的文件夹

参考技术A

Android中执行adb shell命令的方式如下:

 /**
    * 执行一个shell命令,并返回字符串值
    *
    * @param cmd
    * 命令名称&参数组成的数组(例如:"/system/bin/cat", "/proc/version")
    * @param workdirectory
    * 命令执行路径(例如:"system/bin/")
    * @return 执行结果组成的字符串
    * @throws IOException
    */
    public static synchronized String run(String[] cmd, String workdirectory)
    throws IOException 
    StringBuffer result = new StringBuffer();
    try 
    // 创建操作系统进程(也可以由Runtime.exec()启动)
    // Runtime runtime = Runtime.getRuntime();
    // Process proc = runtime.exec(cmd);
    // InputStream inputstream = proc.getInputStream();
    ProcessBuilder builder = new ProcessBuilder(cmd);
    InputStream in = null;
    // 设置一个路径(绝对路径了就不一定需要)
    if (workdirectory != null) 
    // 设置工作目录(同上)
    builder.directory(new File(workdirectory));
    // 合并标准错误和标准输出
    builder.redirectErrorStream(true);
    // 启动一个新进程
    Process process = builder.start();
    // 读取进程标准输出流
    in = process.getInputStream();
    byte[] re = new byte[1024];
    while (in.read(re) != -1) 
    result = result.append(new String(re));
    
    
    // 关闭输入流
    if (in != null) 
    in.close();
    
     catch (Exception ex) 
    ex.printStackTrace();
    
    return result.toString();
    

  android系统底层采用的是linux,所以adb这样的linux指令是可以在java代码中调用的,可以使用ProcessBuilder 这个方法来执行对应的指令。还可以通过如下方式执行:

Process p = Runtime.getRuntime().exec("ls");
                String data = null;
                BufferedReader ie = new BufferedReader(new InputStreamReader(p.getErrorStream()));
                BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
                String error = null;
                while ((error = ie.readLine()) != null
                       && !error.equals("null")) 
                    data += error + "\\n";
                
                String line = null;
                while ((line = in.readLine()) != null
                       && !line.equals("null")) 
                    data += line + "\\n";
                
 
                Log.v("ls", data);

参考技术B ADB接口的作用主要是让电脑等其它设备控制安卓系统的,所以,称为“中间桥”;
不是为安卓自已用的,自已可直接执行称为SHELL,这与ADB无关。
所以安卓JAVA不一定有封装的ADB类。电脑上有ADB服务程序,端口5037,
它是中间程序,与安卓系统上守护进程(Daemon)通讯。
如果要在自已的手机上应该也能执行adb命令,应该直接跟守护进程
(Daemon)通讯了。百度上可以搜到的方法并不满意。

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

自已用socket/tcp直接发命令效果不知怎样,地址用127.0.0.1, 安卓daemon进程的端口
5555 是奇数开始。
。。。 。至于ADB对话协议百度可以搜到,建议试一试。

楼上其实要的是SHELL,并不是ADB,我搜到一篇文章,但我并没有试过,
是否需要ROOT,不得而知,附上,你试一试 ,回个话。
满意就采纳!
参考技术C 你可以写个apk,apk可以执行部分adb 命令。
代码的实现:例如界面的一个按钮,只需点击该按钮就能执行adb命令,如何在click()里写这些adb命并且在电脑上执行呢?
adb shell
insmod /system/lib/modules/wlan.ko
现在需要在该应用里也达到相同的效果,
但是执行
proc = Runtime.getRuntime().exec(“insmod /system/lib/modules/wlan.ko”);
num = proc.waitFor();
num的返回值是255,意思是没有执行成功。具体你可以参照一些书籍。
参考技术D 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);


本回答被提问者采纳

怎么在Android Studio中执行adb命令

参考技术A android中执行shell命令有两种方式:1.直接在代码中用java提供的Runtime这个类来执行命令,以下为完整示例代码。publicvoidexecCommand(Stringcommand)throwsIOException//startthelscommandrunning//String[]args=newString[]"sh","-c",command;Runtimeruntime=Runtime.getRuntime();Processproc=runtime.exec(command);//这句话就是shell与高级语言间的调用//如果有参数的话可以用另外一个被重载的exec方法//实际上这样执行时启动了一个子进程,它没有父进程的控制台//也就看不到输出,所以需要用输出流来得到shell执行后的输出InputStreaminputstream=proc.getInputStream();InputStreamReaderinputstreamreader=newInputStreamReader(inputstream);BufferedReaderbufferedreader=newBufferedReader(inputstreamreader);//readthelsoutputStringline="";StringBuildersb=newStringBuilder(line);while((line=bufferedreader.readLine())!=null)//System.out.println(line);sb.append(line);sb.append('\n');//tv.setText(sb.toString());//使用exec执行不会等执行成功以后才返回,它会立即返回//所以在某些情况下是很要命的(比如复制文件的时候)//使用wairFor()可以等待命令执行完成以后才返回tryif(proc.waitFor()!=0)System.err.println("exitvalue="+proc.exitValue());catch(InterruptedExceptione)System.err.println(e);2.直接安装shell模拟器,即已经开发好的android应用,启动后类似windows的dos命令行,可以直接安装使用,可执行常用的linux命令,应用在附件。本回答被提问者采纳 参考技术B 在左下角有个terminal命令窗口,打开此窗口就可以执行ADB命令。

以上是关于如何在android程序中执行adb shell命令的主要内容,如果未能解决你的问题,请参考以下文章

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

怎么在Android Studio中执行adb命令

如何使用 adb shell 从 Android 设备中删除内置应用程序

怎么在Android Studio中执行adb命令

Android 代码中执行adb shell命令

如何从 adb shell 运行 Android 相机应用程序?