编译默认root的android的user版本

本文介绍了一个关于ADB权限管理的问题及修复方法。通过修改adb.c文件中的should_drop_privileges()函数调用逻辑,确保了默认用户版本下正确进行权限下降。

在adb.c里面修改if (should_drop_privileges()),直接修改为if(should_drop_privileges() < 0),

因为默认user版本中should_drop_privileges() 返回值为true。

<think> 我们正在讨论的是Android系统的user版本(即正式发布版本)如何默认开启root权限。根据引用内容,有两种主要方法: ### 方法一:通过系统属性控制(引用[1]) 在`adb`守护进程代码中(如`main.cpp`)添加属性检查逻辑: 1. 读取属性`persist.hisense.adb.root`的值 2. 若值为`"1"`,则保持root权限(降权) 关键代码修改示例: ```cpp static bool should_drop_privileges() { // 新增属性检查 std::string kprop = android::base::GetProperty("persist.hisense.adb.root", "1"); bool root = (kprop == "1"); if (root) { return false; // 降权 } ... // 原有安全检查逻辑 } ``` **实现步骤**: 1. 修改`system/core/adb/daemon/main.cpp`文件 2. 编译系统并刷入设备 3. 通过`setprop persist.hisense.adb.root 1`使配置永久生效 > **注意**:此方法需修改ADB源码并重新编译系统[^1]。 --- ### 方法二:修改系统构建配置(引用[2]) 通过调整编译配置参数强制开启root权限: 1. **修改构建标志** 在设备配置(如`BoardConfig.mk`)中设置: ```makefile # 关闭安全限制 BOARD_BUILD_SYSTEM_ROOT_IMAGE := true ``` 2. **调整SELinux策略** 修改`system/sepolicy`相关文件,将`su`域设为默认允许: ```makefile # 在definitions.mk中允许su执行 neverallow * su_exec:file { execute }; → 改为允许规则 ``` 3. **关键系统属性修改**(`build.prop`) ```makefile # 关闭adb安全认证 ro.adb.secure=0 # 关闭系统安全保护 ro.secure=0 ``` **完整流程**: 1. 修改`build/core/main.mk`全局编译配置 2. 调整`init`进程的SELinux初始化逻辑(`selinux.cpp`) 3. 重新编译系统镜像并刷机 --- ### 两种方法对比 | 方法 | 优势 | 限制 | |--------------|-------------------------------|--------------------------| | 属性开关 | 动态切换无需重启 | 需修改ADB源码 | | 系统构建配置 | 永久生效且完整root | 需全套编译和刷机环境 | > **警告**:修改user版本root会破坏系统安全机制,仅建议用于开发设备[^2]。 --- §§ 相关问题 §§ 1. 如何通过Magisk实现非破坏性系统root? 2. 修改SELinux策略以允许root权限的注意事项? 3. 调试版Android系统(userdebug)与root版有何区别? 4. 如何防止root后的Android设备被恶意应用利用? [^1]: ADB守护进程权限控制逻辑 [^2]: Android系统构建配置修改指南 </think> 根据引用内容,要实现Android user版本默认root设置,主要有以下两种核心方法: --- ### 方法一:通过系统属性控制(引用[1]) 在ADB守护进程代码中添加属性检查逻辑: 1. **修改文件**:`system/core/adb/daemon/main.cpp` 2. **添加代码**: ```cpp static bool should_drop_privileges() { // 新增属性检查 std::string kprop = android::base::GetProperty("persist.hisense.adb.root", "1"); bool root = (kprop == "1"); if (root) { return false; // 保持root权限 } ... // 原有安全检查逻辑 } ``` 3. **设置属性**:编译后通过ADB设置永久属性 ```bash adb shell setprop persist.hisense.adb.root 1 ``` > **原理**:通过属性开关动态控制ADB守护进程是否降权[^1] --- ### 方法二:修改系统构建配置(引用[2]) 1. **关闭安全属性**(关键步骤) - 修改`build/core/main.mk`: ```makefile # 禁用安全限制 ADDITIONAL_BUILD_PROPERTIES += ro.secure=0 ADDITIONAL_BUILD_PROPERTIES += ro.adb.secure=0 ``` - 在`BoardConfig.mk`(设备目录)添加: ```makefile BOARD_BUILD_SYSTEM_ROOT_IMAGE := true ``` 2. **调整SELinux策略**(必要步骤) - 修改`system/sepolicy/definitions.mk`: ```makefile # 允许root域执行 neverallow * su_exec:file { execute }; → 移除或注释 ``` - 在`init/selinux.cpp`放宽权限限制 3. **重新编译系统**: ```bash make -j8 fastboot flashall -w ``` --- ### 操作流程总结 ```mermaid graph TD A[选择方案] --> B{方案选择} B -->|动态控制| C[修改adb守护进程代码<br>+ 设置属性] B -->|永久Root| D[修改系统构建配置<br>+ 重编译ROM] C --> E[无需刷机<br>通过ADB激活] D --> F[需完整编译<br>刷入系统镜像] ``` > **注意**:需同步修改`init`进程的权限控制逻辑(引用[2]中`init/selinux.cpp`),否则可能触发SELinux拒绝[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值