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 | 系统安全模式 | 0 | RenderDoc 等图形调试工具需要 |
| ro.adb.secure | ADB 安全验证 | 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
验证方法
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-23 | 1.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'"# clearEND OF DOCUMENT