如何在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~
焦头烂额了····方便的话,加个扣扣,想请教一下,先谢过了!
q:346347769
以上是关于如何在Java代码中调用adb命令的主要内容,如果未能解决你的问题,请参考以下文章