你需要在前面加上cmd /c
創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比岳陽網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式岳陽網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋岳陽地區(qū)。費(fèi)用合理售后完善,十余年實(shí)體公司更值得信賴。
即exec中執(zhí)行的命令應(yīng)該是cmd /c adb shell input ...
"cmd.exe /c adb devices"
java的Runtime環(huán)境已經(jīng)是命令行模式,類似已經(jīng)打開cmd.exe 所以,
執(zhí)行后續(xù)命令無需加上 cmd.exe,命令修改為:
Runtime.getRuntime().exec("adb devices")
android中執(zhí)行shell命令有兩種方式: 1.直接在代碼中用java提供的Runtime 這個(gè)類來執(zhí)行命令,以下為完整示例代碼。
代碼如下:
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());
}
}
}
①、重啟
ADB 響應(yīng)失敗,最先想到的就是重啟工具了
不過重啟一般都沒有用,建議跳過該方法哈哈
②、使用 cmd 工具重啟 ADB 進(jìn)程
關(guān)掉所有工具
快捷鍵 Windows + R,輸入 cmd
進(jìn)入 AndroidStudio 的 sdk 工具文件夾?
以我的AndroidStudio安裝在D盤為例
其中,cd 命令為打開某文件夾,這里我們需要打開 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 那么恭喜你,你的問題解決了,啟動(dòng)開發(fā)工具就可以正常使用了
③、關(guān)閉 adb 被占用的進(jìn)程
如果使用第2種方法的時(shí)候,最終顯示 failed to start deamon 那么,你就需要用到本方法了
關(guān)掉所有工具
快捷鍵 Windows + R,輸入 cmd
輸入netstat -aon|findstr “5037”
可以看到進(jìn)程號為9460的進(jìn)程(這個(gè)進(jìn)程號因機(jī)器和時(shí)間而異)在占用5037端口(adb需要使用此端口)
打開任務(wù)管理器,選擇“進(jìn)程”選項(xiàng)卡,點(diǎn)擊選項(xiàng)欄“查看-選擇列…”,勾選“PID(進(jìn)程標(biāo)識符)”,點(diǎn)確定。會(huì)看到每個(gè)進(jìn)程都會(huì)顯示它們的PID了。找到進(jìn)程號為9406的進(jìn)程,結(jié)束這個(gè)進(jìn)程。?
在cmd中,重新 adb start-server,可以看到成功啟動(dòng)
最后啟動(dòng)開發(fā)工具,就可以正常使用了
④、更改 Genymotion 使用的 ADB 路徑
在第3種方法中,我們在任務(wù)管理器里有時(shí)是無法關(guān)閉某進(jìn)程的,它會(huì)不斷自動(dòng)重啟,比較頑固
這就需要放大招了:
打開 Genyotion 模擬器,依次選擇 Settings、ADB?
選中上圖中的 Use Custom Android SDK tools
點(diǎn)擊 Browse 選擇 AndroidStudio 所使用的 SDK 的文件夾
啟動(dòng) Genymotion ,啟動(dòng) AndroidStudio,正常使用
該解決方法對應(yīng)的原因就是,Genymotion 本身有自帶的 adb 工具,啟動(dòng)時(shí)會(huì)打開自帶的 adb。
但是 Genymotion 和 AS 一起使用的時(shí)候,兩者都會(huì)啟動(dòng)一份 adb ,所以這里我們讓兩者都啟動(dòng) AS 的 adb ,問題就解決了!
分享名稱:java代碼執(zhí)行adb java代碼執(zhí)行l(wèi)inux命令
分享地址:http://muchs.cn/article44/docdehe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、定制開發(fā)、網(wǎng)站收錄、服務(wù)器托管、品牌網(wǎng)站設(shè)計(jì)、軟件開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)