Output:
=== Termux:Boot 权限 ===
      android.intent.action.BOOT_COMPLETED:
          Action: "android.intent.action.BOOT_COMPLETED"
      android.permission.RECEIVE_BOOT_COMPLETED
      android.permission.NFC: granted=true
      android.permission.FOREGROUND_SERVICE: granted=true
      android.permission.RECEIVE_BOOT_COMPLETED: granted=true
      android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS: granted=true
      com.android.alarm.permission.SET_ALARM: granted=true
      android.permission.INTERNET: granted=true
      android.permission.TRANSMIT_IR: granted=true
      android.permission.WRITE_SECURE_SETTINGS: granted=true
      android.permission.WRITE_SECURE_SETTINGS: granted=false, userId=10
      android.permission.WRITE_SECURE_SETTINGS: granted=false, userId=999
      android.permission.CHANGE_WIFI_STATE: granted=true
      android.permission.ACCESS_NETWORK_STATE: granted=true
      android.permission.SET_WALLPAPER: granted=true
      android.permission.USE_FINGERPRINT: granted=true
      android.permission.REQUEST_DELETE_PACKAGES: granted=true
      android.permission.VIBRATE: granted=true
      android.permission.ACCESS_WIFI_STATE: granted=true
      android.permission.USE_BIOMETRIC: granted=true
      android.permission.WAKE_LOCK: granted=true
      android.permission.NFC: granted=true
      android.permission.FOREGROUND_SERVICE: granted=true
      android.permission.RECEIVE_BOOT_COMPLETED: granted=true
      android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS: granted=true
      com.android.alarm.permission.SET_ALARM: granted=true
      android.permission.INTERNET: granted=true
      android.permission.TRANSMIT_IR: granted=true
      android.permission.WRITE_SECURE_SETTINGS: granted=true
      android.permission.WRITE_SECURE_SETTINGS: granted=false, userId=10
      android.permission.WRITE_SECURE_SETTINGS: granted=false, userId=999
      android.permission.CHANGE_WIFI_STATE: granted=true
      android.permission.ACCESS_NETWORK_STATE: granted=true
      android.permission.SET_WALLPAPER: granted=true
      android.permission.USE_FINGERPRINT: granted=true
      android.permission.REQUEST_DELETE_PACKAGES: granted=true
      android.permission.VIBRATE: granted=true
      android.permission.ACCESS_WIFI_STATE: granted=true
      android.permission.USE_BIOMETRIC: granted=true
      android.permission.WAKE_LOCK: granted=true
        android.permission.READ_SMS: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED|RESTRICTION_INSTALLER_EXEMPT]
        android.permission.POST_NOTIFICATIONS: granted=true, flags=[ USER_SET|USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
        android.permission.READ_CALL_LOG: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED|RESTRICTION_INSTALLER_EXEMPT]
        android.permission.ACCESS_FINE_LOCATION: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
        android.permission.READ_MEDIA_VISUAL_USER_SELECTED: granted=true, flags=[ USER_SET|USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
        android.permission.READ_EXTERNAL_STORAGE: granted=true, flags=[ USER_SET|REVOKE_WHEN_REQUESTED|USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED|RESTRICTION_INSTALLER_EXEMPT]
        android.permission.ACCESS_COARSE_LOCATION: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
        android.permission.READ_PHONE_STATE: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
        android.permission.SEND_SMS: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED|RESTRICTION_INSTALLER_EXEMPT]
        android.permission.CALL_PHONE: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
        android.permission.READ_MEDIA_IMAGES: granted=true, flags=[ USER_SET|USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED|RESTRICTION_UPGRADE_EXEMPT]
        android.permission.BODY_SENSORS_BACKGROUND: granted=false, flags=[ REVOKE_WHEN_REQUESTED|RESTRICTION_INSTALLER_EXEMPT]
        android.permission.CAMERA: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
        android.permission.READ_MEDIA_AUDIO: granted=true, flags=[ USER_SET|USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED|RESTRICTION_UPGRADE_EXEMPT]
        android.permission.READ_MEDIA_VIDEO: granted=true, flags=[ USER_SET|USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED|RESTRICTION_UPGRADE_EXEMPT]
        android.permission.health.READ_HEALTH_DATA_IN_BACKGROUND: granted=false, flags=[ REVOKE_WHEN_REQUESTED|USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED|RESTRICTION_UPGRADE_EXEMPT]
        android.permission.WRITE_EXTERNAL_STORAGE: granted=true, flags=[ USER_SET|USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED|RESTRICTION_INSTALLER_EXEMPT]
        android.permission.RECORD_AUDIO: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
        android.permission.READ_CONTACTS: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
        android.permission.ACCESS_BACKGROUND_LOCATION: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED|RESTRICTION_INSTALLER_EXEMPT]
        android.permission.health.READ_HEART_RATE: granted=false, flags=[ REVOKE_WHEN_REQUESTED|USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
        android.permission.ACCESS_MEDIA_LOCATION: granted=true, flags=[ USER_SET|USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED|RESTRICTION_UPGRADE_EXEMPT]
        android.permission.READ_SMS: granted=false, flags=[ RESTRICTION_UPGRADE_EXEMPT]
        android.permission.READ_CALL_LOG: granted=false, flags=[ RESTRICTION_UPGRADE_EXEMPT]
        android.permission.READ_MEDIA_VISUAL_USER_SELECTED: granted=false, flags=[ RESTRICTION_UPGRADE_EXEMPT]
        android.permission.READ_EXTERNAL_STORAGE: granted=false, flags=[ REVOKE_WHEN_REQUESTED|RESTRICTION_UPGRADE_EXEMPT]
        android.permission.SEND_SMS: granted=false, flags=[ RESTRICTION_UPGRADE_EXEMPT]
        android.permission.READ_MEDIA_IMAGES: granted=false, flags=[ RESTRICTION_UPGRADE_EXEMPT]
        android.permission.BODY_SENSORS_BACKGROUND: granted=false, flags=[ REVOKE_WHEN_REQUESTED|RESTRICTION_UPGRADE_EXEMPT]
        android.permission.READ_MEDIA_AUDIO: granted=false, flags=[ RESTRICTION_UPGRADE_EXEMPT]
        android.permission.READ_MEDIA_VIDEO: granted=false, flags=[ RESTRICTION_UPGRADE_EXEMPT]
        android.permission.health.READ_HEALTH_DATA_IN_BACKGROUND: granted=false, flags=[ REVOKE_WHEN_REQUESTED|RESTRICTION_UPGRADE_EXEMPT]
        android.permission.WRITE_EXTERNAL_STORAGE: granted=false, flags=[ RESTRICTION_UPGRADE_EXEMPT]
        android.permission.ACCESS_BACKGROUND_LOCATION: granted=false, flags=[ RESTRICTION_UPGRADE_EXEMPT]
        android.permission.health.READ_HEART_RATE: granted=false, flags=[ REVOKE_WHEN_REQUESTED]
        android.permission.ACCESS_MEDIA_LOCATION: granted=false, flags=[ RESTRICTION_UPGRADE_EXEMPT]
        android.permission.READ_SMS: granted=false, flags=[ RESTRICTION_UPGRADE_EXEMPT]
        android.permission.READ_CALL_LOG: granted=false, flags=[ RESTRICTION_UPGRADE_EXEMPT]
        android.permission.READ_MEDIA_VISUAL_USER_SELECTED: granted=false, flags=[ RESTRICTION_UPGRADE_EXEMPT]
        android.permission.READ_EXTERNAL_STORAGE: granted=false, flags=[ REVOKE_WHEN_REQUESTED|RESTRICTION_UPGRADE_EXEMPT]
        android.permission.SEND_SMS: granted=false, flags=[ RESTRICTION_UPGRADE_EXEMPT]
        android.permission.READ_MEDIA_IMAGES: granted=false, flags=[ RESTRICTION_UPGRADE_EXEMPT]
        android.permission.BODY_SENSORS_BACKGROUND: granted=false, flags=[ REVOKE_WHEN_REQUESTED|RESTRICTION_UPGRADE_EXEMPT]
        android.permission.READ_MEDIA_AUDIO: granted=false, flags=[ RESTRICTION_UPGRADE_EXEMPT]
        android.permission.READ_MEDIA_VIDEO: granted=false, flags=[ RESTRICTION_UPGRADE_EXEMPT]
        android.permission.health.READ_HEALTH_DATA_IN_BACKGROUND: granted=false, flags=[ REVOKE_WHEN_REQUESTED|RESTRICTION_UPGRADE_EXEMPT]
        android.permission.WRITE_EXTERNAL_STORAGE: granted=false, flags=[ RESTRICTION_UPGRADE_EXEMPT]
        android.permission.ACCESS_BACKGROUND_LOCATION: granted=false, flags=[ RESTRICTION_UPGRADE_EXEMPT]
        android.permission.health.READ_HEART_RATE: granted=false, flags=[ REVOKE_WHEN_REQUESTED]
        android.permission.ACCESS_MEDIA_LOCATION: granted=false, flags=[ RESTRICTION_UPGRADE_EXEMPT]

=== Tailscale 权限 ===
          Action: "android.intent.action.BOOT_COMPLETED"
          Action: "android.intent.action.BOOT_COMPLETED"
      android.intent.action.BOOT_COMPLETED:
          Action: "android.intent.action.BOOT_COMPLETED"
      android.permission.RECEIVE_BOOT_COMPLETED
      android.permission.CHANGE_NETWORK_STATE: granted=true
      android.permission.FOREGROUND_SERVICE: granted=true
      android.permission.RECEIVE_BOOT_COMPLETED: granted=true
      android.permission.INTERNET: granted=true
      android.permission.FOREGROUND_SERVICE_SYSTEM_EXEMPTED: granted=true
      android.permission.ACCESS_NETWORK_STATE: granted=true
      android.permission.ACCESS_WIFI_STATE: granted=true
      android.permission.QUERY_ALL_PACKAGES: granted=true
      android.permission.WAKE_LOCK: granted=true
        android.permission.POST_NOTIFICATIONS: granted=true, flags=[ USER_SET|USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]

=== Termux 权限 ===
      android.permission.NFC: granted=true
      android.permission.FOREGROUND_SERVICE: granted=true
      android.permission.RECEIVE_BOOT_COMPLETED: granted=true
      android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS: granted=true
      com.android.alarm.permission.SET_ALARM: granted=true
      android.permission.INTERNET: granted=true
      android.permission.TRANSMIT_IR: granted=true
      android.permission.WRITE_SECURE_SETTINGS: granted=true
      android.permission.WRITE_SECURE_SETTINGS: granted=false, userId=10
      android.permission.WRITE_SECURE_SETTINGS: granted=false, userId=999
      android.permission.CHANGE_WIFI_STATE: granted=true
      android.permission.ACCESS_NETWORK_STATE: granted=true
      android.permission.SET_WALLPAPER: granted=true
      android.permission.USE_FINGERPRINT: granted=true
      android.permission.REQUEST_DELETE_PACKAGES: granted=true
      android.permission.VIBRATE: granted=true
      android.permission.ACCESS_WIFI_STATE: granted=true
      android.permission.USE_BIOMETRIC: granted=true
      android.permission.WAKE_LOCK: granted=true
      android.permission.NFC: granted=true
      android.permission.FOREGROUND_SERVICE: granted=true
      android.permission.RECEIVE_BOOT_COMPLETED: granted=true
      android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS: granted=true
      com.android.alarm.permission.SET_ALARM: granted=true
      android.permission.INTERNET: granted=true
      android.permission.TRANSMIT_IR: granted=true
      android.permission.WRITE_SECURE_SETTINGS: granted=true
      android.permission.WRITE_SECURE_SETTINGS: granted=false, userId=10
      android.permission.WRITE_SECURE_SETTINGS: granted=false, userId=999
      android.permission.CHANGE_WIFI_STATE: granted=true
      android.permission.ACCESS_NETWORK_STATE: granted=true
      android.permission.SET_WALLPAPER: granted=true
      android.permission.USE_FINGERPRINT: granted=true
      android.permission.REQUEST_DELETE_PACKAGES: granted=true
      android.permission.VIBRATE: granted=true
      android.permission.ACCESS_WIFI_STATE: granted=true
      android.permission.USE_BIOMETRIC: granted=true
      android.permission.WAKE_LOCK: granted=true
        android.permission.READ_SMS: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED|RESTRICTION_INSTALLER_EXEMPT]
        android.permission.POST_NOTIFICATIONS: granted=true, flags=[ USER_SET|USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
        android.permission.READ_CALL_LOG: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED|RESTRICTION_INSTALLER_EXEMPT]
        android.permission.ACCESS_FINE_LOCATION: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
        android.permission.READ_MEDIA_VISUAL_USER_SELECTED: granted=true, flags=[ USER_SET|USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
        android.permission.READ_EXTERNAL_STORAGE: granted=true, flags=[ USER_SET|REVOKE_WHEN_REQUESTED|USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED|RESTRICTION_INSTALLER_EXEMPT]
        android.permission.ACCESS_COARSE_LOCATION: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
        android.permission.READ_PHONE_STATE: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
        android.permission.SEND_SMS: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED|RESTRICTION_INSTALLER_EXEMPT]
        android.permission.CALL_PHONE: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
        android.permission.READ_MEDIA_IMAGES: granted=true, flags=[ USER_SET|USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED|RESTRICTION_UPGRADE_EXEMPT]
        android.permission.BODY_SENSORS_BACKGROUND: granted=false, flags=[ REVOKE_WHEN_REQUESTED|RESTRICTION_INSTALLER_EXEMPT]
        android.permission.CAMERA: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
        android.permission.READ_MEDIA_AUDIO: granted=true, flags=[ USER_SET|USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED|RESTRICTION_UPGRADE_EXEMPT]
        android.permission.READ_MEDIA_VIDEO: granted=true, flags=[ USER_SET|USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED|RESTRICTION_UPGRADE_EXEMPT]
        android.permission.health.READ_HEALTH_DATA_IN_BACKGROUND: granted=false, flags=[ REVOKE_WHEN_REQUESTED|USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED|RESTRICTION_UPGRADE_EXEMPT]
        android.permission.WRITE_EXTERNAL_STORAGE: granted=true, flags=[ USER_SET|USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED|RESTRICTION_INSTALLER_EXEMPT]
        android.permission.RECORD_AUDIO: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
        android.permission.READ_CONTACTS: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
        android.permission.ACCESS_BACKGROUND_LOCATION: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED|RESTRICTION_INSTALLER_EXEMPT]
        android.permission.health.READ_HEART_RATE: granted=false, flags=[ REVOKE_WHEN_REQUESTED|USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
        android.permission.ACCESS_MEDIA_LOCATION: granted=true, flags=[ USER_SET|USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED|RESTRICTION_UPGRADE_EXEMPT]
        android.permission.READ_SMS: granted=false, flags=[ RESTRICTION_UPGRADE_EXEMPT]
        android.permission.READ_CALL_LOG: granted=false, flags=[ RESTRICTION_UPGRADE_EXEMPT]
        android.permission.READ_MEDIA_VISUAL_USER_SELECTED: granted=false, flags=[ RESTRICTION_UPGRADE_EXEMPT]
        android.permission.READ_EXTERNAL_STORAGE: granted=false, flags=[ REVOKE_WHEN_REQUESTED|RESTRICTION_UPGRADE_EXEMPT]
        android.permission.SEND_SMS: granted=false, flags=[ RESTRICTION_UPGRADE_EXEMPT]
        android.permission.READ_MEDIA_IMAGES: granted=false, flags=[ RESTRICTION_UPGRADE_EXEMPT]
        android.permission.BODY_SENSORS_BACKGROUND: granted=false, flags=[ REVOKE_WHEN_REQUESTED|RESTRICTION_UPGRADE_EXEMPT]
        android.permission.READ_MEDIA_AUDIO: granted=false, flags=[ RESTRICTION_UPGRADE_EXEMPT]
        android.permission.READ_MEDIA_VIDEO: granted=false, flags=[ RESTRICTION_UPGRADE_EXEMPT]
        android.permission.health.READ_HEALTH_DATA_IN_BACKGROUND: granted=false, flags=[ REVOKE_WHEN_REQUESTED|RESTRICTION_UPGRADE_EXEMPT]
        android.permission.WRITE_EXTERNAL_STORAGE: granted=false, flags=[ RESTRICTION_UPGRADE_EXEMPT]
        android.permission.ACCESS_BACKGROUND_LOCATION: granted=false, flags=[ RESTRICTION_UPGRADE_EXEMPT]
        android.permission.health.READ_HEART_RATE: granted=false, flags=[ REVOKE_WHEN_REQUESTED]
        android.permission.ACCESS_MEDIA_LOCATION: granted=false, flags=[ RESTRICTION_UPGRADE_EXEMPT]
        android.permission.READ_SMS: granted=false, flags=[ RESTRICTION_UPGRADE_EXEMPT]
        android.permission.READ_CALL_LOG: granted=false, flags=[ RESTRICTION_UPGRADE_EXEMPT]
        android.permission.READ_MEDIA_VISUAL_USER_SELECTED: granted=false, flags=[ RESTRICTION_UPGRADE_EXEMPT]
        android.permission.READ_EXTERNAL_STORAGE: granted=false, flags=[ REVOKE_WHEN_REQUESTED|RESTRICTION_UPGRADE_EXEMPT]
        android.permission.SEND_SMS: granted=false, flags=[ RESTRICTION_UPGRADE_EXEMPT]
        android.permission.READ_MEDIA_IMAGES: granted=false, flags=[ RESTRICTION_UPGRADE_EXEMPT]
        android.permission.BODY_SENSORS_BACKGROUND: granted=false, flags=[ REVOKE_WHEN_REQUESTED|RESTRICTION_UPGRADE_EXEMPT]
        android.permission.READ_MEDIA_AUDIO: granted=false, flags=[ RESTRICTION_UPGRADE_EXEMPT]
        android.permission.READ_MEDIA_VIDEO: granted=false, flags=[ RESTRICTION_UPGRADE_EXEMPT]
        android.permission.health.READ_HEALTH_DATA_IN_BACKGROUND: granted=false, flags=[ REVOKE_WHEN_REQUESTED|RESTRICTION_UPGRADE_EXEMPT]
        android.permission.WRITE_EXTERNAL_STORAGE: granted=false, flags=[ RESTRICTION_UPGRADE_EXEMPT]
        android.permission.ACCESS_BACKGROUND_LOCATION: granted=false, flags=[ RESTRICTION_UPGRADE_EXEMPT]
        android.permission.health.READ_HEART_RATE: granted=false, flags=[ REVOKE_WHEN_REQUESTED]
        android.permission.ACCESS_MEDIA_LOCATION: granted=false, flags=[ RESTRICTION_UPGRADE_EXEMPT]

=== 电池优化白名单 ===
user,com.tailscale.ipn,10422
user,com.termux.api,10419
user,com.termux.boot,10419
user,com.termux,10419


三个 App 的权限都正常：
- ✅ Termux:Boot: `RECEIVE_BOOT_COMPLETED: granted=true`，电池优化白名单 ✅
- ✅ Tailscale: `RECEIVE_BOOT_COMPLETED: granted=true`，电池优化白名单 ✅
- ✅ Termux: `RECEIVE_BOOT_COMPLETED: granted=true`，电池优化白名单 ✅

Android 层面权限全开了。问题是 OPPO 系统级的自启动管理在拦截开机广播，这个 ADB 查不到。

黑阈和 X-OmniClaw 能自启动，要么是 OPPO 内置白名单，要么是它们用了特殊机制绕过。


# 把Tailscale加入系统电池白名单
dumpsys deviceidle whitelist +com.tailscale.ipn

# 强制授予开机自启权限
pm grant com.tailscale.ipn android.permission.RECEIVE_BOOT_COMPLETED

# 禁止系统冻结Tailscale后台
am set-inactive com.tailscale.ipn false

# 允许后台无限制运行
appops set com.tailscale.ipn RUN_IN_BACKGROUND allow
appops set com.tailscale.ipn RUN_ANY_IN_BACKGROUND allow
这些指令有效吗


第2条无效，之前试过了报错——`RECEIVE_BOOT_COMPLETED` 是安装时权限，不能用 grant 授予。

其他几条可以试试：

Explanation:
用户问这些指令是否有效。让我分析一下：

1. `dumpsys deviceidle whitelist +com.tailscale.ipn` - 有效，加入电池优化白名单
2. `pm grant com.tailscale.ipn android.permission.RECEIVE_BOOT_COMPLETED` - 无效，之前已经试过了，这个权限是安装时权限，不能用grant授予
3. `am set-inactive com.tailscale.ipn false` - 有效，设置App为活跃状态
4. `appops set com.tailscale.ipn RUN_IN_BACKGROUND allow` - 可能有效
5. `appops set com.tailscale.ipn RUN_ANY_IN_BACKGROUND allow` - 可能有效

让我帮用户执行有效的那些。

terminal

ssh -p 8022 100.114.227.26 '
echo "=== 1. 电池白名单（已加过）==="
adb -s localhost:5555 shell dumpsys deviceidle whitelist +com.tailscale.ipn

echo ""
echo "=== 2. 禁止冻结后台 ==="
adb -s localhost:5555 shell am set-inactive com.tailscale.ipn false

echo ""
echo "=== 3. 允许后台无限制运行 ==="
adb -s localhost:5555 shell appops set com.tailscale.ipn RUN_IN_BACKGROUND allow 2>&1
adb -s localhost:5555 shell appops set com.tailscale.ipn RUN_ANY_IN_BACKGROUND allow 2>&1

echo ""
echo "=== 检查 appops 状态 ==="
adb -s localhost:5555 shell appops get com.tailscale.ipn RUN_IN_BACKGROUND 2>&1
adb -s localhost:5555 shell appops get com.tailscale.ipn RUN_ANY_IN_BACKGROUND 2>&1
'


Output:
=== 1. 电池白名单（已加过）===
Added: com.tailscale.ipn

=== 2. 禁止冻结后台 ===

=== 3. 允许后台无限制运行 ===

=== 检查 appops 状态 ===
RUN_IN_BACKGROUND: allow
RUN_ANY_IN_BACKGROUND: allow


都执行成功了。给 Termux:Boot 和 Termux 也加上：

ssh -p 8022 100.114.227.26 '
echo "=== Termux:Boot ==="
adb -s localhost:5555 shell am set-inactive com.termux.boot false
adb -s localhost:5555 shell appops set com.termux.boot RUN_IN_BACKGROUND allow
adb -s localhost:5555 shell appops set com.termux.boot RUN_ANY_IN_BACKGROUND allow

echo ""
echo "=== Termux ==="
adb -s localhost:5555 shell am set-inactive com.termux false
adb -s localhost:5555 shell appops set com.termux RUN_IN_BACKGROUND allow
adb -s localhost:5555 shell appops set com.termux RUN_ANY_IN_BACKGROUND allow

echo ""
echo "=== 验证 ==="
adb -s localhost:5555 shell appops get com.termux.boot RUN_IN_BACKGROUND
adb -s localhost:5555 shell appops get com.termux RUN_IN_BACKGROUND
'


Output:
=== Termux:Boot ===

=== Termux ===

=== 验证 ===
RUN_IN_BACKGROUND: allow
RUN_IN_BACKGROUND: allow


都设置好了。但这些只是后台运行权限，不是开机自启动权限。OPPO 的自启动管理是独立的系统，这些命令可能帮不上。

要不要重启测试一下？


在rish可以加上开机自启动的指令吗


rish 的权限和 ADB shell 一样（都是 uid 2000），所以 ADB 做不到的事 rish 也做不到。

但你的思路对——**如果 Shizuku 能自启动，让它开机后执行命令启动 Termux**。

问题是之前你说 Shizuku 显示"需要 root"才能开机自启动。

换个思路：**X-OmniClaw 能自启动，让它开机后启动 Termux**。

X-OmniClaw 有个广播接收器可以执行命令：

```bash
adb shell am broadcast -a PHONE_FORCLAW_SEND_MESSAGE --es message "启动Termux"
```

你试试在 X-OmniClaw 里能不能设置一个开机任务，或者它开机后会不会自动执行某个脚本？

Explanation:
用户问的是能不能用 rish（Shizuku 的高权限 shell）来设置开机自启动。

rish 有 shell (uid 2000) 权限，比普通 ADB shell 权限高一些，但不是 root。

让我想想有什么命令可以设置开机自启动：

1. `pm enable` - 启用组件，但不能强制自启动
2. `settings put` - 可能有些 OPPO 特有的设置
3. `cmd package` - 包管理命令
4. `appops` - 已经试过了
5. OPPO 可能有自己的 content provider 或者 settings 来管理自启动

让我搜索一下 OPPO/ColorOS 的自启动管理是怎么实现的，看看有没有 ADB 命令可以绕过。

实际上 rish 的权限和 ADB shell 是一样的（都是 uid 2000 shell），所以如果 ADB 做不到的事，rish 也做不到。

但用户的意思可能是：既然 Shizuku 能自启动，能不能让 Shizuku 开机后执行一个脚本来启动 Termux？

这个思路是对的！Shizuku 如果能自启动，它可以在开机后执行 rish 命令来启动其他应用。

但问题是 Shizuku 本身需要 root 才能开机自启动（之前用户说过 Shizuku 显示"需要 root"）。

让我直接回答用户的问题，然后看看有没有其他方案。


他说暂不支持


那就剩 **Tasker** 或 **MacroDroid** 了。

这类自动化 App 专门做"开机后执行任务"，而且它们通常被系统归类为工具类，自启动限制可能更宽松。

你装一个试试？设置：
- 触发条件：开机完成
- 执行动作：启动应用 → Termux

Explanation:
用户说 X-OmniClaw 暂不支持开机任务。

那现在的情况是：
1. 黑阈能自启动，但没有启动其他应用的功能
2. X-OmniClaw 能自启动，但暂不支持开机任务
3. Shizuku 需要 root 才能开机自启动
4. Termux:Boot、Tailscale 被 OPPO 拦截

还有什么方案？

1. Tasker/MacroDroid - 自动化工具，可能能绕过限制
2. 让黑阈或 X-OmniClaw 的开发者加功能（不现实）
3. 用 Magisk 模块（需要 root）
4. 接受现实，重启后手动点一下

或者...黑阈虽然没有"启动其他应用"的功能，但它能自启动说明它有某种机制。看看黑阈有没有什么 hook 或者脚本功能？

让我再想想黑阈...黑阈的核心是管理后台，它自己能自启动是因为它需要在开机后立即开始工作。但它没有"开机执行脚本"的功能。

Tasker 可能是最后的希望了。


[The user sent an image~ Here's what I can see:
This is a screenshot from an Android smartphone showing a terminal or shell command execution interface.

**Status Bar (top):**
- Time: 19:24:45
- Bluetooth icon (appears active)
- Network speed indicator: 11.0 KB/s
- WiFi signal icon
- Dual SIM indicators showing "56A" and "5G" with signal strength bars
- Battery level: 79%

**App Header:**
- Back arrow (←) on the left
- Title in Chinese characters: 执行指令 (meaning "Execute Command")
- A circular icon with what appears to be a refresh or history symbol
- Three-dot overflow menu on the right

**Command Input Area:**
A text input field containing an ADB shell command:
```
adb shell /data/app/~~1R11BhNVVH-YkUM5ABrcS3A==/moe.shizuku.privileged.api-5_1gtWh3xNCK-Zf-oYKFcA==/lib/arm64/libshizuku.so
```
- There's a yellow/orange play/execute button (►) to the right of the input field

**Output Area:**
Three lines of terminal output in gray/white text:
```
[shproc] Process[pid=5120, hasExited=false]
sh: <stdin>[1]: adb: inaccessible or not found
[shproc] Process[pid=5120, hasExited=true, exitcode=0]
```

This indicates the command attempted to run but failed because `adb` was inaccessible or not found within the shell environment, though the process itself exited with code 0.

**Overall Appearance:**
- Dark theme (dark gray/black background)
- White and gray text
- The app appears to be related to Shizuku, a tool for using ADB capabilities on Android without root]
[If you need a closer look, use vision_analyze with image_url: /home/ubuntu/.hermes/cache/images/img_deda74110d57.jpg ~]


这是黑阈的执行指令功能！它里面没有 adb 命令，但可以直接用 am 命令。

试试这个：

```bash
am start -n com.termux/.app.TermuxActivity
```

如果黑阈能开机后自动执行这条命令，就能启动 Termux 了！

Explanation:
用户发了一张截图，显示在某个"执行指令"界面（可能是黑阈或其他App）执行命令。

命令是：
```
adb shell /data/app/~~1R11BhNVVH-YkUM5ABrcS3A==/moe.shizuku.privileged.api-5_1gtWh3xNCK-Zf-oYKFcA==/lib/arm64/libshizuku.so
```

输出显示：
```
[shproc] Process[pid=5120, hasExited=false]
sh: <stdin>[1]: adb: inaccessible or not found
[shproc] Process[pid=5120, hasExited=true, exitcode=0]
```

问题是这个执行环境里没有 adb 命令。

用户可能是在黑阈里执行命令，想让黑阈开机后执行某个命令来启动 Termux 或 Shizuku。

这个界面应该是黑阈的"执行指令"功能！黑阈能自启动，如果它能开机后执行命令，就可以启动 Termux！

但问题是这个环境里没有 adb。不过可以直接用 am start 命令启动 Termux，不需要 adb：

```
am start -n com.termux/.app.TermuxActivity
```

让我告诉用户试试这个。


虽然有效，但是怎么让他开机执行


Explanation:
用户问的是怎么让黑阈开机后自动执行这条命令。黑阈本身是用来管理后台的，不是用来执行开机任务的。

让我想想黑阈有没有开机执行脚本的功能...之前搜索结果显示黑阈主要是用来禁止应用自启动的，不是用来启动应用的。

但用户发的截图显示黑阈有"执行指令"功能，这说明黑阈可以执行shell命令。问题是能不能设置开机自动执行。

我应该搜索一下黑阈有没有开机执行脚本的功能。

Question: 黑阈 brevent 开机执行脚本 自动执行命令


Question: 黑阈 brevent 开机执行脚本 自动执行命令

黑阈 - 应用宝

开机自动允许. 允许程序开机自动运行. 读取系统日志. 读取系统底层日志. 转存系统信息. 允许程序获取系统dump信息从系统服务. 读写系统敏感设置. 允许程序读写系统安全敏感

黑阈免激活版下载v4.2.29.1安卓版 - 87G手游网

④复制整行指令，粘贴到黑阈，点击『纸飞机图标』运行Scene5 ADB激活脚本。 ... 开机自动允许:允许程序开机自动运行. 读取系统日志:允许应用程序读取系统

by-syk/BreventAdbHelper: 一键启动黑域服务 - GitHub

一键背后的步骤 · 检查设备是否处于调试模式并通过USB连接电脑 · 检查设备是否已安装「ADB Clipboard GetSet」 · 启动设备上的「黑域」 · 从设备获取黑域复制到剪切板的ADB命令

使用ADB调试启动黑域 - 初之音

Android 调试桥(adb) 是一个通用命令行工具，其允许您与模拟器实例或连接的Android 设备进行通信。它可为各种设备操作提供便利，如安装和调试应用，并

插线自动执行启用黑域指令

黑域可以休眠后台软件，节省手机电量，但每次重启，都需电脑执行软件启动操作。 所以想如何减少启动黑域的步骤，最简单打开服务。 手动执行黑域时的步骤：

Question: 黑阈 brevent 开机执行脚本 自动执行命令

黑阈 - 应用宝

黑阈免激活版下载v4.2.29.1安卓版 - 87G手游网

使用ADB调试启动黑域 - 初之音

插线自动执行启用黑域指令


搜到的都是怎么激活黑阈，没有开机执行自定义命令的功能。

黑阈的"执行指令"功能只是手动执行，没有开机自动执行的选项。

**最后方案：Tasker 或 MacroDroid**

这两个 App 专门做自动化，可以设置"开机后执行 shell 命令"。你装一个试试？


你试试能不能连，我现在重启了


Output:
PING 100.114.227.26 (100.114.227.26) 56(84) bytes of data.
64 bytes from 100.114.227.26: icmp_seq=1 ttl=64 time=2610 ms
64 bytes from 100.114.227.26: icmp_seq=2 ttl=64 time=1614 ms

--- 100.114.227.26 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 1614.066/2111.806/2609.547/497.740 ms, pipe 2


Tailscale 通了！延迟高但能 ping 通。试试 SSH：

timeout 10 ssh -p 8022 -o ConnectTimeout=5 100.114.227.26 'echo "Termux OK"' 2>&1


Output: ssh: connect to host 100.114.227.26 port 8022: Connection refused


Tailscale 自启动了！但 Termux 没启动（8022 被拒绝）。

之前设置的 `RUN_IN_BACKGROUND` 和 `RUN_ANY_IN_BACKGROUND` 让 Tailscale 能自启动了，但 Termux:Boot 还是被拦截。


你再试试


Output: ssh: connect to host 100.114.227.26 port 8022: Connection refused


还是不行，Termux 没启动。

Tailscale 自启动成功了，但 Termux:Boot 还是被 OPPO 拦截。


我现在打开了，你看看日志有没有自启动


Explanation: 用户让我检查 Termux:Boot 的日志，看看有没有自启动的记录。

用户让我检查 Termux:Boot 的日志，看看有没有自启动的记录。

ssh -p 8022 100.114.227.26 '
echo "=== Boot 日志 ==="
cat ~/.boot.log 2>/dev/null | tail -20

echo ""
echo "=== 检查 Boot 日志时间 ==="
ls -la ~/.boot.log 2>/dev/null
'


Output:
=== Boot 日志 ===
Mon May 18 18:30:58 CST 2026: === 开机启动 ===
Mon May 18 18:31:09 CST 2026: svdir 已在运行
Mon May 18 18:31:09 CST 2026: syncthing 已启动
Mon May 18 18:31:09 CST 2026: 启动完成
Mon May 18 18:39:28 CST 2026: === 开机启动 ===
Mon May 18 18:39:39 CST 2026: svdir 已启动
Mon May 18 18:39:39 CST 2026: syncthing 已启动
Mon May 18 18:39:39 CST 2026: 启动完成
Mon May 18 18:52:29 CST 2026: === 开机启动 ===
Mon May 18 18:52:39 CST 2026: svdir 已在运行
Mon May 18 18:52:39 CST 2026: syncthing 已启动
Mon May 18 18:52:39 CST 2026: 启动完成
Mon May 18 19:34:02 CST 2026: === 开机启动 ===
Mon May 18 19:34:12 CST 2026: svdir 已在运行
Mon May 18 19:34:12 CST 2026: syncthing 已启动
Mon May 18 19:34:12 CST 2026: 启动完成
Mon May 18 19:38:03 CST 2026: === 开机启动 ===
Mon May 18 19:38:14 CST 2026: svdir 已在运行
Mon May 18 19:38:14 CST 2026: syncthing 已启动
Mon May 18 19:38:14 CST 2026: 启动完成

=== 检查 Boot 日志时间 ===
-rw-------. 1 u0_a419 u0_a419 1345 May 18 19:38 /data/data/com.termux/files/home/.boot.log


没有自启动。最新的日志是 19:38:03，那是你手动打开 Termux 后触发的。

如果 Termux:Boot 自启动成功，应该在你重启后几秒就有日志，但没有。

**结论**：
- ✅ Tailscale 自启动成功了（之前设置的 `RUN_IN_BACKGROUND allow` 生效了）
- ❌ Termux:Boot 还是被拦截

要不要装 Tasker/MacroDroid 试试？


你看boot有没有自启动


Explanation:
用户让我看 Termux:Boot 有没有自启动。我刚才看了日志，最新的是 19:38:03，但我需要知道用户重启的时间才能判断。

让我再仔细看日志：
- 19:34:02 有一条
- 19:38:03 有一条

用户说"我现在重启了"，然后说"我现在打开了"。所以重启应该是在 19:34 左右之前。

如果 Termux:Boot 自启动了，应该在重启后立刻有日志。但用户说他手动打开了 Termux，所以 19:38:03 那条是手动打开触发的。

但我需要确认重启的具体时间。让我检查系统启动时间。

ssh -p 8022 100.114.227.26 '
echo "=== 系统启动时间 ==="
adb -s localhost:5555 shell uptime 2>/dev/null || uptime

echo ""
echo "=== 对比 Boot 日志时间 ==="
cat ~/.boot.log | tail -5
'


Output:
=== 系统启动时间 ===
 19:39:22 up 4 min,  load average: 40.16, 27.10, 11.84

=== 对比 Boot 日志时间 ===
Mon May 18 19:34:12 CST 2026: 启动完成
Mon May 18 19:38:03 CST 2026: === 开机启动 ===
Mon May 18 19:38:14 CST 2026: svdir 已在运行
Mon May 18 19:38:14 CST 2026: syncthing 已启动
Mon May 18 19:38:14 CST 2026: 启动完成


系统 uptime 显示开机 4 分钟（19:35 左右开机），Boot 日志 19:38:03 才有记录。

**差了 3 分钟**，说明 Termux:Boot 没有自启动，是你手动打开 Termux 后才触发的。


为什么其他的成功了


让我检查一下 Termux:Boot 的 appops 是否生效：

Explanation:
用户问为什么其他的（Tailscale、黑阈、X-OmniClaw）能自启动，但 Termux:Boot 不行。

让我想想可能的原因：

1. Tailscale 之前设置了 `RUN_IN_BACKGROUND allow` 和 `RUN_ANY_IN_BACKGROUND allow`，这次重启后 Tailscale 自启动成功了

2. 黑阈和 X-OmniClaw 也能自启动

3. 但 Termux:Boot 不行，即使我们也给它设置了同样的 appops

可能的区别：
- Termux:Boot 是一个很小的 App，它的唯一功能就是接收 BOOT_COMPLETED 广播然后启动 Termux
- 它可能没有前台服务，没有持久化的进程
- 而 Tailscale、黑阈、X-OmniClaw 都有自己的后台服务

让我检查一下 Termux:Boot 的 appops 状态，看看是不是设置没生效。

ssh -p 8022 100.114.227.26 '
echo "=== Termux:Boot appops ==="
adb -s localhost:5555 shell appops get com.termux.boot RUN_IN_BACKGROUND
adb -s localhost:5555 shell appops get com.termux.boot RUN_ANY_IN_BACKGROUND

echo ""
echo "=== Tailscale appops ==="
adb -s localhost:5555 shell appops get com.tailscale.ipn RUN_IN_BACKGROUND
adb -s localhost:5555 shell appops get com.tailscale.ipn RUN_ANY_IN_BACKGROUND

echo ""
echo "=== 黑阈 appops ==="
adb -s localhost:5555 shell appops get me.piebridge.brevent RUN_IN_BACKGROUND
adb -s localhost:5555 shell appops get me.piebridge.brevent RUN_ANY_IN_BACKGROUND
'


Output:
=== Termux:Boot appops ===
adb: device 'localhost:5555' not found
adb: device 'localhost:5555' not found

=== Tailscale appops ===
adb: device 'localhost:5555' not found
adb: device 'localhost:5555' not found

=== 黑阈 appops ===
adb: device 'localhost:5555' not found
adb: device 'localhost:5555' not found


ADB 还没连上，先连接：

ssh -p 8022 100.114.227.26 '
adb devices
adb connect localhost:5555 2>/dev/null
sleep 1

echo "=== Termux:Boot appops ==="
adb shell appops get com.termux.boot RUN_IN_BACKGROUND
adb shell appops get com.termux.boot RUN_ANY_IN_BACKGROUND

echo ""
echo "=== Tailscale appops ==="
adb shell appops get com.tailscale.ipn RUN_IN_BACKGROUND
adb shell appops get com.tailscale.ipn RUN_ANY_IN_BACKGROUND

echo ""
echo "=== 黑阈 appops ==="
adb shell appops get me.piebridge.brevent RUN_IN_BACKGROUND
adb shell appops get me.piebridge.brevent RUN_ANY_IN_BACKGROUND
'


Output:
List of devices attached

Connection refused
=== Termux:Boot appops ===
adb: no devices/emulators found

adb: no devices/emulators found
=== Tailscale appops ===
adb: no devices/emulators found

=== 黑阈 appops ===
adb: no devices/emulators found
adb: no devices/emulators found
adb: no devices/emulators found


ADB 5555 还没开。先开无线调试：

ssh -p 8022 100.114.227.26 '
echo "=== 检查无线调试状态 ==="
settings get global adb_wifi_enabled

echo ""
echo "=== 开启无线调试 ==="
settings put global adb_wifi_enabled 1
sleep 2

echo ""
echo "=== 扫描 ADB 端口 ==="
for port in 5555 $(seq 30000 30100); do
  (echo > /dev/tcp/127.0.0.1/$port) 2>/dev/null && echo "端口 $port 开放"
done
'


{"output": "=== 检查无线调试状态 ===\n\n=== 开启无线调试 ===\n\nException occurred while executing 'get':\njava.lang.SecurityException: Permission Denial: getCurrentUser() from pid=1917, uid=10419 requires android.permission.INTERACT_ACROSS_USERS\n\tat com.android.server.am.UserController.checkGetCurrentUserPermissions(UserController.java:3365)\n\tat com.android.server.am.UserController.getCurrentUser(UserController.java:3370)\n\tat com.android.server.am.ActivityManagerService.getCurrentUser(ActivityManagerService.java:17671)\n\tat com.android.providers.settings.SettingsService$MyShellCommand.onCommand(SourceFile:240)\n\tat com.android.modules.utils.BasicShellCommandHandler.exec(BasicShellCommandHandler.java:97)\n\tat android.os.ShellCommand.exec(ShellCommand.java:38)\n\tat com.android.providers.settings.SettingsService.onShellCommand(SourceFile:54)\n\tat android.os.Binder.shellCommand(Binder.java:1164)\n\tat android.os.Binder.onTransact(Binder.java:966)\n\tat android.os.Binder.execTransactInternal(Binder.java:1444)\n\tat android.os.Binder.execTransact(Binder.java:1378)\n\nException occurred while executing 'put':\njava.lang.SecurityException: Permission Denial: getCurrentUser() from pid=1962, uid=10419 requires android.permission.INTERACT_ACROSS_USERS\n\tat com.android.server.am.UserController.checkGetCurrentUserPermissions(UserController.java:3365)\n\tat com.android.server.am.UserController.getCurrentUser(UserController.java:3370)\n\tat com.android.server.am.ActivityManagerService.getCurrentUser(ActivityManagerService.java:17671)\n\tat com.android.providers.settings.SettingsService$MyShellCommand.onCommand(SourceFile:240)\n\tat com.android.modules.utils.BasicShellCommandHandler.exec(BasicShellCommandHandler.java:97)\n\tat android.os.ShellCommand.exec(ShellCommand.java:38)\n\tat com.android.providers.settings.SettingsService.onShellCommand(SourceFile:54)\n\tat android.os.Binder.shellCommand(Binder.java:1164)\n\tat android.os.Binder.onTransact(Binder.java:966)\n\tat android.os.Binder.execTransactInternal(Binder.java:1444)\n\tat android.os.Binder.execTransact(Binder.java:1378)\n\n=== 扫描 ADB 端口 ===", "exit_code": 1, "error": null}

[Tool loop warning: same_tool_failure_warning; count=3; terminal has failed 3 times this turn. This looks like a loop; change approach before retrying.]


Termux 没有权限操作 settings。需要你手动开无线调试，或者用隧道连接。

先建隧道：


Output:
2026-05-18 19:32:19: 5555 就绪，启动隧道
2026-05-18 19:32:20: 隧道断开，30秒后重试
2026-05-18 19:32:50: WiFi 已连接
2026-05-18 19:32:55: 5555 就绪，启动隧道
2026-05-18 19:32:56: 隧道断开，30秒后重试
2026-05-18 19:33:26: WiFi 已连接
2026-05-18 19:33:31: 5555 就绪，启动隧道
2026-05-18 19:33:32: 隧道断开，30秒后重试
2026-05-18 19:34:02: WiFi 已连接
2026-05-18 19:34:07: 5555 就绪，启动隧道
2026-05-18 19:34:10: 隧道断开，30秒后重试
2026-05-18 19:34:40: WiFi 已连接
2026-05-18 19:34:45: 5555 就绪，启动隧道
2026-05-18 19:34:46: 隧道断开，30秒后重试
2026-05-18 19:38:03: === adb-tunnel 服务启动 ===
2026-05-18 19:38:04: WiFi 已连接
2026-05-18 19:38:12: 扫描可用端口...
2026-05-18 19:39:18: 5555 不可用，30秒后重试
2026-05-18 19:39:49: WiFi 已连接
2026-05-18 19:39:54: 扫描可用端口...


看到了！日志显示 19:32-19:34 有活动，但 19:38:03 才是"服务启动"。

**关键发现**：19:32-19:34 的日志说明 adb-tunnel 在那时候就在运行了，但那时候 Termux 还没被你手动打开（你 19:38 才打开）。

这说明 **Termux:Boot 可能自启动了**，但 svdir 服务没正常拉起来，或者 Boot 脚本执行了但没写日志。

你手动打开 Termux 是什么时候？


那 19:32-19:34 的 adb-tunnel 日志是上一次重启的，不是这次。

这次重启：
- 19:35 左右开机
- 19:38:03 你手动打开 Termux
- Termux:Boot 没有自启动

**奇怪的是 Tailscale 自启动了**（ping 通了），但 Termux:Boot 没有。

可能 Tailscale 是 VPN 类应用，系统对 VPN 有特殊处理。

你手动开一下无线调试，我检查下 appops 设置是否还在。

Explanation:
用户说手动打开 Termux 是 19:38:03。

但日志显示 19:32-19:34 有 adb-tunnel 的活动记录：
- 2026-05-18 19:32:19: 5555 就绪，启动隧道
- 2026-05-18 19:32:20: 隧道断开，30秒后重试
- ...一直到 19:34:46

然后 19:38:03 才是"=== adb-tunnel 服务启动 ==="

这说明在用户手动打开 Termux 之前（19:32-19:34），adb-tunnel 就已经在运行了！

这意味着 Termux:Boot 可能确实自启动了，只是 boot.log 没记录到（可能 boot 脚本执行了但没写日志，或者 svdir 已经在运行所以跳过了）。

等等，让我再看看：
- 系统 uptime 显示开机 4 分钟（19:35 左右开机）
- 但 adb-tunnel 日志 19:32 就有记录了

这不对啊，19:32 比开机时间还早？

哦，可能是之前的重启，不是最近这次。让我重新理解：

用户说"我现在重启了"，然后我检查发现 uptime 是 4 分钟（19:35 左右开机），boot.log 最新是 19:38:03。

adb-tunnel.log 里 19:32-19:34 的记录是上一次重启的，不是这次。

这次重启后：
- 19:35 左右开机
- 19:38:03 用户手动打开 Termux
- 19:38:03 boot.log 记录"=== 开机启动 ==="
- 19:38:03 adb-tunnel.log 记录"=== adb-tunnel 服务启动 ==="

所以 Termux:Boot 没有自启动，是用户手动打开后才触发的。

那为什么 Tailscale 能自启动而 Termux:Boot 不能？

可能的原因：
1. Tailscale 是 VPN 类应用，系统对 VPN 有特殊处理
2. 之前设置的 appops 对 Tailscale 生效了但对 Termux:Boot 没生效
3. OPPO 对某些应用有白名单

让我检查一下 appops 设置是否还在。


[Quoted message]:
系统 uptime 显示开机 4 分钟（19:35 左右开机），Boot 日志 19:38:03 才有记录。

**差了 3 分钟**，说明 Termux:Boot 没有自启动，是你手动打开 Termux 后才触发的。

不对35才开机，那说明就是没有自启动


对，Termux:Boot 没有自启动。

Tailscale 能自启动可能是因为它是 VPN 类应用，系统对 VPN 有特殊处理。

现在的选择：
1. **Tasker/MacroDroid** — 专门做自动化，设置开机启动 Termux
2. **让黑阈拉起** — 但黑阈没有开机执行命令的功能

你要装 Tasker 试试吗？

Explanation:
用户确认了我的分析是对的 - 19:35开机，19:38才有Boot日志，说明Termux:Boot没有自启动。

现在的情况：
- Tailscale 自启动成功了（因为之前设置了 RUN_IN_BACKGROUND allow）
- Termux:Boot 没有自启动

用户问为什么其他的成功了（Tailscale），但Termux:Boot没有。

可能的原因：
1. Tailscale 是 VPN 类应用，系统对 VPN 有特殊处理
2. appops 设置可能重启后被重置了
3. OPPO 对不同类型的应用有不同的限制

我需要检查 appops 设置是否还在，但现在 ADB 没连上。

用户说"不对35才开机，那说明就是没有自启动"，这是在确认我的分析。

现在需要想办法让 Termux:Boot 自启动。既然 Tailscale 能自启动，说明 appops 设置是有效的。但 Termux:Boot 可能需要额外的设置。

或者换个思路 - 既然黑阈能自启动且能执行命令，看看能不能让黑阈开机后自动执行启动 Termux 的命令。但之前搜索显示黑阈没有这个功能。

最后的方案还是 Tasker/MacroDroid。


[The user sent an image~ Here's what I can see:
## Image Description

This is a screenshot from a mobile phone displaying documentation for **Termux:Boot**.

### Status Bar (Top)
- Time: **19:41:52**
- Icons: Silent/mute icon, Bluetooth icon, network speed indicator showing **1.00 KB/S**, **5G** indicator, dual signal strength bars, battery level showing **75**

### Header
- Dark gray/black header bar with the title **"Termux:Boot"** in white text

### Main Content (White background, black text)

**Introduction paragraph:**
"The Termux:Boot add-on provides functionality to run programs under Termux when the device boots up."

**Usage section** (with "Usage" as a heading):
A bulleted list with 5 items:
- Start the Termux:Boot app once to allow the system to start the app at boot time.
- Create the `~/.termux/boot/` directory.
- Put scripts you want to execute inside the `~/.termux/boot/` directory.
- If there are multiple files, they will be executed in a sorted order.
- Note that you may want to run termux-wake-lock as first thing if you want to ensure that the device is prevented from sleeping.

**Example section:**
Instructions to start an sshd server and prevent sleeping at boot, with a code block containing:
```
#!/data/data/com.termux/files/usr/bin/sh
termux-wake-lock
sshd
```

**Learn more section:**
Links to the Termux community at **https://termux.org/community** (shown as blue underlined hyperlink)

**Report issues section:**
Heading visible but content cut off

### Bottom
- Navigation bar/home indicator line visible at the very bottom]
[If you need a closer look, use vision_analyze with image_url: /home/ubuntu/.hermes/cache/images/img_48cb02d7db70.jpg ~]


文档说"Start the Termux:Boot app once"就能开机自启动，但这是标准 Android 的行为。OPPO 系统有额外的自启动管理，会拦截开机广播。

你之前启动过 Termux:Boot 吗？如果没有，试试：

```bash
am start -n com.termux.boot/.BootActivity
```

启动一次后再重启测试。

Explanation:
用户发了 Termux:Boot 的文档截图。文档说：

"Start the Termux:Boot app once to allow the system to start the app at boot time."

意思是需要先启动一次 Termux:Boot 应用，系统才会允许它开机自启动。

但问题是 OPPO 系统拦截了开机广播，即使启动过一次也没用。

用户可能是想让我注意到什么？或者是在问为什么按照文档做了还是不行？


~ $ am start -n com.termux.boot/.BootActivity

Starting: Intent { cmp=com.termux.boot/.BootActivity }


好，Termux:Boot 已启动一次。

现在重启手机测试，看看这次能不能自启动。

Explanation:
用户执行了启动 Termux:Boot 的命令。根据文档说的，启动一次后系统就会允许它开机自启动。

现在可以重启测试看看是否生效了。