首先使用 dumpsys 查看另一个App 的名称
(1)首先启动要查看的程序,到该程序上;
(2)命令行输入:adb shell dumpsys window w |findstr \/ |findstr name=
就能得到类似下面这样的信息
mSurface=Surface(name=com.nvidia.tegrazone3/com.nvidia.tegrazone.MainActivity)
或者输入 adb shell "dumpsys activity | grep Focus"
然后就是在程序中定义
String AppNames = “com.nvidia.tegrazone3/com.nvidia.tegrazone.MainActivity”;
然后用adb 命令(搜 android 通过命令行启动Apk)
adb shell am start -a android.intent.action.MAIN -n com.android.calculator2/com.android.calculator2.Calculator
即可启动
String[] SwitchAppCMD = { "am", "start", "-a",
"android.intent.action.MAIN", "-n", AppNames };
ProcessHelper.Execute(SwitchAppCMD);
在程序中我写了一段封装好的直接用的执行adb命令的函数ProcessHelper.Execute。主要内容是下面这句
public static List Execute(String[] aryCmd, boolean printOutput){
。。。。。
Process proc = Runtime.getRuntime().exec(aryCmd);
}
public class ProcessHelper {
public static List Execute(String[] aryCmd) throws IOException,
InterruptedException {
return Execute(aryCmd, true);
}
public static List Execute(String[] aryCmd, boolean printOutput)
throws IOException, InterruptedException {
List lstResult = new ArrayList();
CommonWriter.WriteLine("Run command: " + Arrays.toString(aryCmd));
Process proc = Runtime.getRuntime().exec(aryCmd);
LineNumberReader lnr = new LineNumberReader(new InputStreamReader(
proc.getInputStream()));
String outputLineine;
// clear input stream before proc.waitFor()
while ((outputLineine = lnr.readLine()) != null) {
if (!Arrays.toString(aryCmd).startsWith("[dumpsys")) {
if (printOutput)
System.out.println(outputLineine);
}
lstResult.add(outputLineine);
}
int exitVal = proc.waitFor();
CommonWriter.WriteLine("Exit value: " + exitVal);
if (printOutput)
System.out.println("===== Output =====");
while ((outputLineine = lnr.readLine()) != null) {
if (!Arrays.toString(aryCmd).startsWith("[dumpsys")) {
if (printOutput)
System.out.println(outputLineine);
}
lstResult.add(outputLineine);
}
if (printOutput)
System.out.println("==================");
lnr.close();
proc.destroy();
proc = null;
return lstResult;
}
public static void ExecuteOnbackground(String[] aryCmd) throws IOException {
CommonWriter.WriteLine("Run command: " + Arrays.toString(aryCmd));
Runtime.getRuntime().exec(aryCmd);
}
public static boolean IsProcessAlive(Process p) {
try {
p.exitValue();
return false;
} catch (IllegalThreadStateException e) {
return true;
}
}
}
如果只有一个的话,貌似要加waitfor
Process proc = Runtime.getRuntime().exec("date");
proc.waitFor();