如何在Java代码中调用adb命令

Posted

tags:

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

我想在Java代码中调用adb命令。
通过代码实现apk文件的安装和卸载,重定向logcat等。
O(∩_∩)O谢谢,急需,等待中。。。。

代码如下:

package com.symbio.ltp.adb;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.List;

import com.symbio.ltp.model.ConfigPropertiesData;
import com.symbio.ltp.util.Log;

public class ShellCommand
private String name;
private Process process;
private BufferedWriter writer;
private BufferedReader reader;
private BufferedReader errorReader;
private List<String> list;
private String[] returnValue;

public ShellCommand(String name)
this.name = name;


public String getName()
return name;


public Process getProcess()
return process;


public BufferedWriter getOutputWriter()
return writer;


public BufferedReader getInputReader()
return reader;


public BufferedReader getErrorReader()
return errorReader;


public boolean start(String cmd)
try
process = Runtime.getRuntime().exec(cmd);
writer = new BufferedWriter(new OutputStreamWriter(process.getOutputStream()));
reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
errorReader = new BufferedReader(new InputStreamReader(process.getErrorStream()));
catch (IOException e)
Log.debug("Exception in shell(" + name + ") -- " + e.getMessage());
return false;

return true;


public boolean exec(String cmd)
String line;

try
writer.write(cmd + "\\n");
writer.flush();

while((line = reader.readLine()) != null)
Log.debug(line);
if(line.equals(ConfigPropertiesData.ltp_success))
return true;
else if(line.equals(ConfigPropertiesData.ltp_fail))
return false;


catch (IOException e)
Log.debug("Exception in shell(" + name + ") -- " + e.getMessage());
return false;

return true;


public String [] execReturn(String cmd)
String line;
list = new ArrayList<String>();
try
writer.write(cmd + "\\n");
writer.flush();
line = reader.readLine();
while((line = reader.readLine()) != null)
if(line.length()>0 && !(line.startsWith("#")))
Log.debug(line);
list.add(line);
if(line.equals(ConfigPropertiesData.ltp_success))
break;
else if(line.equals(ConfigPropertiesData.ltp_fail))
break;




int size = list.size();
returnValue = new String[size];
for (int i = 0; i < size; i++)
returnValue[i] = list.get(i);

catch (IOException e)
Log.debug("Exception in shell(" + name + ") -- " + e.getMessage());
return null;

return returnValue;

public void terminate()
try
writer.write(0x03);
writer.flush();
catch (IOException e)
Log.debug("Exception in shell(" + name + ") -- " + e.getMessage());


参考技术A 安装:
String str = "/aaa.apk";
String fileName = Environment.getExternalStorageDirectory() + str;
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File(fileName)), "application/vnd.android.package-archive");
startActivity(intent);
卸载:
Uri packageURI = Uri.parse("package:com.demo.ss");
Intent uninstallIntent = new Intent(Intent.ACTION_DELETE, packageURI);
startActivity(uninstallIntent);

不需要用到adb命令的呀追问

我用Runtime实现了安装和卸载。
你上面用Intent,是不是把apk文件放到了sd卡上?
PC端软件设置一个TextArea控件,如何获取apk文件执行时的日志呢?

追答

文件下载肯定都是在SD卡上啊,显示log的话你可以参考下文
http://www.blogjava.net/andteamroid/archive/2011/03/09/346020.html

追问

嗯,谢谢你的回答。。。
我是想将日志传递到PC端软件的一个TextArea控件里。。。
请继续解答。。。
O(∩_∩)O~

参考技术B 你好!你这个问题解决了吗? 我现在也遇到了同样的问题!
焦头烂额了····方便的话,加个扣扣,想请教一下,先谢过了!
q:346347769

以上是关于如何在Java代码中调用adb命令的主要内容,如果未能解决你的问题,请参考以下文章

怎么在Android Studio中执行adb命令

通过adb命令在Android设备中执行Java命令, 并调用so文件。

如何在android中使用adb恢复出厂设置? [关闭]

mac java执行adb devices命令

java怎样调用maven打包命令

adb如何使用?