如何在android应用里执行adb 命令 如何在android应用里执行adb命令?

\u5982\u4f55\u5728android\u7a0b\u5e8f\u4e2d\u6267\u884cadb shell\u547d\u4ee4

\u4e00\u3001\u65b9\u6cd5

\u4ee3\u7801\u5982\u4e0b:

/**
* \u6267\u884c\u4e00\u4e2ashell\u547d\u4ee4\uff0c\u5e76\u8fd4\u56de\u5b57\u7b26\u4e32\u503c
*
* @param cmd
* \u547d\u4ee4\u540d\u79f0&\u53c2\u6570\u7ec4\u6210\u7684\u6570\u7ec4\uff08\u4f8b\u5982\uff1a{"/system/bin/cat", "/proc/version"}\uff09
* @param workdirectory
* \u547d\u4ee4\u6267\u884c\u8def\u5f84\uff08\u4f8b\u5982\uff1a"system/bin/"\uff09
* @return \u6267\u884c\u7ed3\u679c\u7ec4\u6210\u7684\u5b57\u7b26\u4e32
* @throws IOException
*/
public static synchronized String run(String[] cmd, String workdirectory)
throws IOException {
StringBuffer result = new StringBuffer();
try {
// \u521b\u5efa\u64cd\u4f5c\u7cfb\u7edf\u8fdb\u7a0b\uff08\u4e5f\u53ef\u4ee5\u7531Runtime.exec()\u542f\u52a8\uff09
// Runtime runtime = Runtime.getRuntime();
// Process proc = runtime.exec(cmd);
// InputStream inputstream = proc.getInputStream();
ProcessBuilder builder = new ProcessBuilder(cmd);
InputStream in = null;
// \u8bbe\u7f6e\u4e00\u4e2a\u8def\u5f84\uff08\u7edd\u5bf9\u8def\u5f84\u4e86\u5c31\u4e0d\u4e00\u5b9a\u9700\u8981\uff09
if (workdirectory != null) {
// \u8bbe\u7f6e\u5de5\u4f5c\u76ee\u5f55\uff08\u540c\u4e0a\uff09
builder.directory(new File(workdirectory));
// \u5408\u5e76\u6807\u51c6\u9519\u8bef\u548c\u6807\u51c6\u8f93\u51fa
builder.redirectErrorStream(true);
// \u542f\u52a8\u4e00\u4e2a\u65b0\u8fdb\u7a0b
Process process = builder.start();
// \u8bfb\u53d6\u8fdb\u7a0b\u6807\u51c6\u8f93\u51fa\u6d41
in = process.getInputStream();
byte[] re = new byte[1024];
while (in.read(re) != -1) {
result = result.append(new String(re));
}
}
// \u5173\u95ed\u8f93\u5165\u6d41
if (in != null) {
in.close();
}
} catch (Exception ex) {
ex.printStackTrace();
}
return result.toString();
}


\u4e8c\u3001\u7528\u9014
\u6267\u884cLinux\u4e0b\u7684top\u3001ps\u7b49\u547d\u4ee4\uff0c\u8fd9\u4e9b\u547d\u4ee4\u4f60\u4e5f\u901a\u8fc7adb\u53ef\u4ee5\u6267\u884c\u67e5\u770b\u6548\u679c\u3002
1\uff09top\u547d\u4ee4\u5982\u4e0b\uff1a

\u590d\u5236\u4ee3\u7801 \u4ee3\u7801\u5982\u4e0b:

adb shell
$ top -h
top -h
Usage: top [-m max_procs] [-n iterations] [-d delay] [-s sort_column] [-t] [-h]
-m num Maximum number of processes to display. // \u6700\u591a\u663e\u793a\u591a\u5c11\u4e2a\u8fdb\u7a0b
-n num Updates to show before exiting. // \u5237\u65b0\u6b21\u6570
-d num Seconds to wait between updates. // \u5237\u65b0\u95f4\u9694\u65f6\u95f4\uff08\u9ed8\u8ba45\u79d2\uff09
-s col Column to sort by // \u6309\u54ea\u5217\u6392\u5e8f
-t Show threads instead of processes. // \u663e\u793a\u7ebf\u7a0b\u4fe1\u606f\u800c\u4e0d\u662f\u8fdb\u7a0b
-h Display this help screen. // \u663e\u793a\u5e2e\u52a9\u6587\u6863
$ top -n 1
top -n 1


\u5c31\u4e0d\u628a\u6267\u884c\u6548\u679c\u653e\u4e0a\u6765\u4e86\uff0c\u603b\u4e4b\u7ed3\u679c\u8868\u8ff0\u5982\u4e0b\uff1a

\u4ee3\u7801\u5982\u4e0b:

User 35%, System 13%, IOW 0%, IRQ 0% // CPU\u5360\u7528\u7387
User 109 + Nice 0 + Sys 40 + Idle 156 + IOW 0 + IRQ 0 + SIRQ 1 = 306 // CPU\u4f7f\u7528\u60c5\u51b5
PID CPU% S #THR VSS RSS PCY UID Name // \u8fdb\u7a0b\u5c5e\u6027
xx xx% x xx xx xx xx xx xx
CPU\u5360\u7528\u7387\uff1a
User \u7528\u6237\u8fdb\u7a0b
System \u7cfb\u7edf\u8fdb\u7a0b
IOW IO\u7b49\u5f85\u65f6\u95f4
IRQ \u786c\u4e2d\u65ad\u65f6\u95f4
CPU\u4f7f\u7528\u60c5\u51b5\uff08\u6307\u4e00\u4e2a\u6700\u5c0f\u65f6\u95f4\u7247\u5185\u6240\u5360\u65f6\u95f4\uff0c\u5355\u4f4djiffies\u3002\u6216\u8005\u6307\u6240\u5360\u8fdb\u7a0b\u6570\uff09\uff1a
User \u5904\u4e8e\u7528\u6237\u6001\u7684\u8fd0\u884c\u65f6\u95f4\uff0c\u4e0d\u5305\u542b\u4f18\u5148\u503c\u4e3a\u8d1f\u8fdb\u7a0b
Nice \u4f18\u5148\u503c\u4e3a\u8d1f\u7684\u8fdb\u7a0b\u6240\u5360\u7528\u7684CPU\u65f6\u95f4
Sys \u5904\u4e8e\u6838\u5fc3\u6001\u7684\u8fd0\u884c\u65f6\u95f4
Idle \u9664IO\u7b49\u5f85\u65f6\u95f4\u4ee5\u5916\u7684\u5176\u5b83\u7b49\u5f85\u65f6\u95f4
IOW IO\u7b49\u5f85\u65f6\u95f4
IRQ \u786c\u4e2d\u65ad\u65f6\u95f4
SIRQ \u8f6f\u4e2d\u65ad\u65f6\u95f4
\u8fdb\u7a0b\u5c5e\u6027\uff1a
PID \u8fdb\u7a0b\u5728\u7cfb\u7edf\u4e2d\u7684ID
CPU% \u5f53\u524d\u77ac\u65f6\u6240\u4ee5\u4f7f\u7528CPU\u5360\u7528\u7387
S \u8fdb\u7a0b\u7684\u72b6\u6001\uff0c\u5176\u4e2dS\u8868\u793a\u4f11\u7720\uff0cR\u8868\u793a\u6b63\u5728\u8fd0\u884c\uff0cZ\u8868\u793a\u50f5\u6b7b\u72b6\u6001\uff0cN\u8868\u793a\u8be5\u8fdb\u7a0b\u4f18\u5148\u503c\u662f\u8d1f\u6570\u3002
#THR \u7a0b\u5e8f\u5f53\u524d\u6240\u7528\u7684\u7ebf\u7a0b\u6570
VSS Virtual Set Size \u865a\u62df\u8017\u7528\u5185\u5b58\uff08\u5305\u542b\u5171\u4eab\u5e93\u5360\u7528\u7684\u5185\u5b58\uff09
RSS Resident Set Size \u5b9e\u9645\u4f7f\u7528\u7269\u7406\u5185\u5b58\uff08\u5305\u542b\u5171\u4eab\u5e93\u5360\u7528\u7684\u5185\u5b58\uff09
PCY OOXX\uff0c\u4e0d\u77e5\u9053\u4ec0\u4e48\u4e1c\u4e1c
UID \u8fd0\u884c\u5f53\u524d\u8fdb\u7a0b\u7684\u7528\u6237id
Name \u7a0b\u5e8f\u540d\u79f0android.process.media
// ps\uff1a\u5185\u5b58\u5360\u7528\u5927\u5c0f\u6709\u5982\u4e0b\u89c4\u5f8b\uff1aVSS >= RSS >= PSS >= USS
// PSS Proportional Set Size \u5b9e\u9645\u4f7f\u7528\u7684\u7269\u7406\u5185\u5b58\uff08\u6bd4\u4f8b\u5206\u914d\u5171\u4eab\u5e93\u5360\u7528\u7684\u5185\u5b58\uff09
// USS Unique Set Size \u8fdb\u7a0b\u72ec\u81ea\u5360\u7528\u7684\u7269\u7406\u5185\u5b58\uff08\u4e0d\u5305\u542b\u5171\u4eab\u5e93\u5360\u7528\u7684\u5185\u5b58\uff09


\u5728\u9644\u4ef6Android\u7cfb\u7edf->android top.txt\u6587\u4ef6\u5185\uff0c\u81ea\u4e2a\u603b\u7ed3\u7684\u3002
2\uff09\u6267\u884c\u4ee3\u7801

\u4ee3\u7801\u5982\u4e0b:

// top\u547d\u4ee4
public static final String[] TOP = { "/system/bin/top", "-n", "1" };
// \u73b0\u5728\u6267\u884ctop -n 1\uff0c\u6211\u4eec\u53ea\u9700\u8981\u7b2c\u4e8c\u884c\uff08\u7528\u7b2c\u4e8c\u884c\u6c42\u5f97CPU\u5360\u7528\u7387\uff0c\u7cbe\u786e\u6570\u636e\uff09
// \u7b2c\u4e00\u884c\uff1aUser 35%, System 13%, IOW 0%, IRQ 0% // CPU\u5360\u7528\u7387
// \u7b2c\u4e8c\u884c\uff1aUser 109 + Nice 0 + Sys 40 + Idle 156 + IOW 0 + IRQ 0 + SIRQ 1 = 306
// // CPU\u4f7f\u7528\u60c5\u51b5
public static synchronized String run(String[] cmd) {
String line = "";
InputStream is = null;
try {
Runtime runtime = Runtime.getRuntime();
Process proc = runtime.exec(cmd);
is = proc.getInputStream();
// \u6362\u6210BufferedReader
BufferedReader buf = new BufferedReader(new InputStreamReader(is));
do {
line = buf.readLine();
// \u524d\u9762\u6709\u51e0\u4e2a\u7a7a\u884c
if (line.startsWith("User")) {
// \u8bfb\u5230\u7b2c\u4e00\u884c\u65f6\uff0c\u6211\u4eec\u518d\u8bfb\u53d6\u4e0b\u4e00\u884c
line = buf.readLine();
break;
}
} while (true);
if (is != null) {
buf.close();
is.close();
}
} catch (IOException e) {
e.printStackTrace();
}
return line;
}
// \u83b7\u53d6\u6307\u5b9a\u5e94\u7528\u7684top\u547d\u4ee4\u83b7\u53d6\u7684\u4fe1\u606f
// PID CPU% S #THR VSS RSS PCY UID Name // \u8fdb\u7a0b\u5c5e\u6027
// \u5982\u679c\u5f53\u524d\u5e94\u7528\u4e0d\u5728\u8fd0\u884c\u5219\u8fd4\u56denull
public static synchronized String run(String[] cmd, String pkgName) {
String line = null;
InputStream is = null;
try {
Runtime runtime = Runtime.getRuntime();
Process proc = runtime.exec(cmd);
is = proc.getInputStream();
// \u6362\u6210BufferedReader
BufferedReader buf = new BufferedReader(new InputStreamReader(is));
do {
line = buf.readLine();
// \u8bfb\u53d6\u5230\u76f8\u5e94pkgName\u8df3\u51fa\u5faa\u73af\uff08\u6216\u8005\u672a\u627e\u5230\uff09
if (null == line || line.endsWith(pkgName)) {
break;
}
} while (true);
if (is != null) {
buf.close();
is.close();
}
} catch (IOException e) {
e.printStackTrace();
}
return line;
}

\u6700\u7b80\u5355\u7684\u529e\u6cd5\u662f\u4f60\u53ef\u4ee5\u53c2\u8003SL4A\uff08Scripting Layer for Android\uff09\u9879\u76ee\uff0cSL4A\u652f\u6301Python\u3001Perl\u3001JRuby\u3001Lua\u3001BeanShell\u3001JavaScript\u3001Tcl\u3001shell\u7b49\u811a\u672c\u7684\u6267\u884c\u3002\u5176\u4e2dshell\u7684\u5b9e\u73b0\u5b8c\u5168\u53ef\u4ee5\u66ff\u4ee3adb\u3002

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

满意就采纳!

 



1 adb本身是一个客户端服务器应用程序,由3个组件组成,Client, Server(adb), Daemon(adbd),其中Daemon运行在设备上,Client和Server都在客户端。

2 如果你的apk想执行adb命令,需要和adbd建立连接,理论上是可以实现的。

3 最简单的办法是你可以参考SL4A(Scripting Layer for Android)项目,SL4A支持Python、Perl、JRuby、Lua、BeanShell、JavaScript、Tcl、shell等脚本的执行。其中shell的实现完全可以替代adb。

最简单的办法是你可以参考SL4A(Scripting Layer for Android)项目,SL4A支持Python、Perl、JRuby、Lua、BeanShell、JavaScript、Tcl、shell等脚本的执行。其中shell的实现完全可以替代adb。



adb的全称为Android Debug Bridge,就是起到调试桥的作用。通过adb我们可以在Eclipse中方便通过DDMS来调试Android程序,说白了就是debug工具

所以adb命令能够直接在手机内部运行吗???????

  • 濡備綍鍦鑻规灉鐨刬pad涓鎵цandroid鐨搴旂敤绋嬪紡
    绛旓細浠庣幇鍦ㄦ妧鏈潵璇,鍦ㄨ嫻鏋滅殑ipad涓婃棤娉曢氳繃浠讳綍鏂规硶鎵цandroid鐨搴旂敤绋嬪紡apk妗f銆 apk鏄瀹夊崜绯荤粺瀹夎绋嬪紡妗f鐨勪竴绉嶆牸寮,ipa鏄嫻鏋滃畨瑁呮。妗堢殑鏍煎紡,apk鍜宨pa鍙槸鐢ㄥ湪涓嶅悓鐨勭郴缁熶笂銆 濡備綍鍦Zedboard涓婃墽琛宭inux涓嬬殑搴旂敤绋嬪紡 鍙互鍙傝冨涓嬫柟娉曚互瀹炵幇Linux鎵цwindows杞綋: 1銆佸畨瑁卨inux鐗堢殑vmware,鐒跺悗閫氳繃vmware寤虹珛windows铏氭嫙...
  • 濡備綍鍦ˋndroid鍜宨OS骞冲彴杩愯React Native搴旂敤
    绛旓細閫氳繃Xcode鐩存帴鎵撳紑iOS搴旂敤锛岃繍琛屽嵆鍙傚涓嬪浘鎵绀恒2銆佹柟寮忎簩 鍏堝皢缁堢銆乆code銆佹ā鎷熷櫒閫鍑猴紝鐒跺悗閲嶅惎缁堢锛屽湪缁堢涓垏鎹㈠埌椤圭洰璺緞锛屽啀鍦ㄧ粓绔腑杈撳叆react-native run-ios 鍥涖濡備綍鍦ˋndroid绔繍琛孯eact Native绋嬪簭 1銆侀鍏堥渶瑕佸惎鍔ㄦā鎷熷櫒 鍚姩妯℃嫙鍣ㄦ湁涓ょ鏂瑰紡锛氭柟寮忎竴锛氬涓嬪浘鎵绀猴紝1缁堢杈撳叆android avd...
  • 鎬庢牱灏嗚嚜宸卞啓鐨勭▼搴忔斁鍒android鎵嬫満閲岃繍琛
    绛旓細鍙互鐩存帴鐢ㄥ懡浠ゅ畨瑁咃紝棣栧厛鍑嗗濂絘pk鏂囦欢 鐒跺悗鎵ц浠ヤ笅姝ラ:1.灏嗛渶瑕佸畨瑁呯殑apk鏂囦欢鏀惧湪鍜宎db搴旂敤绋嬪簭鐨勫悓涓涓枃浠跺す涓2.鎵撳紑cmd搴旂敤绋嬪簭绐楀彛銆3.鐢ㄥ懡浠よ繘鍏db鐨勭郴缁熸枃浠跺す閲岄潰銆4.浣跨敤鍛戒护adb install xxx.apk 鍥炶溅锛屾帴涓嬫潵灏辨槸绛夊緟瀹夎銆傚畨瑁呭ソ涔嬪悗浼氳繑鍥瀞uccess銆
  • android涓濡備綍杩愯鍙鎵ц鏂囦欢(.exe鏍煎紡)鐨
    绛旓細闇瑕佸伐鍏凤細1銆佺綉涓婁笅杞紹ochs妯℃嫙鍣ㄤ富绋嬪簭锛堝氨鏄竴涓猘pk绋嬪簭鏂囦欢锛2銆侀厤缃枃浠讹紙宸茬粡鎵撳寘濂藉湪闄勪欢閲岋級3銆佺郴缁熼暅鍍 鎿嶄綔姝ラ 姝ラ1锛氬畨瑁呮ā鎷熷櫒涓荤▼搴忥紙杩欎釜灏变笉鐢ㄥ璇翠簡锛屽拰鏅瀹夊崜搴旂敤涓鏍凤級姝ラ2锛氬皢瑁呮湁閰嶇疆鏂囦欢鐨凷DL鏂囦欢澶规嫹璐濆埌鏈鸿韩鍐呭瓨鏍圭洰褰曚腑锛堟病鏈夋満韬唴瀛樼殑鎵嬫満璇锋嫹璐濆埌SD鍗′腑锛屼笉娓呮鎷疯礉...
  • eclipse android鎬庝箞杩愯鍦ㄦ墜鏈
    绛旓細寮瑰嚭绐楀彛濡備笅鍥撅細5.閫夋嫨绗竴椤癸紝灏卞彲浠ョ敤鎵嬫満璋冭瘯浜嗐傜偣纭畾鍗冲彲銆6.android宸ョ▼鏂囦欢澶逛笅鐨刡in鏂囦欢澶瑰湪缂栬瘧鎴愬姛鍚庝細鐢熸垚xxxxx.apk锛屽氨鏄彲鎵ц鐨刟ndroid绋嬪簭锛屼綘鍙互鐢ㄤ换浣曟墜鏈哄悓姝ュ伐鍏峰儚瀹夎鍏朵粬android绋嬪簭涓鏍峰畨瑁呬綘鑷繁鐨勯」鐩備箣鍚鍦╝ndroid鐨搴旂敤绋嬪簭鐩綍涓嬫壘鍒颁綘鐨勯」鐩浘鏍囷紝灏卞彲浠ヨ繍琛屻
  • android涓浣曞湪涓涓搴旂敤鍏抽棴鏃鎵ц涓涓柟娉曘
    绛旓細鐢ㄧ殑灏辨槸浣犺繖绉嶆柟娉曪紝娌$敤鐨勩傚湪浣搴旂敤浠庡悗鍙板叧闂殑閭d竴鐬棿銆傝繕娌℃潵寰楀強鎵ц鍒板activity鐨刼ndestroy銆傝繖涓繘绋嬮兘琚玨ill鎺変簡锛屾墍浠ヨ繖绉嶆柟娉曪紝娌$敤鐨勫晩銆傝繖绉嶆柟娉曞彧閫傜敤浜庝竴涓猘ctivity琚攢姣佹椂鍙敤銆備篃灏辨槸搴旂敤娌℃湁鍏抽棴鍓嶈繖涓兘鑳借鎵ц銆
  • 濡備綍鍦ˋndroid骞冲彴涓婁娇鐢↗S鐩存帴璋冪敤Java鏂规硶
    绛旓細鍙﹀鏈変竴鐐归渶瑕佹敞鎰忕殑灏辨槸锛鍦╝ndroid搴旂敤涓锛宑ocos鐨勬覆鏌撳拰js鐨勯昏緫鏄湪gl绾跨▼涓繘琛岀殑锛岃宎ndroid鏈韩鐨刄I鏇存柊鏄湪app鐨剈i绾跨▼杩涜鐨勶紝鎵浠ュ鏋滃湪js涓皟鐢ㄧ殑Java鏂规硶鏈変换浣曞埛鏂癠I鐨勬搷浣滐紝閮介渶瑕佸湪ui绾跨▼杩涜銆備緥濡傦紝鍦ㄤ笅闈㈢殑渚嬪瓙涓細璋冪敤涓涓狫ava鏂规硶锛屽脊鍑轰竴涓猘ndroid鐨凙lert瀵硅瘽妗嗐//缁欐垜浠啛鎮夌殑App...
  • 濡備綍鍦ˋndroid涓嬩娇鐢↗NI
    绛旓細绗簩姝ワ細鐢熸垚鍏变韩搴撶殑澶存枃浠讹細杩涘叆鍒癳clipse鐢熸垚鐨Android Project涓 锛/HelloWorld/bin/classes/com/lucyfyr/ 涓嬶細鍙互鐪嬪埌閲岄潰鍚庡緢澶氬悗缂涓.class鐨勬枃浠讹紝灏辨槸eclipse涓烘垜浠嚜鍔ㄧ紪璇戝ソ浜嗙殑java鏂囦欢锛屽叾涓氨鏈夛細HelloWorld.class鏂囦欢銆傞鍥炲埌classes涓绾х洰褰曪細/HelloWorld/bin/classes/鎵ц濡備笅鍛戒护锛歫avah com...
  • 濡備綍鍦鑻规灉鐨刬pad涓婅繍琛android鐨搴旂敤绋嬪簭
    绛旓細鑻规灉iPad涓嶈兘杩愯Android鐨搴旂敤绋嬪簭銆俰Pad鐨勬搷浣滅郴缁熶负iOS绯荤粺锛屽洜ios绯荤粺鍜屽畨鍗撶郴缁熸槸涓や釜鐙珛鐨勭郴缁燂紝涓よ呬箣闂寸殑鏁版嵁涔熸槸鐙珛璁$畻涓嶈兘澶熶簰閫氱殑銆傝嫢浣跨敤妯℃嫙鍣ㄦ垨iOS瓒婄嫳绯荤粺杩愯浣跨敤瀹夊崜缂栬瘧鐨勫簲鐢ㄧ▼搴忥紝閬囧埌浠讳綍杞欢闂锛屽寘鎷枃浠朵涪澶便侀殣绉佹硠闇诧紝鑻规灉瀹樻柟鍙婂畨鍗撳畼鏂规槸涓嶄簣澶勭悊鐨勩
  • android鍦ㄥ簲鐢鍐濡備綍鎵撳紑绗笁鏂瑰簲鐢
    绛旓細intent.setClassName("com.linxcool", "com.linxcool.PlaneActivity");startActivity(intent);12345 鏂规硶浜 Intent intent = new Intent();ComponentName comp = new ComponentName("com.linxcool","com.linxcool.PlaneActivity");intent.setComponent(comp);intent.setAction("android.intent.action.MAIN...
  • 扩展阅读:android系统下载安装 ... 苹果android怎么设置 ... android安卓版下载 ... android8.0版本下载 ... android苹果版下载 ... android在哪里打开 ... android4.0安装包下载 ... androidstudio手机版下载 ... android应用商店下载 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网