最近项目需求,要实现一个功能:"Android在user版本的状态下可以进行烧制system.img 和 可以进行对系统的system/app下面的APK 以及 data/* 下所有的文件进行烧录".拿到需求之后做了大量的调研,不再一一写出,只把调研和修改文件写出来,修改过程中虽然遇到了很多的坑,但功能实现了,为了不让别的同学可能再入此坑,在此记录一下,也方便后期翻阅.

正常的Android debug版本如下可以进行root 

$ adb root
adbd is already running as root
$ adb remount
remount succeeded

在开发的过程中遇到了一个比较奇怪的现象 ,如上图所示,显示都是成功的,但是就是不能进行 push操作,还有删除操作. 最后发现是 bootable/bootloader/lk/app/aboot.c 文件进行了读写权限限制,修改了 aboot.c 文件之后 fastboot flash aboot emmc_appsboot.mbn,然后烧录 bootimage之后重烧bootimg才能生效.

本文基于Android7.1 进行修改.

主要修改文件和patch如下:

主要涉及的文件路径如下:

#device
device/qcom/common/base.mk
device/qcom/msmxxx/overlay/frameworks/base/packages/SettingsProvider/res/values/defaults.xml
device/qcom/msmxxx/overlay/frameworks/base/packages/SystemUI/res/values/config.xml
device/qcom/msmxxx/system.prop#build
build/core/main.mk#system
system/core/adb/Android.mk
system/sepolicy/Android.mk#bootable
bootable/bootloader/lk/app/aboot/aboot.c

将编译user版本的修改成 0

device/qcom/common/base.mk

--- a/qcom/common/base.mk
+++ b/qcom/common/base.mk
@@ -974,7 +974,7 @@ifeq ($(TARGET_BUILD_VARIANT),user)PRODUCT_DEFAULT_PROPERTY_OVERRIDES+= \
-    ro.adb.secure=1
+    ro.adb.secure=0endif

去掉锁屏和user版上去掉adb授权过程,赋予adb root权限
device/qcom/msmxxx/overlay/frameworks/base/packages/SettingsProvider/res/values/defaults.xml

--- /dev/null
+++ b/qcom/msmxxx/overlay/frameworks/base/packages/SettingsProvider/res/values/defaults.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <bool name="def_lockscreen_disabled">true</bool>
+</resources>

device/qcom/msmxxx/overlay/frameworks/base/packages/SystemUI/res/values/config.xml

--- a/qcom/msmxxx/overlay/frameworks/base/packages/SystemUI/res/values/config.xml
+++ b/qcom/msmxxx/overlay/frameworks/base/packages/SystemUI/res/values/config.xml
@@ -23,4 +23,5 @@<resources><!-- string that specifies the package name of SLC[Subsidy Lock Client] --><string name="config_slc_package_name" translatable="false">com.rjio.slc</string>
+    <bool name="config_enableKeyguardService">false</bool></resources>

添加root权限 和 去掉锁屏adb授权过程
device/qcom/msmxxx/system.prop

--- a/qcom/msmxxx/system.prop
+++ b/qcom/msmxxx/system.prop
@@ -205,3 +205,4 @@#zhidao charlepersist.service.bt.a2dp.sink=truepersist.service.bt.hfp.client=true
+ro.lockscreen.disable.default=true
+service.adb.root=1

修改 ro.secure和  security.perf_harden 的值

build/core/main.mk

--- a/core/main.mk
+++ b/core/main.mk
@@ -390,11 +390,11 @@tags_to_install :=ifneq (,$(user_variant))# Target is secure in user builds.
-  ADDITIONAL_DEFAULT_PROPERTIES += ro.secure=1
-  ADDITIONAL_DEFAULT_PROPERTIES += security.perf_harden=1
+  ADDITIONAL_DEFAULT_PROPERTIES += ro.secure=0
+  ADDITIONAL_DEFAULT_PROPERTIES += security.perf_harden=0ifeq ($(user_variant),user)
-    ADDITIONAL_DEFAULT_PROPERTIES += ro.adb.secure=1
+    ADDITIONAL_DEFAULT_PROPERTIES += ro.adb.secure=0endififeq ($(user_variant),userdebug)
@@ -402,7 +402,7 @@tags_to_install += debugelse# Disable debugging in plain user builds.
-    enable_target_debugging :=
+    enable_target_debugging := trueendif# Disallow mock locations by default for user builds
@@ -426,7 +426,7 @@INCLUDE_TEST_OTA_KEYS := trueelse # !enable_target_debugging# Target is less debuggable and adbd is off by default
-  ADDITIONAL_DEFAULT_PROPERTIES += ro.debuggable=0
+  ADDITIONAL_DEFAULT_PROPERTIES += ro.debuggable=1endif # !enable_target_debugging## eng ##

修改adb编译所属权限
system/core/adb/Android.mk

--- a/core/adb/Android.mk
+++ b/core/adb/Android.mk
@@ -327,12 +327,12 @@-D_GNU_SOURCE \-Wno-deprecated-declarations \-LOCAL_CFLAGS += -DALLOW_ADBD_NO_AUTH=$(if $(filter userdebug eng,$(TARGET_BUILD_VARIANT)),1,0)
+LOCAL_CFLAGS += -DALLOW_ADBD_NO_AUTH=1-ifneq (,$(filter userdebug eng,$(TARGET_BUILD_VARIANT)))
+#ifneq (,$(filter userdebug eng,$(TARGET_BUILD_VARIANT)))LOCAL_CFLAGS += -DALLOW_ADBD_DISABLE_VERITY=1LOCAL_CFLAGS += -DALLOW_ADBD_ROOT=1
-endif
+#endifLOCAL_MODULE := adbd

设置车机重启之后的 sepolicy 权限
system/sepolicy/Android.mk

--- a/sepolicy/Android.mk
+++ b/sepolicy/Android.mk
@@ -94,7 +94,7 @@@mkdir -p $(dir $@)$(hide) m4 $(PRIVATE_ADDITIONAL_M4DEFS) \-D mls_num_sens=$(PRIVATE_MLS_SENS) -D mls_num_cats=$(PRIVATE_MLS_CATS) \
-       -D target_build_variant=$(TARGET_BUILD_VARIANT) \
+      -D target_build_variant=eng \-s $^ > $@$(hide) sed '/dontaudit/d' $@ > $@.dontaudit@@ -108,7 +108,6 @@echo "ERROR: permissive domains not allowed in user builds" 1>&2; \echo "List of invalid domains:" 1>&2; \cat $@.permissivedomains 1>&2; \
-       exit 1; \fi$(hide) mv $@.tmp $@@@ -132,7 +131,7 @@@mkdir -p $(dir $@)$(hide) m4 $(PRIVATE_ADDITIONAL_M4DEFS) \-D mls_num_sens=$(PRIVATE_MLS_SENS) -D mls_num_cats=$(PRIVATE_MLS_CATS) \
-       -D target_build_variant=$(TARGET_BUILD_VARIANT) \
+      -D target_build_variant=eng \-D target_recovery=true \-s $^ > $@@@ -145,7 +144,6 @@echo "ERROR: permissive domains not allowed in user builds" 1>&2; \echo "List of invalid domains:" 1>&2; \cat $@.permissivedomains 1>&2; \
-       exit 1; \fi$(hide) mv $@.tmp $@

到此步骤的时候 连接上adb其实就可以进行adb root和 remount操作了, 但是对 system/   &  data/* 文件夹 不可以进行操作.

修改了 aboot.c 文件之后

可以使用 fast 命令 进行刷机操作同时烧录emmc_appsboot.mbn和bootimg才能生效.

bootable/bootloader/lk/app/aboot/aboot.c 

--- a/bootloader/lk/app/aboot/aboot.c
+++ b/bootloader/lk/app/aboot/aboot.c
@@ -845,11 +845,15 @@#if VERIFIED_BOOT/* Write protect the device info */
+
+  /*
+if (!boot_into_recovery && target_build_variant_user() && devinfo_present && mmc_write_protect("devinfo", 1)){dprintf(INFO, "Failed to write protect dev info\n");ASSERT(0);}
+
+  */
+#endif/* Turn off splash screen if enabled */

user  支持 fastboot

bootable/bootloader/lk/makefile#ifeq ($(TARGET_BUILD_VARIANT),user)
#  CFLAGS += -DDISABLE_FASTBOOT_CMDS=1
#endif

fastboot刷机命令

adb reboot bootloader
fastboot flash aboot emmc_appsboot.mbn
fastboot flash boot boot.img
fastboot flash cache cache.img
fastboot flash system system.img
fastboot flash userdata userdata.img
fastboot flash recovery recovery.img
fastboot flash persist persist.img
fastboot reboot

限制adb使用,留用后门供 自己的开发人员使用,在此处也可以修改默认端口值

device/qcom/msmxxx/system.prop添加
my.adb.myroot=0

添加字段在system/core/adb/services.cpp 添加限制

diff --git a/core/adb/services.cpp b/core/adb/services.cpp
--- a/core/adb/services.cpp
+++ b/core/adb/services.cpp
@@ -80,6 +80,14 @@return;}+        property_get("my.adb.myroot", value, "0");
+        if (strcmp(value, "0") == 0) {
+            WriteFdExactly(fd, "adbd root cannot run\n");
+            adb_close(fd);
+            return;
+        }
+      property_set("service.adb.root", "1");WriteFdExactly(fd, "restarting adbd as root\n");adb_close(fd);

之后就可以使用命令行进行root后门操作

adb shell setprop my.adb.myroot=1adb root
adb remount

MTK Android User版本实现 root 功能 可进行APK的删减 和 系统img的替换相关推荐

  1. Android O版本 应用锁功能

    hi !what s up! 公司在开发android O版本,分配了一个应用锁功能给我,现在在这里跟大家一起分享 需求:应用锁功能(主要功能是在打开某个app的锁的时候,弹出密码锁) 心路历程:看到 ...

  2. android10.0(Q) root MTK 6765 user版本打开root权限(adb root权限和 apk root权限)

    前言 everybody,好久不见,我胡汉三又回来了,android10.0 root 安排!!! 相比较 Android8.1.9.0 而言,Q 版本 的 root变得相当麻烦,10.0 中引入了动 ...

  3. MTK android 蓝牙版本查看

    MTK 平台的BT版本是以 SIG认证为准的,具体可以到SIG官网查询 蓝牙分为host 和control, 需要分别过认证,所以有两个DID HCI log 里看不到qdid,只能看到支持蓝牙4.2 ...

  4. Android9.0 P 电源管理android各版本电量优化功能策略

    针对电量优化android的改动 在最近几个android版本中已存在的电量优化功能基础上,Android 9 引入了一些新功能来持续改进设备电源管理,以确保将系统资源提供给最需要它们的应用. 近几个 ...

  5. android 工程模式mtk,Android L版本上user版本工程模式中gsensor校准失败

    [DESCRIPTION] 工程模式中gsensor的校准需要用到em_svr这个service,但是因为build选项的原因,在user编译时,这段code没有被build,导致user版本工程模式 ...

  6. android opengl版本太低,安卓模拟器opengl_安卓模拟器无法安装“系统opengl版本过低”的通用解决方法_安卓模拟器通用版_通用安卓模拟器...

    安卓模拟器无法安装"系统opengl版本过低"的通用解决方法 在安装安卓模拟器时,出现"系统opengl版本过低",下图提示,说明你的显卡暂不支持模拟器: 遇到 ...

  7. android10.0(Q) root QCOM-SM6125 user版本打开root权限

    推荐两个性能优化学习地址: Blog androidperformance MTK 6735/6739/6755/6763 android8.1 user版本打开root权限(adb root权限和 ...

  8. Android P 9.0 MTK平台 增加以太网静态IP功能

    前言 朋友们,最近又开始搞 Android P了,同样的以太网静态 IP 是少不了的功能,今天我们就开始来整一下.之前弄6.0 和 8.1 的都 ok 了. 没想到 9.0 改动还是略微有点大的.来来 ...

  9. android各个版本及功能介绍,Android各个版本的介绍

    前言:笔者在面试的过程中,已经被问过不下三次,因此在这里分析一下.可能不够详细,请各位大佬多多包涵. 一.版本对应的API 级别 API 级别:是对 Android 平台版本提供的框架 API 修订版 ...

最新文章

  1. IEA:截止2015年全球太阳能光伏装机累计超228GW
  2. Spring @CrossOrigin 通配符 解决跨域问题
  3. Winrar从命令行查看压缩文件内容
  4. C#中ToString()格式大全(转)
  5. 编写自适应高度的 textarea
  6. Linux中常见的环境变量笔记
  7. 大数据(9) - Flume的安装与使用
  8. Window下更新python pip源
  9. [APEC中小企业峰会2009上]成功企业 = 理想主义 + 现实主义
  10. php 删除数字索引元素,PHP重置数组为连续数字索引的几种方式
  11. Android 获取手机号及运营商信息
  12. Netbackup Done status 6 解决方法
  13. 最常用的四种大数据分析方法
  14. 三坐标雷达航迹跟踪与应用
  15. sg11解密 php解密 SourceGuardian解密sg_load解密去除域名IP授权
  16. 【WPS】您选定的文件类型不支持包含多份工作表的工作簿。
  17. sql服务器字段顺序怎么修改,你可能不知道SQL Server索引列的升序和降序带来的性能问题...
  18. vi/vim保存报错:E37: No write since last change E162: No write since last change for buffer “[文件名称]“
  19. 讯飞AIUI智能机器人2
  20. ArcGIS学习笔记-1.功能-1.4 矢量图基本

热门文章

  1. amd同步多线程_AMD发布第三代锐龙3系列 首次多线程
  2. Kafka Consumer 详解
  3. 10分钟教会你看眼图,太有用了!!
  4. 网络订票后台服务器的作用,web后台服务器是如何工作的
  5. composer安装和常用操作
  6. 写在2020.10.24,为程序员节献礼?
  7. win10如何关闭和开启屏幕保护
  8. 2023年3月| 红帽RHCE考试战报-微思红帽官方授权培训中心
  9. Android签名机制及PMS中校验流程(雷惊风)
  10. 比疫情更可怕的事正在发生:关乎到每个人,背后的真相触目惊心……