ADB 命令

Posted

tags:

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

参考技术A 查询设备
adb devices

查询手机中的用户
adb shell pm list users

查看设备上的应用包名:
adb shell pm list packages
adb shell pm list packages 打印设备/模拟器上的所有软件包
adb shell pm list packages -f 输出包和包相关联的文件
adb shell pm list packages -d 只输出禁用的包。由于本机禁用没有,输出为空。
adb shell pm list packages -e 只输出启用的包。
adb shell pm list packages -s 只输出系统的包。
adb shell pm list packages -3 只输出第三方的包。
adb shell pm list packages -i 只输出包和安装信息(安装来源)。
adb shell pm list packages -u 只输出包和未安装包信息(安装来源)
adb shell pm list packages -u -3 -e 组合使用

查询带有test的包名
adb shell pm list packages | findstr test

查询安装包路径
adb shell pm path [PackageName]

查询包对应的启动activity
adb shell pm query-activities -a android.intent.action.MAIN -c android.intent.category.LAUNCHER [PackageName]

启动应用
adb shell am start -n "[PackageName]/[ActivityName]" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
如:adb shell am start -n "com.example.test/com.example.test.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER

卸载应用
adb shell pm uninstall -k --user 0 [PackageName] -k 表示保存数据 --user 指定用户 id,Android 系统支持多个用户,默认用户只有一个,id=0
如 adb shell pm uninstall com.example.test 对所有用户卸载com.example.test且不保存数据

停用应用
adb shell pm disable [PackageName]

启用应用
adb shell pm enable [PackageName]

清除应用数据
adb shell pm clear [PackageName]

设置应用安装位置
adb shell pm set-install-location
--[0/auto]:默认为自动
--[1/internal]:默认为安装在手机内部
--[2/external]:默认安装在外部存储

获取应用安装位置
adb shell pm get-install-location

查询操作过程中输出的日志
adb logcat > d:\log.txt

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

以上是关于ADB 命令的主要内容,如果未能解决你的问题,请参考以下文章

adb 简介及常用命令

ADB 命令

ADB常用命令大全

Android ADB命令教程二——ADB命令详解

手机不开机怎么用电脑adb命令

Android 常用adb命令