adb disable-verity
ADB禁用验证(disable-verity)执行指南
🔧 命令执行准备
检查当前环境
# 1. 检查ADB连接状态
adb devices
# 应该显示设备为"device"状态# 2. 检查设备是否已授权
adb shell getprop ro.serialno
# 如果能正常返回序列号,说明连接正常# 3. 验证设备root权限
adb root
# 显示"restarting adbd as root"表示成功
🚀 执行disable-verity命令
标准执行流程
#!/bin/bash
# execute_disable_verity.shecho "🚀 开始执行 adb disable-verity..."
echo "=================================="# 方法1: 直接执行(推荐)
echo "1. 执行禁用命令..."
adb disable-verity# 检查执行结果
if [ $? -eq 0 ]; thenecho "✅ adb disable-verity 执行成功"
elseecho "❌ 命令执行失败,尝试替代方案..."# 方法2: 使用shell命令替代echo "2. 尝试替代方案..."adb shell "su -c 'setprop ro.boot.veritymode disabled'"adb shell "su -c 'setprop partition.system.verified 0'"echo "✅ 替代方案执行完成"
fi
验证执行结果
#!/bin/bash
# verify_disable_result.shecho "🔍 验证dm-verity禁用状态..."
echo "============================"# 检查verity相关属性
echo "1. 检查verity模式:"
adb shell "getprop ro.boot.veritymode"echo "2. 检查分区验证状态:"
adb shell "getprop partition.system.verified"echo "3. 检查dm-verity设备:"
adb shell "ls -la /dev/block/dm-*" 2>/dev/null || echo "未找到dm设备"echo "4. 检查挂载选项:"
adb shell "mount | grep -E 'verify|dm-verity'"# 最终状态判断
verity_mode=$(adb shell "getprop ro.boot.veritymode")
if [[ "$verity_mode" == "disabled" ]]; thenecho "🎉 dm-verity已成功禁用"
elseecho "⚠️ 可能需要重启才能生效"
fi
🔄 必须的重启步骤
重启设备应用更改
#!/bin/bash
# reboot_after_disable.shecho "🔄 重启设备以应用verity禁用..."
echo "=============================="# 重要提示
echo "⚠️  注意: 必须重启才能生效!"
echo "设备将立即重启..."# 执行重启
adb rebootecho "等待设备重新连接..."
# 等待设备重启完成
sleep 30# 检测设备重新上线
timeout=120
counter=0
while [ $counter -lt $timeout ]; doif adb devices | grep -q "device$"; thenecho "✅ 设备已重新连接"breakfisleep 5counter=$((counter + 5))echo "等待中... ${counter}秒"
doneif [ $counter -ge $timeout ]; thenecho "❌ 设备重启后连接超时"echo "请手动检查设备状态"
fi
重启后最终验证
#!/bin/bash
# final_verification.shecho "🔍 重启后最终验证..."
echo "===================="# 等待设备完全启动
sleep 10# 1. 重新获取root权限
adb root
sleep 2# 2. 最终状态检查
echo "最终verity状态:"
adb shell "getprop ro.boot.veritymode"
adb shell "getprop partition.system.verified"# 3. 测试系统分区可写性
echo "测试系统分区写入权限..."
adb remountif [ $? -eq 0 ]; thenecho "✅ 系统分区已可写"
elseecho "❌ 系统分区仍为只读,可能需要其他操作"
fi# 4. 验证实际修改能力
echo "创建测试文件验证..."
adb shell "echo 'test' > /system/test_disable_verity.txt 2>/dev/null && echo '✅ 写入测试成功' || echo '❌ 写入测试失败'"
adb shell "rm -f /system/test_disable_verity.txt 2>/dev/null"
⚠️ 常见问题解决
错误处理方案
#!/bin/bash
# disable_verity_troubleshoot.shecho "🔧 问题排查与解决..."
echo "===================="# 问题1: 设备未找到
if ! adb devices | grep -q "device$"; thenecho "❌ 问题: 设备未连接或未授权"echo "解决方案:"echo "1. 检查USB连接"echo "2. 在设备上授权USB调试"echo "3. 重启ADB服务: adb kill-server && adb start-server"exit 1
fi# 问题2: 需要root权限
echo "检查root权限..."
adb root
if [ $? -ne 0 ]; thenecho "❌ 问题: 无法获取root权限"echo "解决方案:"echo "1. 确保设备已解锁bootloader"echo "2. 检查设备是否支持root"echo "3. 尝试: adb shell su -c 'command'"
fi# 问题3: 命令不支持
echo "测试命令支持性..."
adb shell "which disable-verity" >/dev/null 2>&1
if [ $? -ne 0 ]; thenecho "⚠️  设备可能不支持disable-verity命令"echo "尝试替代方法..."# 替代方案adb shell "su -c 'mount -o remount,rw /system'"adb shell "su -c 'setenforce 0'"
fi
设备特定解决方案
#!/bin/bash
# device_specific_solutions.sh# 获取设备信息
device_model=$(adb shell "getprop ro.product.model")
android_version=$(adb shell "getprop ro.build.version.release")echo "📱 设备信息: $device_model, Android $android_version"
echo "=================================================="# 根据Android版本采用不同策略
major_version=$(echo $android_version | cut -d. -f1)if [ $major_version -ge 8 ]; thenecho "🔧 Android 8.0+ 设备方案"# Android 8.0+ 使用Project Trebleadb disable-verityadb reboot
elif [ $major_version -ge 6 ]; thenecho "🔧 Android 6.0-7.x 设备方案" # Android 6.0-7.x 标准方案adb disable-verityadb reboot
elseecho "🔧 Android 5.x 及以下设备方案"# 老版本Androidadb rootadb remount
fi
📋 完整执行流程
一键执行脚本
#!/bin/bash
# complete_disable_verity.shset -eecho "🎯 ADB禁用验证完整流程"
echo "===================="# 函数:记录日志
log() {echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1"
}# 步骤1: 环境检查
log "步骤1: 检查ADB环境..."
adb devices
adb root# 步骤2: 执行禁用
log "步骤2: 执行disable-verity..."
if adb disable-verity; thenlog "✅ disable-verity执行成功"
elselog "⚠️ 使用替代方案..."adb shell "setprop ro.boot.veritymode disabled"adb shell "setprop partition.system.verified 0"
fi# 步骤3: 重启设备
log "步骤3: 重启设备..."
adb reboot
log "设备重启中,等待30秒..."
sleep 30# 步骤4: 重新连接验证
log "步骤4: 重新连接验证..."
adb wait-for-device
adb root# 步骤5: 最终验证
log "步骤5: 最终验证..."
verity_state=$(adb shell "getprop ro.boot.veritymode")
if [[ "$verity_state" == "disabled" ]]; thenlog "🎉 dm-verity禁用成功!"
elselog "❌ dm-verity禁用可能未生效"
filog "流程完成"
🛡️ 安全注意事项
风险提示与备份
#!/bin/bash
# safety_precautions.shecho "⚠️  ⚠️  ⚠️  重要安全提示 ⚠️  ⚠️  ⚠️"
echo "================================"# 风险提示
cat << 'EOF'
🔴 安全风险说明:1. 系统完整性风险- 禁用验证后系统文件可能被恶意修改- 失去系统完整性保护2. 稳定性风险  - 系统修改可能导致崩溃- OTA更新可能失败3. 保修问题- 可能影响设备保修✅ 仅在以下情况使用:- 开发调试需要- 刷入自定义ROM- 系统修改需求
EOF# 确认操作
read -p "确认了解风险并继续? (输入YES继续): " confirmationif [[ "$confirmation" != "YES" ]]; thenecho "操作已取消"exit 1
fi# 建议备份
echo "建议先备份重要数据..."
adb backup -apk -shared -all -f backup.ab
echo "备份文件: backup.ab"
🎯 执行命令
现在请按以下步骤执行:
- 首先确保设备连接正常: - adb devices
- 执行禁用命令: - adb disable-verity
- 重启设备: - adb reboot
- 验证结果: - adb shell getprop ro.boot.veritymode
