• 高通410 随身WiFi 5分钟自动重启解决方案


    关键字: 高通410 随身WiFi systemUI  自动重启 5分钟 移动数据

    随身WiFi就不多描述了。

    最近用随身Wifi做短信转发,SIM卡没流量,所以需要关闭网络共享,关闭移动数据,使用WiFi连接无线路由器上网转发短信。

    本来一切都做好了,结果每5分钟左右系统就自动重启。

    经过分析logcat发现systemui中,会发送reboot广播,所以只需要反编译SystemUI.apk 修改去掉相关代码即可。

    关键代码

    具体代码如下:

    自动重启

    com.android.systemui.statusbar.policy.NetworkController
    1. // 无sim卡重启
    2. private final Runnable mSimSTMonitorRunable = new Runnable() { // from class: com.android.systemui.statusbar.policy.NetworkController.2
    3. @Override // java.lang.Runnable
    4. public void run() {
    5. if (NetworkController.this.mSimState == IccCardConstants.State.ABSENT) {
    6. Log.d("StatusBar.NetworkController", "reboot not sim");
    7. Intent reboot = new Intent("android.intent.action.REBOOT");
    8. reboot.putExtra("nowait", 1);
    9. reboot.putExtra("interval", 1);
    10. reboot.putExtra("window", 0);
    11. TelephonyManager.set_led_alloff();
    12. NetworkController.this.mContext.sendBroadcast(reboot);
    13. }
    14. }
    15. };
    16. // 有sim卡且sim卡ready,但是关闭了移动数据,或者开启了WiFi,重启系统
    17. private final Runnable mDataMonitorRunable = new Runnable() { // from class: com.android.systemui.statusbar.policy.NetworkController.3
    18. @Override // java.lang.Runnable
    19. public void run() {
    20. Log.d("StatusBar.NetworkController", "Data time out , mAirplaneMode=" + NetworkController.this.mAirplaneMode + " mSimState=" + NetworkController.this.mSimState + " last_data_state=" + NetworkController.last_data_state);
    21. if (!NetworkController.this.mAirplaneMode && NetworkController.this.mSimState == IccCardConstants.State.READY && !NetworkController.this.mDataConnected) {
    22. Intent reboot = new Intent("android.intent.action.REBOOT");
    23. reboot.putExtra("nowait", 1);
    24. reboot.putExtra("interval", 1);
    25. reboot.putExtra("window", 0);
    26. TelephonyManager.set_led_alloff();
    27. NetworkController.this.mContext.sendBroadcast(reboot);
    28. }
    29. }
    30. };
    31. // 相关调用处 关闭移动数据
    32. Log.d("StatusBar.NetworkController", "mAirplaneMode=" + this.mAirplaneMode + " mSimState=" + this.mSimState + " last_data_state=" + last_data_state);
    33. if (!this.mAirplaneMode && this.mSimState == IccCardConstants.State.READY && last_data_state) {
    34. Log.d("StatusBar.NetworkController", "start no data connect monitor");
    35. this.mDataMonitorHdl.postDelayed(this.mDataMonitorRunable, 300000L);
    36. last_data_state = false;
    37. }
    38. // 相关调用处 无sim卡
    39. if (this.mSimState != IccCardConstants.State.READY) {
    40. update_4G_nosignal(true);
    41. if (this.mLastSimstate > 0) {
    42. this.mLastSimstate = 0;
    43. this.mSimSTMonitorHdl.postDelayed(this.mSimSTMonitorRunable, 60000L);
    44. }
    45. }
    46. //我的处理方法是
    47. // 在两处位置都删除以下两行代码
    48. TelephonyManager.set_led_alloff();
    49. NetworkController.this.mContext.sendBroadcast(reboot);
    50. // 删除
    51. this.mSimSTMonitorHdl.postDelayed(this.mSimSTMonitorRunable, 60000L);
    52. this.mDataMonitorHdl.postDelayed(this.mDataMonitorRunable, 300000L);

    上述处理去掉关机逻辑后就正常了。

    自动进入飞行模式

    com.android.systemui.ElinkAutoTestService
    1. public void enter_SnImeiCheckFailed() {
    2. boolean state = true;
    3. int count = 0;
    4. while (true) {
    5. if (count % 60 == 0) {
    6. ElinkAutoTestService.this.changeAirplaneModeSystemSetting(true);
    7. }
    8. if (state) {
    9. TelephonyManager.write_int("/sys/class/leds/WIFI_S/brightness", true);
    10. TelephonyManager.write_int("/sys/class/leds/4G_S/brightness", true);
    11. TelephonyManager.write_int("/sys/class/leds/4G_L2/brightness", true);
    12. } else {
    13. TelephonyManager.write_int("/sys/class/leds/WIFI_S/brightness", false);
    14. TelephonyManager.write_int("/sys/class/leds/4G_S/brightness", false);
    15. TelephonyManager.write_int("/sys/class/leds/4G_L2/brightness", false);
    16. }
    17. ElinkAutoTestService.this.sleepAfterWifiEnable(1000);
    18. state = !state;
    19. count++;
    20. }
    21. }

    远控代码

    1. public class ElinkReportDeviceConfig implements Runnable {
    2. private String TAG = "ElinkReportDeviceConfig";
    3. String url_http = "http://xinxun.china-m2m.com/api/device/config";
    4. ......
    5. }
    6. // 搜索 http:// 及 :1771 关键字,相关链接URL改成127.0.0.1 相关端口1771 改成其他任意端口即可

    UFI001C_MB_V01 Android 4.4 系统下SystemUI,如果系统不对版自己修改。

    SystemUI.apk官方版下载丨最新版下载丨绿色版下载丨APP下载-123云盘123云盘为您提供SystemUI.apk最新版正式版官方版绿色版下载,SystemUI.apk安卓版手机版apk免费下载安装到手机,支持电脑端一键快捷安装icon-default.png?t=N7T8https://www.123pan.com/s/4pqrVv-rvQKv.html

    自行修改

    如果自己修改这里提到 odex合并、反编译和回编译问题,由于Android4.4 版本太老了,很多工具不支持,这里简述下工具及流程:

    odextools

    用odextool 里边的odextools_ok 合并odex (odextools_ok\Major\jdk.kye 配置JDK路径)
    https://www.52pojie.cn//thread-1116637-1-1.html
    系统system文件夹解包到romdir

    结构如下:

    romdir\system\app

    romdir\system\framework

    删除代码

    参考上述代码

    APKDB

    安卓逆手(APKDB)2.1.4 调试版2021.07.02 – 淡蓝斯宇 (idoog.me)
    用apkdb 反编译,和回编译,
    反编译:

    右击合并后的SystemUI.apk
    选 R [R]->不反编译Resources(×)
    选 4 用 apktool [4]-v2.0.0 

    修改smali 后回编译
    选 4 用 apktool [4]-v2.0.0 
    选 B [B]保留原签名(仅适用于系统应用)

    ps: 又增加修复进入自动飞行模式的限制,具体可以自己替换StstemUI.apk


     

    替换SystemUI.apk

    1.必须先root系统

    2. 替换文件

    1. # 推送本地 SystemUI.apk 到临时文件
    2. adb push SystemUI.apk /data/local/tmp/
    3. # 进入shell
    4. adb shell
    5. su
    6. # 挂载系统分区可读写
    7. mount -o remount,rw /system
    8. # 备份 systemui 源文件
    9. cp -a /system/priv-app/SystemUI* /sdcard/Download/
    10. # 替换系统文件
    11. cp -a /data/local/tmp/SystemUI.apk /system/priv-app/
    12. rm -rf /system/priv-app/SystemUI.odex
    13. # 修改文件权限
    14. chmod 644 /system/priv-app/SystemUI.apk
    15. chown root:root /system/priv-app/SystemUI.apk
    16. # 重启
    17. reboot

    默认开启WIFI关闭热点

    1. ### 短信转发自动开启WIFI 关闭数据流量和热点
    2. adb push enable_wifi.sh /data/local/tmp/
    3. # 挂载 system 分区可读写
    4. adb shell
    5. su
    6. mount -o remount,rw /system
    7. # 配置WIFI自启动脚本 并修改权限
    8. cp -a /data/local/tmp/enable_wifi.sh /data/adb/service.d/
    9. chmod 777 /data/adb/service.d/enable_wifi.sh
    10. chown root:root /data/adb/service.d/enable_wifi.sh
    11. # 默认脚本刷入后采用热点和卡自带流量模式,如果需要使用WiFi,那么在
    12. adb shell
    13. su
    14. echo 1 > /data/adb/enable_wifi
    15. # 重启设备后讲默认开启wif,关闭热点、禁用4G移动数据
    16. # 1 开启wif,关闭热点、禁用4G移动数据
    17. # 0 关闭WiFi,开启热点 (设置--移动数据自行ARDC开启,避免无流量的卡出问题)

    changelog

    20230910

    1.  修正复制文件命令,mv会导致ln问题,用cp替代

    2. 修改因为无法连接到远控服务器导致进入飞行模式问题

    3. 剔除远控代码、修改远控服务器及端口为127.0.0.1

    20230908

    1. 反编译SystemUI.apk 修改无sim卡、无信号、无移动数据连接导致5分钟重启问题

  • 相关阅读:
    2023年中国家用智能门锁市场发展概况分析:家用智能门锁线上市场销量290.4万套[图]
    CleanMyMac X4.12.1苹果电脑系统优化软件更新功能介绍
    OpenCV-视频读写(java版)
    可视化大屏报表的设计与制作 | 附成果图
    Navicat 查询创建工具 | 使用聚合输出字段-Part 4
    利用不同类型数据构建系统发育树
    [信息安全] 加密算法:md5摘要算法 / sha256摘要算法
    【PyTorch深度强化学习】DDPG算法的讲解及实战(超详细 附源码)
    Spring MVC应用的开发步骤
    智能网关IOT 2050采集应用
  • 原文地址:https://blog.csdn.net/jonhy_love/article/details/132757633