~~此文僅做個人配置記錄~~
因為我經常需要sshd來連接設備,它抓取logcat日志太方便了,方便排查問題,及多人共享;
及有USB孔限制的人來說,這個更具有意義;
把超級終端增強包部署到內網,也是為了方便下載,畢竟不是什么時候都可以上外網,並且外網下載太慢了;
增強包的配置相對比較麻煩一些,還需要配置bind9域名解析服務器,nginx或apach2網頁服務器;
不過這些對於一般開發者來說,搭建這些玩意的服務器都不算個事;
此外,ssh並不同於adb shell,一些環境變量也沒有;
如果這個時候,直接運行pm或am命令,則會直接導致Android設備重啟;
當然,這也不是沒有辦法,后邊提供的sshcmd即可解決這個小問題;
文件下載:
1. DroidSSHdv06.apk 下載1(google) 下載2(國內)
2. BetterTerminalEmulatorPro.apk(超級終端) 下載1(google) 下載2(國內)
3. [可選] 超級終端 增強包 bettertermpro_web.zip 下載1
安裝應用:
1. 安裝應用 DroidSSHD 和 超級終端
2. [可選] 解壓 bettertermpro_web.zip 到 nginx 或 apache2 搭建的網頁服務器根目錄(直接外網條件下載太慢了,假定此機器是hostA)
3. [可選] 手機接入的WiFi,DNS解析服務器設置(前提是有內網域名解析服務)把 magicandroidapps.com 指向 hostA
打開SSHD:
運行DroidSSHD,選擇以Root權限運行,假定端口號設定3322,勾選 Start on boot,然后勾選Start
ssh_config配置:
vi ~/.ssh/config
輸入配置信息,如我的小米2手機是么配置的:
Host xiaomi HostName 55.55.137.149 Port 3322 User root
無密碼登錄:
ssh-copy-id xiaomi
因為$HOME變量被 DroidSSHD 指定到了 /sdcard,於是還需要登錄 xiaomi 這個設備,執行一些操作
ssh xiaomi 登錄之后,執行以下命令:
busybox=/data/data/com.magicandroidapps.bettertermpro/bin/busybox.exe $busybox cp /sdcard/.ssh/authorized_keys /data/data/br.com.bott.droidsshd/files/etc/authorized_keys uid_ssh=$($busybox ls -l /data/data/br.com.bott.droidsshd/files | $busybox awk '{print $3}' | $busybox head -n1) uid_num=$($busybox id $uid_ssh|$busybox awk -F'[=(]' '{print $2}') $busybox chown $uid_num:$uid_num /data/data/br.com.bott.droidsshd/files/etc/authorized_keys unset uid_ssh unset uid_num $busybox mount -o remount,rw /system $busybox cp /data/data/com.magicandroidapps.bettertermpro/bin/scp /system/xbin/scp $busybox cp /data/data/com.magicandroidapps.bettertermpro/bin/sftp-server /data/data/br.com.bott.droidsshd/files/bin/
unset busybox
復制scp和sftp-server是為了讓DroidSSHD支持 sshfs 掛載,方便文件的操作
sshcmd:
讓ssh命令完全代替adb shell命令
#!/bin/bash # 用於摸擬adb shell操作,穩定性比較adb shell好多了! # self: get location self=$(readlink -f $0) self_dir=$(dirname $self) DEVICE=${DEVICE:-'xiaomi'} busybox=/data/data/com.magicandroidapps.bettertermpro/bin/busybox.exe # run command ssh -F $emmdevices $DEVICE \ $busybox env \ LOCAL_ENV_CURR_MODEM=/dev/block/platform/msm_sdcc.1/by-name/modem1 \ LOOP_MOUNTPOINT=/mnt/obb \ LD_LIBRARY_PATH=/vendor/lib:/system/lib \ BOOTCLASSPATH=/system/framework/core.jar:/system/framework/core-junit.jar:/system/framework/bouncycastle.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/framework_ext.jar:/system/framework/android.policy.jar:/system/framework/services.jar:/system/framework/apache-xml.jar:/system/framework/qcom.fmradio.jar \ PATH=/sbin:/vendor/bin:/system/sbin:/system/bin:/system/xbin \ LOCAL_ENV_CURR_SYSTEM=/dev/block/platform/msm_sdcc.1/by-name/system1 \ MKSH=/system/bin/sh \ ANDROID_DATA=/data \ ANDROID_ROOT=/system \ HOSTNAME=android \ SHELL=/system/bin/sh \ ANDROID_PROPERTY_WORKSPACE=8,65536 \ EXTERNAL_STORAGE=/storage/sdcard0 \ ANDROID_ASSETS=/system/app \ TERM=vt100 \ ASEC_MOUNTPOINT=/mnt/asec \ HOME=/data \ ANDROID_BOOTLOGO=1 \ "$@"
這樣子,使用類似命令 env DEVICE=xiaomi ./sshcmd am start -n com.easyapp.injecta/com.fake.activity.fakeUtil 即可通過命令行啟動一個應用程序
sshpidcat:
當然,你也期望抓取logcat時,指定個應用程序對嗎?
或許大家期望的抓取日志是這樣子的: logcat <package_name> 指定只抓取自己相關的日志輸出
沒錯,使用pidcat即可完成,下載1(github)
但是這個也是依賴於USB連接的,通過簡單的修改,使之能夠通過ssh來抓取指定apk的日志輸出(依賴於之前的sshcmd)
因為文件較大,直接給出文件下載:
sshpidcat.zip (包含sshcmd和sshpidcat兩個文件) 下載1
這樣子使用類似命令 env DEVICE=xiaomi ./sshpidcat com.easyapp.injecta 即可只抓取 com.easyapp.injecta 的輸出