Android手机对手机adb环境搭建

     公司项目需求,要用Nexus 5X手机作为测试工具,连接Linux设备,然后在手机上执行ps、find、grep、cat等Linux系统命令查询Linux设备上的进程、日志等操作,通过这两句话,不知道大家有没有理解清楚需求,一开始让我搞,直接蒙了,从来执行adb命令都是在电脑上,因为电脑可以安装SDK自带的adb.exe,用它才能连接手机,还从来没搞过在手机上执行adb,但是要实现这样的需求,在手机上执行adb是必须的,只有在手机上成功执行adb,连接上Linux设备,才能像在电脑上通过adb shell连接Linux设备一样,只要连接上了,执行命令就简单了。

     各方查资料,这种偏门的需求确实比较少,所有的资料都是讲的模糊不清的,很浪费时间。大家可以自己先试一下,一般手机上根本无法执行adb shell,比如我们在电脑上adb shell进入到手机的根目录,然后继续执行adb shell,会出现如下的adb not found的错误信息。

Android手机对手机adb环境搭建_第1张图片

     而我们一般可以执行的,比如ps查询进程、am启动Activity等,都是因为系统中有这样的可执行程序,我们才可以用,这些可执行程序有一些是放在system目录下,比如am、pm、cat、ps等等,示例如下:

Android手机对手机adb环境搭建_第2张图片

Android手机对手机adb环境搭建_第3张图片

     好,那么理解了这点,我们就有目的了,要在手机上实现这样的功能,我们必须找到Android设备上可执行的adb程序,这样在手机环境下执行adb shell、adb devices时才不会报错。过程也是千辛万苦,不过终于找到,一开始是想自己编译的,不过困难非常多,而且最终没有成功,因为网上朋友提供的adb源码是已经裁剪过的,无法生成adbkey,adbkey是进行adb连接时验证的密钥,电脑上当我们连接手机时弹出的提示框就是将公钥发送到手机保存起来的,没有密钥根本无法连接。

     需要提前说明,我用的是Google Nexus 5X手机,而且必须要Root才可以的,因为我们后边很多操作都需要Root权限。Root安装包下载地址:Nexus5x获取Root权限安装包.zip,操作非常简单,我们只要运行adb reboot bootloader,让手机进入bootloader,然后双击安装包中的root-windows.bat角本即可,root完成手机会重启,我们就可以adb shell进入手机目录,执行su来获取Root权限了。

Android手机对手机adb环境搭建_第4张图片 

     找到的工具就是ADB工具安装器,APK下载地址:ADB工具安装器,代码下载地址:ADBToolKitsInstaller,我们先安装完成该工具,然后点击安装、开启ADB服务(ROOT)两个按钮,如下图:

Android手机对手机adb环境搭建_第5张图片

     然后通过Wifi ADB连接上我们的调试机器,Wifi ADB角本下载链接:wifi_adb.bat。adb shell进入手机环境,执行su获取Root权限,然后mount -o remount,rw / 将根目录挂载为可读写,在根目录下mkdir .android、cd .android,然后执行adb keygen adbkey 2 > /dev/null,此时可以看到在手机目录下正常生成了adbkey、adbkey.pub两个文件,一个是公钥,一个是私钥,非常惊喜!!!继续adb devices,可以看到发现设备了,注意Nexus 5X手机是通过OTG线和Linux设备相连的,然后继续在手机环境下adb shell,已经进入Linux设备上了,在这里我们要执行任何Linux命令都可以了!!!

Android手机对手机adb环境搭建_第6张图片

     下面是一些写入环境变量的角本,因为adb程序存储的公钥和私钥是放在根目录下的.android目录中的,所以我们一步到位,直接在根目录下.android目录中生成公钥和私钥,所以就不需要该角本了。

Android手机对手机adb环境搭建_第7张图片

#!/system/bin/sh
#创建文件夹存放密匙日志
mkdir -p /sdcard/.android/tmp
#进入目录
#生成密匙,请确保你已经安装adb
adb keygen /sdcard/.android/adbkey 2 > /dev/null
#设置环境变量
#挂载system读写
if `mount -o,remount /system`; then
echo "挂载成功"
else if `busybox mount -o,remount /system`; then
echo "挂载成功"
else
echo "挂载失败"
echo "请安**usybox代替系统自带的mount"
exit 1
fi
fi
if `echo "export HOME=/sdcard\nexport TMPDIR=/sdcard/.android/tmp" >> /system/etc/mkshrc`; then
echo "写入成功"
else
echo "写入失败,请检查是否已经解锁或者有没有其它应用程序正在使用/system/etc/mkshrc"
exit 2
fi
#重启adb
adb kill-server
adb start-server
adb devices

 

参考链接:

https://www.linuxidc.com/Linux/2012-05/59600.htm
https://github.com/louiskoo/adb
https://bbs.csdn.net/topics/390603826
https://www.jianshu.com/p/5d93c6d6cfb1
https://blog.csdn.net/go4awalk/article/details/77820036
https://blog.csdn.net/u011281197/article/details/80244244
https://blog.csdn.net/zhaoxd200808501/article/details/74331986
https://blog.csdn.net/ty3219/article/details/77717478
https://blog.csdn.net/gaojy19881225/article/details/80026644
https://blog.csdn.net/qq_16149777/article/details/82349868
http://www.miui.com/thread-8879537-1-1.html
https://www.coolapk.com/apk/crixec.adbtoolkitsinstall

你可能感兴趣的:(Android反编译,Android异常处理,环境搭建,Android源码解析,android,framework)