首页 > 后端开发 > 正文

如何通过ADB获取安卓设备中正在运行的程序

2024-03-18 09:13:45 | 我爱编程网

最近经常有小伙伴私信询问如何通过ADB获取安卓设备中正在运行的程序相关的问题,今天,我爱编程网小编整理了以下内容,希望可以对大家有所帮助。

本文目录一览:

如何通过ADB获取安卓设备中正在运行的程序

如何通过ADB获取安卓设备中正在运行的程序

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,不得而知,附上,你试一试,回个话。

如何通过ADB获取安卓设备中正在运行的程序

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

代码如下:

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 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();

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());

}

}

}

如何通过ADB获取安卓设备中正在运行的程序

adb install怎么调用到pm.java

其入口函数源文件为pm.java

(源文件路径:android\frameworks\base\cmds\pm\src\com\android\commands\pm\pm.java)

其中\system\framework\pm.jar 包管理库

包管理脚本 \system\bin\pm 解析

showUsage就是使用方法

private static void showUsage() {

System.err.println("usage: pm [list|path|install|uninstall]");

System.err.println(" pm list packages [-f]");

System.err.println(" pm list permission-groups");

System.err.println(" pm list permissions [-g] [-f] [-d] [-u] [GROUP]");

System.err.println(" pm list instrumentation [-f] [TARGET-PACKAGE]");

System.err.println(" pm list features");

System.err.println(" pm path PACKAGE");

System.err.println(" pm install [-l] [-r] [-t] [-i INSTALLER_PACKAGE_NAME] [-s] [-f] PATH");

System.err.println(" pm uninstall [-k] PACKAGE");

System.err.println(" pm enable PACKAGE_OR_COMPONENT");

System.err.println(" pm disable PACKAGE_OR_COMPONENT");

System.err.println(" pm setInstallLocation [0/auto] [1/internal] [2/external]");

**********************省略**************************

}

以上就是我爱编程网小编整理的内容,想要了解更多相关资讯内容敬请关注我爱编程网。
与“如何通过ADB获取安卓设备中正在运行的程序”相关推荐