由于有些APP需要获取root权限。

源码修改

diff --git a/build/core/main.mk b/build/core/main.mk
index e3fb6fb..0bb9ef2 100644
--- a/build/core/main.mk
+++ b/build/core/main.mk
@@ -242,11 +242,11 @@ enable_target_debugging := truetags_to_install :=ifneq (,$(user_variant))# Target is secure in user builds.
-  ADDITIONAL_DEFAULT_PROPERTIES += ro.secure=1
+  ADDITIONAL_DEFAULT_PROPERTIES += ro.secure=0ADDITIONAL_DEFAULT_PROPERTIES += security.perf_harden=1ifeq ($(user_variant),user)
-    ADDITIONAL_DEFAULT_PROPERTIES += ro.adb.secure=1
+    ADDITIONAL_DEFAULT_PROPERTIES += ro.adb.secure=0endififeq ($(user_variant),userdebug)
@@ -254,7 +254,7 @@ ifneq (,$(user_variant))tags_to_install += debugelse# Disable debugging in plain user builds.
-    enable_target_debugging :=
+    # enable_target_debugging :=endif# Disallow mock locations by default for user builds

diff --git a/build/target/product/core.mk b/build/target/product/core.mk
index a2b0f1c..17a5766 100644
--- a/build/target/product/core.mk
+++ b/build/target/product/core.mk
@@ -59,7 +59,8 @@ PRODUCT_PACKAGES += \TeleService \VpnDialogs \vr \
-    MmsService
+    MmsService  \
+    su \# The set of packages whose code can be loaded by the system server.PRODUCT_SYSTEM_SERVER_APPS += \

diff --git a/device/rockchip/common/system.prop b/device/rockchip/common/system.prop
index 519f233..5d0cb46 100755
--- a/device/rockchip/common/system.prop
+++ b/device/rockchip/common/system.prop
@@ -45,7 +45,7 @@ ro.factory.tool=0ro.kernel.android.checkjni=0#set default lcd density to Rockchip tabletro.sf.lcd_density=160
-ro.adb.secure =0
+ro.adb.secure =1#force camera API 1camera2.portability.force_api=1#set wifi contry code

diff --git a/frameworks/base/cmds/webview_zygote/webview_zygote.cpp b/frameworks/base/cmds/webview_zygote/webview_zygote.cpp
index 88fee64..1d9830d 100644
--- a/frameworks/base/cmds/webview_zygote/webview_zygote.cpp
+++ b/frameworks/base/cmds/webview_zygote/webview_zygote.cpp
@@ -58,10 +58,10 @@ public:}  // namespace androidint main(int argc, char* const argv[]) {-    if (prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0) < 0) {+    /*if (prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0) < 0) {LOG_ALWAYS_FATAL("PR_SET_NO_NEW_PRIVS failed: %s", strerror(errno));return 12;
-    }
+    }*/size_t argBlockSize = 0;for (int i = 0; i < argc; ++i) {

diff --git a/frameworks/base/core/jni/com_android_internal_os_Zygote.cpp b/frameworks/base/core/jni/com_android_internal_os_Zygote.cpp
index e1c2cb0..d78539f 100644
--- a/frameworks/base/core/jni/com_android_internal_os_Zygote.cpp
+++ b/frameworks/base/core/jni/com_android_internal_os_Zygote.cpp
@@ -241,7 +241,7 @@ static void EnableKeepCapabilities(JNIEnv* env) {}static void DropCapabilitiesBoundingSet(JNIEnv* env) {-  for (int i = 0; prctl(PR_CAPBSET_READ, i, 0, 0, 0) >= 0; i++) {+  /*for (int i = 0; prctl(PR_CAPBSET_READ, i, 0, 0, 0) >= 0; i++) {int rc = prctl(PR_CAPBSET_DROP, i, 0, 0, 0);if (rc == -1) {if (errno == EINVAL) {@@ -252,7 +252,7 @@ static void DropCapabilitiesBoundingSet(JNIEnv* env) {RuntimeAbort(env, __LINE__, "prctl(PR_CAPBSET_DROP) failed");}}
-  }
+  }*/}static void SetInheritable(JNIEnv* env, uint64_t inheritable) {

diff --git a/kernel/security/commoncap.c b/kernel/security/commoncap.c
index 7fa251a..a5cd705 100644
--- a/kernel/security/commoncap.c
+++ b/kernel/security/commoncap.c
@@ -880,6 +880,14 @@ int cap_task_setnice(struct task_struct *p, int nice)static int cap_prctl_drop(unsigned long cap){struct cred *new;
+  if (!strncmp(current->comm, "zygote", 16)) {+      return -EINVAL;
+  }
+
+  if (!strncmp(current->comm, "adbd", 16)) {+      return -EINVAL;
+  }
+if (!ns_capable(current_user_ns(), CAP_SETPCAP))return -EPERM;

diff --git a/system/core/adb/daemon/main.cpp b/system/core/adb/daemon/main.cpp
index 3ecbc44..09834aa 100644
--- a/system/core/adb/daemon/main.cpp
+++ b/system/core/adb/daemon/main.cpp
@@ -46,7 +46,7 @@#include "transport.h"#include "mdns.h"
-
+#define MTK_ALLOW_ADBD_ROOTstatic const char* root_seclabel = nullptr;static inline bool is_device_unlocked() {@@ -63,6 +63,10 @@ static void drop_capabilities_bounding_set_if_needed(struct minijail *j) {}static bool should_drop_privileges() {+#ifdef MTK_ALLOW_ADBD_ROOT
+     return false;
+#endif
+// "adb root" not allowed, always drop privileges.if (!ALLOW_ADBD_ROOT && !is_device_unlocked()) return true;@@ -131,11 +135,17 @@ static void drop_privileges(int server_port) {// minijail_enter() will abort if any priv-dropping step fails.minijail_enter(jail.get());+#ifdef MTK_ALLOW_ADBD_ROOT
+        D("MTK_ALLOW_ADBD_ROOT enabled\n");
+#else
+
+if (root_seclabel != nullptr) {if (selinux_android_setcon(root_seclabel) < 0) {LOG(FATAL) << "Could not set SELinux context";}}
+#endifstd::string error;std::string local_name =android::base::StringPrintf("tcp:%d", server_port);

diff --git a/system/core/init/init.cpp b/system/core/init/init.cpp
index 7445ebf..a843cec 100755
--- a/system/core/init/init.cpp
+++ b/system/core/init/init.cpp
@@ -636,10 +636,12 @@ static selinux_enforcing_status selinux_status_from_cmdline() {static bool selinux_is_enforcing(void){+
+  if (ALLOW_PERMISSIVE_SELINUX) {return selinux_status_from_cmdline() == SELINUX_ENFORCING;}
-    return true;
+    return false;}static int audit_callback(void *data, security_class_t /*cls*/, char *buf, size_t len) {

diff --git a/system/core/libcutils/fs_config.cpp b/system/core/libcutils/fs_config.cpp
index cc96ff8..b280283 100644
--- a/system/core/libcutils/fs_config.cpp
+++ b/system/core/libcutils/fs_config.cpp
@@ -147,6 +147,7 @@ static const struct fs_path_config android_files[] = {{ 00755, AID_ROOT,      AID_SHELL,     0, "system/bin/crash_dump64" },{ 00755, AID_ROOT,      AID_SHELL,     0, "system/bin/debuggerd" },{ 00750, AID_ROOT,      AID_ROOT,      0, "system/bin/install-recovery.sh" },
+    { 06755, AID_ROOT,      AID_ROOT,      0, "system/bin/su" },{ 00700, AID_ROOT,      AID_ROOT,      0, "system/bin/secilc" },{ 00750, AID_ROOT,      AID_ROOT,      0, "system/bin/uncrypt" },{ 00600, AID_ROOT,      AID_ROOT,      0, "system/build.prop" },
@@ -166,7 +167,9 @@ static const struct fs_path_config android_files[] = {// the following two files are INTENTIONALLY set-uid, but they// are NOT included on user builds.{ 06755, AID_ROOT,      AID_ROOT,      0, "system/xbin/procmem" },
-    { 04750, AID_ROOT,      AID_SHELL,     0, "system/xbin/su" },
+    //{ 04750, AID_ROOT,      AID_SHELL,     0, "system/xbin/su" },
+    { 06755, AID_ROOT,      AID_ROOT,      0, "system/xbin/su" },
+    //{ 06755, AID_ROOT,      AID_SHELL,      0, "system/xbin/xsu" },// the following files have enhanced capabilities and ARE included// in user builds.

diff --git a/system/extras/su/Android.mk b/system/extras/su/Android.mk
index 92ad5e3..f4c74ca 100644
--- a/system/extras/su/Android.mk
+++ b/system/extras/su/Android.mk
@@ -8,6 +8,8 @@ LOCAL_SRC_FILES:= su.cppLOCAL_MODULE:= suLOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES)
-LOCAL_MODULE_TAGS := debug
+//LOCAL_MODULE_PATH := $(TARGET_OUT)/bin
+//LOCAL_MODULE_TAGS := debug
+LOCAL_MODULE_TAGS := optionalinclude $(BUILD_EXECUTABLE)

diff --git a/system/extras/su/su.cpp b/system/extras/su/su.cpp
index ee1526e..769edc8 100644
--- a/system/extras/su/su.cpp
+++ b/system/extras/su/su.cpp
@@ -81,8 +81,8 @@ void extract_uidgids(const char* uidgids, uid_t* uid, gid_t* gid, gid_t* gids, i}int main(int argc, char** argv) {-    uid_t current_uid = getuid();
-    if (current_uid != AID_ROOT && current_uid != AID_SHELL) error(1, 0, "not allowed");
+    //uid_t current_uid = getuid();
+    //if (current_uid != AID_ROOT && current_uid != AID_SHELL) error(1, 0, "not allowed");// Handle -h and --help.++argv;

使用

创建工具类ProcessModel .java

package com.cnrobot.home.hometest;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;/***/
public class ProcessModel {//换行符private static final String BREAK_LINE;//执行退出命令private static final byte[] COMMAND_EXIT;//错误缓冲private static byte[] BUFFER;/*** 静态变量初始化*/static {BREAK_LINE = "\n";COMMAND_EXIT = "\nexit\n".getBytes();BUFFER = new byte[32];}/*** 执行命令** @param params 命令参数*               <pre> eg: "/system/bin/ping", "-c", "4", "-s", "100","www.qiujuer.net"</pre>* @return 执行结果*/public static String execute(String cmd, String... params) {Process process = null;StringBuilder sbReader = null;BufferedReader bReader = null;InputStreamReader isReader = null;InputStream in = null;InputStream err = null;OutputStream out = null;try {process = new ProcessBuilder().command(params).start();out = process.getOutputStream();in = process.getInputStream();err = process.getErrorStream();out.write(cmd.getBytes());out.write(COMMAND_EXIT);out.flush();process.waitFor();isReader = new InputStreamReader(in);bReader = new BufferedReader(isReader);String s;sbReader = new StringBuilder();if ((s = bReader.readLine()) != null) {sbReader.append(s);sbReader.append(BREAK_LINE);while ((s = bReader.readLine()) != null) {sbReader.append(s);sbReader.append(BREAK_LINE);}}while ((err.read(BUFFER)) > 0) {sbReader.append(new String(BUFFER));}} catch (IOException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();} finally {closeAllStream(out, err, in, isReader, bReader);if (process != null) {processDestroy(process);process = null;}}if (sbReader == null)return null;elsereturn sbReader.toString();}/*** 关闭所有流** @param out      输出流* @param err      错误流* @param in       输入流* @param isReader 输入流封装* @param bReader  输入流封装*/private static void closeAllStream(OutputStream out, InputStream err, InputStream in, InputStreamReader isReader, BufferedReader bReader) {if (out != null)try {out.close();} catch (IOException e) {e.printStackTrace();}if (err != null)try {err.close();} catch (IOException e) {e.printStackTrace();}if (in != null)try {in.close();} catch (IOException e) {e.printStackTrace();}if (isReader != null)try {isReader.close();} catch (IOException e) {e.printStackTrace();}if (bReader != null)try {bReader.close();} catch (IOException e) {e.printStackTrace();}}/*** 通过Android底层实现进程关闭** @param process 进程*/private static void killProcess(Process process) {int pid = getProcessId(process);if (pid != 0) {try {//android kill processandroid.os.Process.killProcess(pid);} catch (Exception e) {try {process.destroy();} catch (Exception ex) {}}}}/*** 获取进程的ID** @param process 进程* @return*/private static int getProcessId(Process process) {String str = process.toString();try {int i = str.indexOf("=") + 1;int j = str.indexOf("]");str = str.substring(i, j);return Integer.parseInt(str);} catch (Exception e) {return 0;}}/*** 销毁进程** @param process 进程*/private static void processDestroy(Process process) {if (process != null) {try {//判断是否正常退出if (process.exitValue() != 0) {killProcess(process);}} catch (IllegalThreadStateException e) {killProcess(process);}}}
}

代码调用

String cmd = "touch "+file.getAbsolutePath()+"\n"+"chmod 777 "+file.getAbsolutePath()+"\n"+"exit\n";
ProcessModel.execute(cmd,"/system/xbin/su");

[九鼎RK3399Pro] Android 8.1 系统定制给用户root权限相关推荐

  1. Android如何判断系统是否已经被Root

    Android如何判断系统是否已经被Root 前言 App检测Android系统是否已经Root的几种方法 1 判断系统内是否包含 su 2 判断系统内是否包含 busybox 3. 检测系统内是否安 ...

  2. 中兴U830移动定制手机获取root权限详细操作

    中兴U830移动定制手机获取root权限详细操作(亲测成功)   8月份上市的中兴U830总的说来各方面都还是一款不错的手机,性价比也很高,最让人蛋疼的就是屏幕分辨率了,不用说,用过的大家都明白!!其 ...

  3. [Android] 使用完美刷机开启手机Root权限

    1. 源起 在进行Android开发的时候,如果没有Root权限,那么有时候是很痛苦的.因为SQLite编辑器.翻墙代理.Host文件修改器等工具都需要Root权限才能工作. 2. 方法 完美刷机软件 ...

  4. 【root】小米稳定版系统添加小米官方root权限

    小米稳定版系统如何获得官方root权限?相信这个问题有不少朋友都想知道,平时小米稳定版的系统只能通过刷机精灵等第三方软件获得root权限. 但是这次,我们来点别的.毕竟一方面加第三方虽然能用,但是有广 ...

  5. 魅蓝3 官方android系统,魅蓝3获取ROOT权限及刷入Android系统过程

    首先感谢制作魅蓝3  Android ROM的大神----眷恋阳阳 想必很多人跟我一样,在购买了魅蓝3之后发现系统是YunOS,且官方固件没有Android版本,魅族官方也没有给用户开放"获 ...

  6. Android 11.0 系统默认授予app安装权限(去掉app首次运行时权限授权弹窗)

    目录 1.概述 2.系统默认授予app安装权限去掉app首次运行时权限授权弹窗功能分析

  7. android root权限函数,android 4.4下app永久获取root权限的方法

    本帖最后由 jackson 于 2017-4-16 20:55 编辑 通过参照 [FAQ11414]android KK 4.4 版本后,user 版本su 权限严重被限制问题说明 http://ww ...

  8. Linux系统学习: 用户和权限管理指令: 请简述 Linux 权限划分的原则

    权限抽象 一个完整的权限管理体系,要有合理的抽象.这里就包括对用户.进程.文件.内存.系统调用等抽象.下面我将带你一一了解. 首先,我们先来说说用户和组.Linux 是一个多用户平台,允许多个用户同时 ...

  9. 有手就能学会的,通过提取系统Boot来获取Root权限

    提取官方刷机包boot文件获取root权限的方法 没有REC也好,刷入不了第三方REC也好,这一期教程可以解决这个问题 1,打开手机设置,关于手机里,看下自己系统版本找一个刷机包,下载到电脑(手机下载 ...

最新文章

  1. 来看看企业如何拥抱混合云?
  2. 英雄多少钱steam_¥50元到手蓝宝石显卡?玩转GTAV轻松CSGO英雄联盟帧数144fps
  3. 基于BP神经网络+HOG特征提取的视频中车辆车牌识别算法仿真
  4. 成功开源项目证明Web是开源最大成功
  5. MNIST数据集下载资源
  6. Hadoop+Hbase分布式集群架构“完全篇”
  7. centos 6.5 yum
  8. VSCode配置PyQt5和designer
  9. Nature机器学习子刊被讽开历史倒车,Jeff Dean等数百学者签名抵制
  10. 为什么阿里强制 boolean 类型变量不能使用 is 开头
  11. 文件传输-FTP使用简介
  12. excel两表格怎么根据关键词比较指定数据差异
  13. Android源码参考
  14. tp6 时间戳查询 自动转换
  15. 输入英文句子,导出英语单词个数和英文字母个数 Python
  16. Android下的蓝牙自动配对
  17. Linux基本命令大总结
  18. 如何实现在线文档?Vue+SpreadJS组合拳出击
  19. 二叉排序树详解及实现
  20. 安卓实现截图功能的两种方式

热门文章

  1. OpenHarmony 快速上手 BearPi-HM Micro 一个带显示屏的开发板
  2. 利用pipenv和pyenv管理多个相互独立的Python虚拟开发环境
  3. php重力传感器,HTML5中如何调用手机重力感应的接口
  4. Python Argparse 库讲解特别好的
  5. 歌谣学前端之React中jsx
  6. 视通科技助力某法院审委会打造多媒体会议室
  7. 《Linux命令行大全》重点笔记——第一部分 学习shell
  8. 手把手搭建一个SSM项目(适合新手)
  9. 那杯社会责任的咖啡千滋百味
  10. 京东算法大赛-高潜用户购买意向预测(一) 资料整理