Android 10 编译完全root版本

编译版本 编译分支 目标设备 目标代号
QP1A.190711.020 android-10.0.0_r2 Pixel sailfish

1.修改/aosp/system/extras/su/su.cpp

// 注释掉第83-84行
// uid_t current_uid = getuid();
// if (current_uid != AID_ROOT && current_uid != AID_SHELL) error(1, 0, "not allowed");

2.修改/aosp/system/core/libcutils/fs_config.cpp

// the following files have enhanced capabilities and ARE included
// in user builds.
// 添加下面代码至212行处,注意标点符号不要漏掉
{ 06755, AID_ROOT,      AID_ROOT,      0, "system/bin/su" },

3. 修改/aosp/frameworks/base/core/jni/com_android_internal_os_Zygote.cpp

// 修改542行处,注释掉DropCapabilitiesBoundingSet方法体
static void DropCapabilitiesBoundingSet(fail_fn_t fail_fn) {
//   for (int i = 0; prctl(PR_CAPBSET_READ, i, 0, 0, 0) >= 0; i++) {;
//     if (prctl(PR_CAPBSET_DROP, i, 0, 0, 0) == -1) {
//       if (errno == EINVAL) {
//         ALOGE("prctl(PR_CAPBSET_DROP) failed with EINVAL. Please verify "
//               "your kernel is compiled with file capabilities support");
//       } else {
//         fail_fn(CREATE_ERROR("prctl(PR_CAPBSET_DROP, %d) failed: %s", i, strerror(errno)));
//       }
//     }
//   }
}

4. 修改/aosp/system/core/adb/daemon/main.cpp

// 修改should_drop_capabilities_bounding_set返回false
static bool should_drop_capabilities_bounding_set() {
    if (ALLOW_ADBD_ROOT || is_device_unlocked()) {
        if (__android_log_is_debuggable()) {
            return false;
        }
    }
//    return true;
    return false;
}

5. 修改/aosp/system/core/init/selinux.cpp

// 修改IsEnforcing方法返回false, 注释掉StatusFromCmdline方法
// EnforcingStatus StatusFromCmdline() {
//     EnforcingStatus status = SELINUX_ENFORCING;

//     import_kernel_cmdline(false,
//                           [&](const std::string& key, const std::string& value, bool in_qemu) {
//                               if (key == "androidboot.selinux" && value == "permissive") {
//                                   status = SELINUX_PERMISSIVE;
//                               }
//                           });

//     return status;
// }

bool IsEnforcing() {
    // if (ALLOW_PERMISSIVE_SELINUX) {
        // return StatusFromCmdline() == SELINUX_ENFORCING;
    // }
    // return true;
    return false;
}

6. 编译系统

# 调用lunch, 选择对应设备(Pixel对应sailfish)
lunch
# 编译系统, 40个线程可能导致电脑非常卡顿
make -j40
# 编译成功生成位置:out/target/product/sailfish/
# 刷机
adb reboot bootloader
fastboot flashall -w

7. 测试root是否正常

安装RootExplorer查看是否可以挂载系统区即可

无法读写系统分区:

adb root
adb disable-verity
# 可能会要求重启
adb remount

# 出现remount succeeded,表示成功

你可能感兴趣的:(Android 10 编译完全root版本)