![[MT8766][Android12] 无屏设备调试新思路:固化WIFI热点配置实现开机即连](http://pic.xiahunao.cn/yaotu/[MT8766][Android12] 无屏设备调试新思路:固化WIFI热点配置实现开机即连)
1. 无屏设备调试的痛点与解决方案最近在折腾MT8766平台的Android12智能盒子时遇到个头疼的问题这货居然没有屏幕调试起来简直要命。相信做过物联网设备开发的同行都深有体会没有显示输出的设备就像个黑盒子传统的有线ADB调试根本行不通。我试过好几种方案最靠谱的还是通过WIFI热点建立ADB连接。但默认的Android热点配置实在太坑每次重启热点名称都会变IP地址也是随机的调试时得反复查设备日志效率低到令人发指。实测下来最稳的方案是修改系统源码固化热点参数。具体要实现三个目标固定热点名称比如WIFI_Debug固定连接密码比如12345678固定IP地址段比如192.168.68.x2. MT8766平台环境准备2.1 硬件配置要点MT8766是联发科专门为智能盒子设计的SoC跑Android12需要特别注意确保内核版本是msm-4.19或更高WIFI模块要支持AP模式实测MT7668芯片组最稳定预留足够的存储空间系统镜像修改后会增大建议先用adb有线连接确认基本功能正常adb devices adb shell getprop ro.hardware2.2 源码获取与编译修改热点配置需要完整的AOSP环境repo init -u https://android.googlesource.com/platform/manifest -b android-12.0.0_r32 repo sync -j8 source build/envsetup.sh lunch full_mt8766-userdebug make -j16注意MT8766厂商一般会提供定制化的BSP包建议优先使用厂商提供的代码树3. 热点参数固化实战3.1 修改默认SSID和密码找到关键文件packages/modules/Wifi/service/java/com/android/server/wifi/WifiApConfigStore.java修改getDefaultApConfiguration方法// 原代码会生成随机SSID // configBuilder.setSsid(mContext.getResources().getString( // R.string.wifi_tether_configure_ssid_default) _ getRandomIntForDefaultSsid()); // 改为固定SSID configBuilder.setSsid(MT8766_Debug); // 密码设置同理 if (ApConfigUtil.isWpa3SaeSupported(mContext)) { configBuilder.setPassphrase(87668766, SoftApConfiguration.SECURITY_TYPE_WPA3_SAE_TRANSITION); } else { configBuilder.setPassphrase(87668766, SoftApConfiguration.SECURITY_TYPE_WPA2_PSK); }3.2 固定IP地址段修改网络配置packages/modules/Connectivity/Tethering/src/android/net/ip/IpServer.java添加静态IP配置private static final String WIFI_IFACE_ADDR 192.168.68.1/24; // 在getDownstreamAddress方法中添加 } else if (mInterfaceType TetheringManager.TETHERING_WIFI) { return new LinkAddress(WIFI_IFACE_ADDR); }注意/24表示子网掩码255.255.255.0确保DHCP范围与此匹配4. 开机自启热点实现4.1 广播接收器配置在系统服务中添加开机广播监听// 添加在frameworks/base/custom/java/com/common/sdk/security/SecurityService.java private final class securityReceiver extends BroadcastReceiver { Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) { ConnectivityManager mConnectivityManager (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE); mConnectivityManager.startTethering(TETHERING_WIFI, false, mOnStartTetheringCallback, new Handler(Looper.getMainLooper())); } } }4.2 权限配置在AndroidManifest.xml中添加uses-permission android:nameandroid.permission.TETHER_PRIVILEGED / uses-permission android:nameandroid.permission.RECEIVE_BOOT_COMPLETED /5. 调试技巧与避坑指南5.1 常见问题排查热点无法启动先检查WIFI驱动是否加载adb shell lsmod | grep wlanIP分配异常确认dhcpd服务正常运行adb shell ps -A | grep dhcpd5.2 性能优化建议修改/etc/hostapd.conf调整信道带宽hw_modeg channel6 ht_capab[HT40][SHORT-GI-20][SHORT-GI-40]关闭不必要的频段configBuilder.setBand(SoftApConfiguration.BAND_2GHZ);6. 扩展应用场景这套方案不仅适用于调试在量产设备中也能派上大用场。比如智能家居中控设备通过固定热点可以让手机APP自动连接。我在智能音箱项目中就用了类似方案用户首次开机时自动进入配网模式。另一个实用技巧是结合ADB over Networkadb tcpip 5555 adb connect 192.168.68.1:5555这样即使不插USB线也能随时调试特别适合嵌入式设备现场维护。