MTK Android User版本实现 root 功能 可进行APK的删减 和 系统img的替换
最近项目需求,要实现一个功能:"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的替换相关推荐
- Android O版本 应用锁功能
hi !what s up! 公司在开发android O版本,分配了一个应用锁功能给我,现在在这里跟大家一起分享 需求:应用锁功能(主要功能是在打开某个app的锁的时候,弹出密码锁) 心路历程:看到 ...
- android10.0(Q) root MTK 6765 user版本打开root权限(adb root权限和 apk root权限)
前言 everybody,好久不见,我胡汉三又回来了,android10.0 root 安排!!! 相比较 Android8.1.9.0 而言,Q 版本 的 root变得相当麻烦,10.0 中引入了动 ...
- MTK android 蓝牙版本查看
MTK 平台的BT版本是以 SIG认证为准的,具体可以到SIG官网查询 蓝牙分为host 和control, 需要分别过认证,所以有两个DID HCI log 里看不到qdid,只能看到支持蓝牙4.2 ...
- Android9.0 P 电源管理android各版本电量优化功能策略
针对电量优化android的改动 在最近几个android版本中已存在的电量优化功能基础上,Android 9 引入了一些新功能来持续改进设备电源管理,以确保将系统资源提供给最需要它们的应用. 近几个 ...
- android 工程模式mtk,Android L版本上user版本工程模式中gsensor校准失败
[DESCRIPTION] 工程模式中gsensor的校准需要用到em_svr这个service,但是因为build选项的原因,在user编译时,这段code没有被build,导致user版本工程模式 ...
- android opengl版本太低,安卓模拟器opengl_安卓模拟器无法安装“系统opengl版本过低”的通用解决方法_安卓模拟器通用版_通用安卓模拟器...
安卓模拟器无法安装"系统opengl版本过低"的通用解决方法 在安装安卓模拟器时,出现"系统opengl版本过低",下图提示,说明你的显卡暂不支持模拟器: 遇到 ...
- android10.0(Q) root QCOM-SM6125 user版本打开root权限
推荐两个性能优化学习地址: Blog androidperformance MTK 6735/6739/6755/6763 android8.1 user版本打开root权限(adb root权限和 ...
- Android P 9.0 MTK平台 增加以太网静态IP功能
前言 朋友们,最近又开始搞 Android P了,同样的以太网静态 IP 是少不了的功能,今天我们就开始来整一下.之前弄6.0 和 8.1 的都 ok 了. 没想到 9.0 改动还是略微有点大的.来来 ...
- android各个版本及功能介绍,Android各个版本的介绍
前言:笔者在面试的过程中,已经被问过不下三次,因此在这里分析一下.可能不够详细,请各位大佬多多包涵. 一.版本对应的API 级别 API 级别:是对 Android 平台版本提供的框架 API 修订版 ...
最新文章
- IEA:截止2015年全球太阳能光伏装机累计超228GW
- Spring @CrossOrigin 通配符 解决跨域问题
- Winrar从命令行查看压缩文件内容
- C#中ToString()格式大全(转)
- 编写自适应高度的 textarea
- Linux中常见的环境变量笔记
- 大数据(9) - Flume的安装与使用
- Window下更新python pip源
- [APEC中小企业峰会2009上]成功企业 = 理想主义 + 现实主义
- php 删除数字索引元素,PHP重置数组为连续数字索引的几种方式
- Android 获取手机号及运营商信息
- Netbackup Done status 6 解决方法
- 最常用的四种大数据分析方法
- 三坐标雷达航迹跟踪与应用
- sg11解密 php解密 SourceGuardian解密sg_load解密去除域名IP授权
- 【WPS】您选定的文件类型不支持包含多份工作表的工作簿。
- sql服务器字段顺序怎么修改,你可能不知道SQL Server索引列的升序和降序带来的性能问题...
- vi/vim保存报错:E37: No write since last change E162: No write since last change for buffer “[文件名称]“
- 讯飞AIUI智能机器人2
- ArcGIS学习笔记-1.功能-1.4 矢量图基本