2,如何在你的應用中執行ADB命令?java
1)代碼實現: linux
execShellCmd("input tap 345 1236");
private void execShellCmd(String cmd) { try { Process process = Runtime.getRuntime().exec("sh"); OutputStream outputStream = process.getOutputStream(); DataOutputStream dataOutputStream = new DataOutputStream( outputStream); dataOutputStream.writeBytes(cmd); dataOutputStream.flush(); dataOutputStream.close(); outputStream.close(); } catch (Throwable t) { t.printStackTrace(); }
2)平臺簽名:android
若是不簽名的話,應用執行到這裏是沒有效果的。app
簽名須要三個文件:platform.x509pem和platform.pk8在源碼\build\target\product\security目錄下。signapk.jar在\out\host\linux-x86\framework目錄下。ui
拷貝出來以後,將未簽名的apk放到相同的文件夾下,執行以下命令:debug
java -jar signapk.jar platform.x509.pem platform.pk8 須要簽名apk 簽名完成apkrest
3)ADB命令擴展:orm
上篇介紹的adb命令比較侷限,僅僅觸屏、按鍵。本小結強化一下。get
am :input
am start am startservice am stopservice am force-stop am kill am kill-all
am broadcast am instrument am profile start am profile stop am dumpheap
am set-debug-app am clear-debug-app am monitor am hang am restart
am idle-maintenance am screen-compat am to-uri am to-intent-uri
am switch-user am stop-user am stack create am stack movetask am stack resize am stack boxes am stack box
啓應用,啓服務,發廣播~功能好強,可是我就講一個例子:
am 啓動相機!x度一搜命令就出來了。
am start -n com.android.camera/com.android.camera.Camera
也許這條指令在你的設備上能啓動相機,可是在個人設備上執行以後,啥都沒啓動~why?難不成被騙了?查看am後面的參數包star -n 包名/包名.活動名。看看上面的參數,沒問題啊。再拿一個已知包名和活動名的應用驗證了一下,確實能起來。這樣問題就能肯定了,是我設備上關於相機的包名或者是活動名字不對。
接下來是怎麼查看到正確的包名和活動名字,使用以下命令,dumpsys usagestats 是用來記錄打開了程序的哪些activity次數和時間一類信息的,因此包名活動名什麼的一覽無遺。
dumpsys usagestats | grep cam
將全部包含cam的信息都顯示出來
com.android.camera2: 32 times, 8695 ms
com.android.camera.CameraActivity: 32 starts
如此一來就確認是包名活動名都不對,因此正確的命令應該是
am start -n com.android.camera2/com.android.camera.CameraActivity
----to be continued