1199 words
6 minutes
面对安卓15新版调试失效的修复
2025-12-23
No Tags

Android 平板调试配置修复报告#

设备信息: 问题日期: 2025-12-23

目录#

问题描述#

在配置 Android 测试设备时遇到了两个主要问题:

问题一:设置应用闪退#

现象#

打开设置 → 开发者选项 → 应用立即崩溃并返回桌面

诊断过程#

通过 adb logcat 查看崩溃日志,发现关键错误:

java.lang.RuntimeException: Unable to resume activity {com.android.settings/com.android.settings.SubSettings}:java.lang.RuntimeException: failed to set system property "logd.logpersistd" to "clear"at com.android.settingslib.development.AbstractLogpersistPreferenceController.updateLogpersistValues(AbstractLogpersistPreferenceController.java:179)at com.android.settings.development.LogPersistPreferenceController.updateState(LogPersistPreferenceController.java:57)

根本原因#

修复方案#

使用Magisk在magisk的post-fs-data目录下 /data/adb/post-fs-data.d/99-resetprop.sh 中添加:

# 1. 设置SELinux为Permissive模式setenforce 0# 2. 修改调试相关属性resetprop -n ro.debuggable 1# 3. 提前设置logd.logpersistd属性resetprop -n logd.logpersistd clear

关键点:

问题二:RenderDoc 无法连接#

现象#

使用 RenderDoc 尝试连接 Android 设备时:

诊断过程#

检查系统调试相关属性: adb shell “su -c ‘getprop | grep -E “ro.(secure|debuggable)”’” 发现结果:

[ro.adb.secure]: [1] ❌[ro.debuggable]: [1] ✅[ro.secure]: [1] ❌

根本原因#

RenderDoc 工作原理: 安全属性的作用:

修复方案#

更新启动脚本,添加安全属性禁用:

# 禁用安全限制(RenderDoc 和图形调试需要)resetprop -n ro.secure 0resetprop -n ro.adb.secure 0

最终解决方案#

完整的启动脚本#

文件路径:/data/adb/post-fs-data.d/99-resetprop.sh 脚本内容:

#!/system/bin/sh# ============================================# 测试机调试配置脚本# 执行时机:开机早期 post-fs-data 阶段# 用途:禁用安全限制 + 启用完整调试功能# ============================================# 1. 设置SELinux为Permissive模式# - Enforcing: 严格模式,阻止未授权操作# - Permissive: 宽松模式,只记录警告但不阻止setenforce 0# 2. 禁用系统安全限制(图形调试必需)# ro.secure: 控制系统安全模式# ro.adb.secure: 控制 ADB 安全验证resetprop -n ro.secure 0resetprop -n ro.adb.secure 0# 3. 启用调试标志# ro.debuggable = 1 时,系统会:# - 显示开发者选项# - 允许更详细的调试日志# - 启用更多调试工具resetprop -n ro.debuggable 1# 4. 预设置 logd 日志属性# 避免设置应用的开发者选项因权限问题崩溃resetprop -n logd.logpersistd clear

执行权限设置#

adb shell “su -c ‘chmod 755 /data/adb/post-fs-data.d/99-resetprop.sh‘“

技术原理说明#

post-fs-data 阶段#

Android 启动过程中的关键阶段: post-fs-data 阶段特点:

resetprop 命令#

Magisk 提供的工具,用于修改系统属性: resetprop -n <属性名> <值>

关键系统属性#

属性名作用设置值说明
ro.debuggable启用系统调试功能1必需,开发者选项的基础
ro.secure系统安全模式0RenderDoc 等图形调试工具需要
ro.adb.secureADB 安全验证0解锁完整 adb 调试功能
logd.logpersistd日志持久化设置clear避免设置应用崩溃
SELinux强制访问控制Permissive允许应用修改系统属性

SELinux 模式#

Enforcing(强制): 默认模式 [ 1234.567] Type: 1400 audit(1234567890.123: 456): avc: denied { write } for pid=1234 comm=“app” name=“property” scontext=u:r:app tcontext=u:object_r:property tclass=file permissive=0 Permissive(宽松): 修改后模式 [ 1234.567] Type: 1400 audit(1234567890.123: 456): avc: denied { write } for pid=1234 comm=“app” name=“property” scontext=u:r:app tcontext=u:object_r:property tclass=file permissive=1

验证方法#

1. 验证系统属性#

# 检查关键属性adb shell "su -c 'getprop | grep -E \"ro.(secure|debuggable)\"'"

预期输出:

[ro.adb.secure]: [0][ro.debuggable]: [1][ro.secure]: [0]

2. 验证 SELinux 状态#

adb shell “su -c ‘getenforce’” 预期输出: Permissive

3. 验证设置应用#

4. 验证 RenderDoc#

5. 查看启动脚本#

adb shell “su -c ‘cat /data/adb/post-fs-data.d/99-resetprop.sh‘“

6. 检查文件权限#

adb shell “su -c ‘ls -la /data/adb/post-fs-data.d/’” 预期输出: -rwxr-xr-x 1 root root 355 2025-12-23 21:23 99-resetprop.sh

故障排除#

如果设置应用仍然崩溃#

检查是否重启了设备 验证脚本是否在开机时执行 应该输出 clear 手动执行脚本测试

如果 RenderDoc 仍然无法连接#

adb shell "su -c 'getprop ro.secure'"adb shell "su -c 'getprop ro.adb.secure'"

都应该返回 0 重启设备确保属性生效 检查 RenderDoc 日志

如果脚本未执行#

检查文件是否存在 检查 Magisk 是否正常运行 检查文件权限 应该是 -rwxr-xr-x

安全警告#

⚠️ 重要提示:这些配置会显著降低系统安全性!

风险说明#

使用建议#

✅ 适用场景: ❌ 不适用场景:

相关文件#

参考资料#

原脚本#

https://www.reddit.com/r/Magisk/comments/174sx3n/help_magiskhidepropsconf_is_dead_so_what_is_the/

Android 属性系统#

SELinux#

RenderDoc#

Magisk#

修改历史#

日期版本修改内容
2025-12-231.0初始版本,修复设置应用崩溃和 RenderDoc 连接问题

文档作者: Claude (Anthropic)创建日期: 2025-12-23最后更新: 2025-12-23

附录:完整操作记录#

初始状态#

# 检查设备连接adb devices# List of devices attached# HA29QMVJ device# 检查初始属性adb shell getprop ro.debuggable# 0

问题诊断#

# 查看设置应用崩溃日志adb logcat -d | grep -E "(AndroidRuntime|FATAL)" -A 20# 发现错误# java.lang.RuntimeException: failed to set system property "logd.logpersistd" to "clear"

解决步骤#

创建启动脚本 设置执行权限

adb shell "su -c 'cat /data/adb/post-fs-data.d/99-resetprop.sh'"adb shell "su -c 'ls -la /data/adb/post-fs-data.d/'"
adb shell "su -c 'setenforce 0'"adb shell "su -c 'getenforce'"# Permissive

重启设备

最终验证#

# 检查所有属性adb shell "su -c 'getprop | grep -E \"ro.(secure|debuggable)\"'"# [ro.adb.secure]: [0]# [ro.debuggable]: [1]# [ro.secure]: [0]# 检查 SELinuxadb shell "su -c 'getenforce'"# Permissive# 检查 logd 属性adb shell "su -c 'getprop logd.logpersistd'"# clear

END OF DOCUMENT

面对安卓15新版调试失效的修复
https://fuwari.vercel.app/posts/面对安卓15新版调试失效的修复/
Author
Axon
Published at
2025-12-23
License
CC BY-NC-SA 4.0