〖Android〗快速部署SSHD和Bash Shell(程序:DroidSSHD和BetterTerminalEmulatorPro)
~~此文仅做个人配置记录~~
因为我经常需要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
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 $)
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./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./by-name/system1 \
MKSH=/system/bin/sh \
ANDROID_DATA=/data \
ANDROID_ROOT=/system \
HOSTNAME=android \
SHELL=/system/bin/sh \
ANDROID_PROPERTY_WORKSPACE=, \
EXTERNAL_STORAGE=/storage/sdcard0 \
ANDROID_ASSETS=/system/app \
TERM=vt100 \
ASEC_MOUNTPOINT=/mnt/asec \
HOME=/data \
ANDROID_BOOTLOGO= \
"$@"
这样子,使用类似命令 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 的输出
最新文章
- IOS开发基础知识--碎片14
- System.load(PWConnector.dll)加载异常 Can&#39;t find dependent libraries
- EF架构~豁出去了,为了IOC,为了扩展,改变以前的IRepository接口
- Android开发中XML布局的常用属性说明
- cell与cell之间的间距问题,以及section跟随屏幕滑动而滑动问题
- Leetcode Linked List Cycle II
- C#语言基础02
- JsRender系列demo-对null 和boolen类型数据的探讨
- [mock]12月27日
- 常用PHP运行环境一键安装包
- Android系统进程间通信(IPC)机制Binder中的Server启动过程源代码分析
- Oracle集合操作函数:union、intersect、minus
- Web网页中内嵌Activex的Activex插件开发 .
- 在VS中实现webService的一个demo(图解)
- FusionCharts使用问题及解决方法(一)-FusionCharts常见问题大全
- A. Karen and Morning
- 实现响应式——Bootstrap的删格系统详解
- C# 如何在Excel表格中插入、编辑和删除批注
- TortoiseSVN 命令 (命令行执行工具)
- apk反编译看包名什么的
热门文章
- [NISPA类会议] 怎样才能在NIPS 上面发论文?
- Spring MVC 返回类型为字符串时, 返回中文变成";?";处理
- @Autowired用法详解
- 第一章 第一个dubbo项目
- python 机器学习多项式回归
- 解决eclipse导出javadoc时的“错误: 编码GBK的不可映射字符”问题(转)
- viso-实现文本编辑
- 使用 GNU Libtool 创建库
- 转: H264码流分析 --264分析两大利器:264VISA和Elecard StreamEye Tools
- Android性能优化系列之App启动优化