React Native安卓真机调试,adb排坑总结

原创不易,请多多支持!对Java技术感兴趣的童鞋请关注我,后续技术分享更精彩。 

React Native ,在linux下调试Android真机时,adb经常莫名其妙连接不上。作为小白,刚开始学RN,折腾了一段时间,总算把问题解决。记录下来,供遇到类似烦恼的小伙伴参考。

环境

CentOS Linux release 7.3.1611 (Core)

手机连接检测

确保手机和电脑连接同一网络,不同wifi网络可能导致adb连接失败。检测手机usb连接是否正常,多插拔几次确认连接无误。

打开手机中的开发人员选项,选择手机系统中的设置 -- 系统 -- 开发人员选项

React Native安卓真机调试,adb排坑总结

如果没有看到开发人员选项,可以通过 设置 -- 系统 -- 关于手机 -- 版本号 ,连续点击多下开启‘开发人员选项’。

'开发人员选项'开关开启后,打开USB调试选项,开启调试模式。如果android系统版本>=9.x时,请检查 '选择USB配置' 是否为'RNDIS(USB 网络)'选项,默认可能是'仅充电'选项。我在这上面,因为这个选项未打开,折腾浪费了半天时间,小伙伴们一定要注意!!!

React Native安卓真机调试,adb排坑总结

React Native安卓真机调试,adb排坑总结

React Native安卓真机调试,adb排坑总结

通过以下命令检测usb系统连接状态,第一条即是我华为手机的usb连接信息。

lsusb
React Native安卓真机调试,adb排坑总结

adb连接检测

执行adb命令,发现新出现device信息,即表示adb连接手机成功。

adb devices
React Native安卓真机调试,adb排坑总结

idVendor添加

如果adb连接不上。google提到修改/etc/udev/rules.d/51-android.rules的方法。即执行如下命令

echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="12d1", MODE="0666", GROUP="plugdev"' | sudo tee /etc/udev/rules.d/51-android-usb.rules

其中ATTR{idVendor}值修改为lsusb查看列表,对应的手机id信息。如我的手机信息为

Bus 001 Device 017: ID 12d1:108a Huawei Technologies Co., Ltd.

ID后的12d1即为ATTR{idVendor}的内容。

其实这样做的目的,无非是为了使adb对创建的usb节点有访问权限。只要使用root来启动adb server就不存在此问题。

做法如下:在root终端上运行adb start-server ,如果已经有运行adb命令的则需要杀掉adb server,运行 ps -ef | grep adb ,找到adb server的pid,然后kill掉,如我机器上:

root 2795 0.0 0.0 30556 1244 pts/2 sl 09:00 0:03 adb fork-server server

执行kill 2795杀掉adb server。再adb start-server 启动adb server。

通过以上办法还无法识别android设备,可能你的android的VID未能加入adb中,你需要手动添加。添加的文件位置与你第一次启动adb server有关,如你在root上启动adb server,则其位置在/root/.android/adb_usb.ini,否则其在$HOME/.android/adb_usb.ini下,若$HOME为空,则在/tmp/.android/adb_usb.ini下。没有文件或目录请手动添加。

以下是一份adb_usb.ini的示例:

#for Huawei Honor 7X
0x12d1

其中#开头表注释,其它则表示android的VID,每个VID需要单独一行。

测试

经过以上步骤仍未发现adb设备连接信息。多检查下是否某步操作有所遗漏。多关闭打开几次开发人与选项开关,重启下手机试试。

如果一切正常,在React Native项目工程下执行命令,启动安卓app。

react-native run-andoird

react native 项目编译启动日志:

React Native安卓真机调试,adb排坑总结

手机app安装提示:

React Native安卓真机调试,adb排坑总结

app手机端安装成功,进入app页面。

React Native安卓真机调试,adb排坑总结


分享到:


相關文章: