真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

java代碼使用adb,編寫java代碼

用Java調(diào)用adb出現(xiàn)問(wèn)題

①、重啟

網(wǎng)站的建設(shè)創(chuàng)新互聯(lián)專注網(wǎng)站定制,經(jīng)驗(yàn)豐富,不做模板,主營(yíng)網(wǎng)站定制開(kāi)發(fā).小程序定制開(kāi)發(fā),H5頁(yè)面制作!給你煥然一新的設(shè)計(jì)體驗(yàn)!已為成都發(fā)電機(jī)租賃等企業(yè)提供專業(yè)服務(wù)。

ADB 響應(yīng)失敗,最先想到的就是重啟工具了

不過(guò)重啟一般都沒(méi)有用,建議跳過(guò)該方法哈哈

②、使用 cmd 工具重啟 ADB 進(jìn)程

關(guān)掉所有工具

快捷鍵 Windows + R,輸入 cmd

進(jìn)入 AndroidStudio 的 sdk 工具文件夾?

以我的AndroidStudio安裝在D盤為例

其中,cd 命令為打開(kāi)某文件夾,這里我們需要打開(kāi) sdk 中的 platform-tools 文件夾

殺死并啟動(dòng) adb 進(jìn)程

其中 adb kill-server 為殺死 adb 進(jìn)程?

adb start-server 為啟動(dòng) adb 進(jìn)程

若顯示 上圖中的 daemon started successfully 那么恭喜你,你的問(wèn)題解決了,啟動(dòng)開(kāi)發(fā)工具就可以正常使用了

③、關(guān)閉 adb 被占用的進(jìn)程

如果使用第2種方法的時(shí)候,最終顯示 failed to start deamon 那么,你就需要用到本方法了

關(guān)掉所有工具

快捷鍵 Windows + R,輸入 cmd

輸入netstat -aon|findstr “5037”

可以看到進(jìn)程號(hào)為9460的進(jìn)程(這個(gè)進(jìn)程號(hào)因機(jī)器和時(shí)間而異)在占用5037端口(adb需要使用此端口)

打開(kāi)任務(wù)管理器,選擇“進(jìn)程”選項(xiàng)卡,點(diǎn)擊選項(xiàng)欄“查看-選擇列…”,勾選“PID(進(jìn)程標(biāo)識(shí)符)”,點(diǎn)確定。會(huì)看到每個(gè)進(jìn)程都會(huì)顯示它們的PID了。找到進(jìn)程號(hào)為9406的進(jìn)程,結(jié)束這個(gè)進(jìn)程。?

在cmd中,重新 adb start-server,可以看到成功啟動(dòng)

最后啟動(dòng)開(kāi)發(fā)工具,就可以正常使用了

④、更改 Genymotion 使用的 ADB 路徑

在第3種方法中,我們?cè)谌蝿?wù)管理器里有時(shí)是無(wú)法關(guān)閉某進(jìn)程的,它會(huì)不斷自動(dòng)重啟,比較頑固

這就需要放大招了:

打開(kāi) Genyotion 模擬器,依次選擇 Settings、ADB?

選中上圖中的 Use Custom Android SDK tools

點(diǎn)擊 Browse 選擇 AndroidStudio 所使用的 SDK 的文件夾

啟動(dòng) Genymotion ,啟動(dòng) AndroidStudio,正常使用

該解決方法對(duì)應(yīng)的原因就是,Genymotion 本身有自帶的 adb 工具,啟動(dòng)時(shí)會(huì)打開(kāi)自帶的 adb。

但是 Genymotion 和 AS 一起使用的時(shí)候,兩者都會(huì)啟動(dòng)一份 adb ,所以這里我們讓兩者都啟動(dòng) AS 的 adb ,問(wèn)題就解決了!

如何在Java代碼中調(diào)用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 ListString 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 ArrayListString();

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

}

}

}

用Java調(diào)用adb,不出來(lái)是為什么

你需要在前面加上cmd /c

即exec中執(zhí)行的命令應(yīng)該是cmd /c adb shell input ...

如何在android程序中執(zhí)行adb shell命令

Android中執(zhí)行adb shell命令的方式如下:pre t="code" l="java" /**

* 執(zhí)行一個(gè)shell命令,并返回字符串值

*

* @param cmd

* 命令名稱參數(shù)組成的數(shù)組(例如:{"/system/bin/cat", "/proc/version"})

* @param workdirectory

* 命令執(zhí)行路徑(例如:"system/bin/")

* @return 執(zhí)行結(jié)果組成的字符串

* @throws IOException

*/

public static synchronized String run(String[] cmd, String workdirectory)

throws IOException {

StringBuffer result = new StringBuffer();

try {

// 創(chuàng)建操作系統(tǒng)進(jìn)程(也可以由Runtime.exec()啟動(dòng))

// Runtime runtime = Runtime.getRuntime();

// Process proc = runtime.exec(cmd);

// InputStream inputstream = proc.getInputStream();

ProcessBuilder builder = new ProcessBuilder(cmd);

InputStream in = null;

// 設(shè)置一個(gè)路徑(絕對(duì)路徑了就不一定需要)

if (workdirectory != null) {

// 設(shè)置工作目錄(同上)

builder.directory(new File(workdirectory));

// 合并標(biāo)準(zhǔn)錯(cuò)誤和標(biāo)準(zhǔn)輸出

builder.redirectErrorStream(true);

// 啟動(dòng)一個(gè)新進(jìn)程

Process process = builder.start();

// 讀取進(jìn)程標(biāo)準(zhǔn)輸出流

in = process.getInputStream();

byte[] re = new byte[1024];

while (in.read(re) != -1) {

result = result.append(new String(re));

}

}

// 關(guān)閉輸入流

if (in != null) {

in.close();

}

} catch (Exception ex) {

ex.printStackTrace();

}

return result.toString();

} android系統(tǒng)底層采用的是linux,所以adb這樣的linux指令是可以在java代碼中調(diào)用的,可以使用ProcessBuilder 這個(gè)方法來(lái)執(zhí)行對(duì)應(yīng)的指令。還可以通過(guò)如下方式執(zhí)行:

pre t="code" l="java"Process p = Runtime.getRuntime().exec("ls");

String data = null;

BufferedReader ie = new BufferedReader(new InputStreamReader(p.getErrorStream()));

BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));

String error = null;

while ((error = ie.readLine()) != null

!error.equals("null")) {

data += error + "\n";

}

String line = null;

while ((line = in.readLine()) != null

!line.equals("null")) {

data += line + "\n";

}

Log.v("ls", data);

java通過(guò)exec條用cmd執(zhí)行adb無(wú)效

"cmd.exe /c adb devices"

java的Runtime環(huán)境已經(jīng)是命令行模式,類似已經(jīng)打開(kāi)cmd.exe 所以,

執(zhí)行后續(xù)命令無(wú)需加上 cmd.exe,命令修改為:

Runtime.getRuntime().exec("adb devices")


新聞名稱:java代碼使用adb,編寫java代碼
網(wǎng)址分享:http://weahome.cn/article/hcgdih.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部