Android12 禁用adb

这种做法没有删除任何adb相关的东西,只是设置persist.sys.usb.config中的adb相关属性时添加宏控制。
userdebug版本一样可以禁用

添加宏开关
  • device/mediatek/mt6761/BoardConfig.mk
# for adb
ADB_ENABLE:=false
添加ro.adb.enabled属性
  • build/make/core/main.mk
# for adb
ifeq (true,$(strip $(ADB_ENABLE)))ADDITIONAL_SYSTEM_PROPERTIES += ro.adb.enabled=1
elseADDITIONAL_SYSTEM_PROPERTIES += ro.adb.enabled=0
endif
根据ro.adb.enabled设置persist.sys.usb.config
  • system/core/init/property_service.cpp
static uint32_t PropertySet(const std::string& name, const std::string& value, std::string* error) {// for adb if (name == "persist.sys.usb.config" /*|| name == "sys.usb.config"*/){LOG(INFO) << " name= " << name << " value= " << value;std::string adb_value = GetProperty("ro.adb.enabled", "0");if (adb_value == "0"){if (value.find("adb") != std::string::npos){LOG(ERROR) << " ro.adb.enabled is 0, adb is not allowed ";return PROP_SUCCESS;}}}// endsize_t valuelen = value.size();if (!IsLegalPropertyName(name)) {*error = "Illegal property name";return PROP_ERROR_INVALID_NAME;}if (auto result = IsLegalPropertyValue(name, value); !result.ok()) {*error = result.error().message();return PROP_ERROR_INVALID_VALUE;}
#ifdef MTK_LOGSnapshotPropertyFlowTraceLog("_spf");
#endifprop_info* pi = (prop_info*) __system_property_find(name.c_str());if (pi != nullptr) {// ro.* properties are actually "write-once".if (StartsWith(name, "ro.")) {*error = "Read-only property was already set";return PROP_ERROR_READ_ONLY_PROPERTY;}#ifdef MTK_LOGSnapshotPropertyFlowTraceLog("_spu");
#endif__system_property_update(pi, value.c_str(), valuelen);} else {
#ifdef MTK_LOGSnapshotPropertyFlowTraceLog("_spa");
#endifint rc = __system_property_add(name.c_str(), name.size(), value.c_str(), valuelen);if (rc < 0) {*error = "__system_property_add failed";return PROP_ERROR_SET_FAILED;}}// Don't write properties to disk until after we have read all default// properties to prevent them from being overwritten by default values.if (persistent_properties_loaded && StartsWith(name, "persist.")) {WritePersistentProperty(name, value);}// If init hasn't started its main loop, then it won't be handling property changed messages// anyway, so there's no need to try to send them.auto lock = std::lock_guard{accept_messages_lock};if (accept_messages) {
#ifdef MTK_LOGSnapshotPropertyFlowTraceLog("SPC");
#endifPropertyChanged(name, value);}#ifdef MTK_LOGif (GetMTKLOGDISABLERATELIMIT()) // MTK add logPropSetLog(name, value, error);
#endifreturn PROP_SUCCESS;
}
相关UI及开发者模式控制
  • frameworks/base/core/java/android/os/Build.java
 /** True if Adb is enabled*/public static final boolean IS_ADB_ENABLED =SystemProperties.getInt("ro.adb.enabled", 0) == 1;  
  • vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/SettingsActivity.java
 // True if Adb is enabledfinal boolean showDev = Build.IS_ADB_ENABLED/*DevelopmentSettingsEnabler.isDevelopmentSettingsEnabled(this)&& !Utils.isMonkeyRunning()*/;somethingChanged = setTileEnabled(changedList, new ComponentName(packageName,Settings.DevelopmentSettingsDashboardActivity.class.getName()),showDev, isAdmin)|| somethingChanged;
  • vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/connecteddevice/usb/UsbDetailsFunctionsController.java
 @Overridepublic boolean isAvailable() {// for adb// True if Adb is enabledreturn Build.IS_ADB_ENABLED/*!Utils.isMonkeyRunning()*/;}
  • vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/deviceinfo/BuildNumberPreferenceController.java
 @Overridepublic boolean handlePreferenceTreeClick(Preference preference) {// for adbif (preference.getKey().equals("build_number")){if (!Build.IS_ADB_ENABLED){preference.setSelectable(false);}}// endif (!TextUtils.equals(preference.getKey(), getPreferenceKey())) {return false;}...}

修改完后,连接USB不会显示功能选择列表,无法连点调出开发者模式。

测试

编译完成后,build.prop中显示

ro.adb.enabled=0
... 
# Auto-added by post_process_props.py
persist.sys.usb.config=adb
# end of file

命令窗口显示

C:\Users\dell>adb devices
List of devices attachedC:\Users\dell>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/47476.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

信创学习笔记(三),信创之操作系统OS思维导图

创作不易 只因热爱!! 热衷分享&#xff0c;一起成长! “你的鼓励就是我努力付出的动力” 一. 回顾信创CPU芯片 1. x86应用生态最丰富, 海光(3,5,7)授权较新,无桌面授权,多用于服务器 兆芯(ZX, KX, KH)授权较早期. 2. ARMv8移动端应用生态丰富, 华为鲲鹏(9) ,制裁中&#xff0c;…

基于python的三次样条插值原理及代码

1 三次样条插值 1.1 三次样条插值的基本概念 三次样条插值是通过求解三弯矩方程组&#xff08;即三次样条方程组的特殊形式&#xff09;来得出曲线函数组的过程。在实际计算中&#xff0c;还需要引入边界条件来完成计算。样条插值的名称来源于早期工程师制图时使用的细长木条&…

oracle 经营范围 设计

在Oracle数据库中设计经营范围通常涉及创建相关的数据库表来记录和管理经营范围内的数据。以下是一个简单的例子&#xff0c;展示了如何设计一个经营范围表&#xff1a; CREATE TABLE business_units (bu_id NUMBER PRIMARY KEY,bu_name VARCHAR2(100),parent_bu_id NUMBER,CO…

探索Node.js中的node-xlsx:将Excel文件解析为JSON

在Node.js开发中&#xff0c;处理Excel文件是一个常见需求&#xff0c;特别是在需要导入大量数据或生成报表的场景中。node-xlsx 是一个强大的库&#xff0c;它提供了Excel文件的解析和生成功能。本文将深入探讨 node-xlsx 的使用&#xff0c;并通过一个案例演示如何将Excel文件…

算法——双指针(day2)

目录 202.快乐数 题目解析&#xff1a; 算法解析&#xff1a; 代码&#xff1a; 11.盛最多水的容器 题目解析&#xff1a; 算法解析&#xff1a; 代码&#xff1a; 202.快乐数 力扣链接&#xff1a;202.快乐数 题目解析&#xff1a; 本文中最重要的一句话就是重复平方和…

AI自动生成PPT哪个软件好?高效制作PPT优选这4个

7.15初伏的到来&#xff0c;也宣告三伏天的酷热正式拉开序幕~在这个传统的节气里&#xff0c;人们以各种方式避暑纳凉&#xff0c;享受夏日的悠闲时光。 而除了传统的避暑活动&#xff0c;我们还可以用一种新颖的方式记录和分享这份夏日的清凉——那就是通过PPT的方式将这一传…

班迪录屏Bandicam使用详解

Bandicam是一款功能强大的视频录制工具&#xff0c;录制出来的视频体积较小且内容清晰度较高&#xff0c;平时录屏、录游戏都非常合适。可以全屏幕录制&#xff0c;也可以自定义录制区域&#xff0c;还可以在录制时添加自定义的logo&#xff0c;并且有个绘制模式&#xff0c;适…

学习008-01-02 Define the Data Model and Set the Initial Data(定义数据模型并设置初始数据 )

Define the Data Model and Set the Initial Data&#xff08;定义数据模型并设置初始数据 &#xff09; This topic explains how to implement entity classes for your application. It also describes the basics of automatic user interface construction based on a da…

cookies和session的区别【面试】

一、 共同点&#xff1a; 目的&#xff1a;Cookie和Session都是用来跟踪浏览器用户身份的会话方式。 二、 工作原理&#xff1a; 1. Cookie的工作原理 浏览器端第一次发送请求到服务器端。服务器端创建Cookie&#xff0c;包含用户信息&#xff0c;然后将Cookie发送到浏览器…

基于AT89C51单片机的多功能自行车测速计程器(含文档、源码与proteus仿真,以及系统详细介绍)

本篇文章论述的是基于AT89C51单片机的多功能自行车测速计程器的详情介绍&#xff0c;如果对您有帮助的话&#xff0c;还请关注一下哦&#xff0c;如果有资源方面的需要可以联系我。 目录 选题背景 原理图 PCB图 仿真图 代码 系统论文 资源下载 选题背景 美丽的夜晚&…

力扣刷题(自用)

哈希 128.最长连续序列 128. 最长连续序列 - 力扣&#xff08;LeetCode&#xff09; 这个题要求O(n)的时间复杂度&#xff0c;我一开始想的是双指针算法&#xff08;因为我并不是很熟悉set容器的使用&#xff09;&#xff0c;但是双指针算法有小部分数据过不了。 题解给的哈…

JavaScript:移除元素

这是原题&#xff1a;给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。 假设 nums 中不等于 val 的元素数量为 k&#xff0c;要通过此题&#xff0c;您需要执行以下操…

【PyTorch][chapter 26][李宏毅深度学习][attention-2]

前言&#xff1a; Multi-Head Attention 主要作用&#xff1a;将Q,K,V向量分成多个头&#xff0c;形成多个子语义空间&#xff0c;可以让模型去关注不同维度语义空间的信息 目录&#xff1a; attention 机制 Multi-Head Attention 一 attention 注意力 Self-Attention&#x…

三分钟速通银行家算法

银行家算法&#xff08;Bankers Algorithm&#xff09;是一种用于避免死锁的经典算法&#xff0c;广泛应用于操作系统、数据库管理系统及分布式系统中。下面将结合实战场景&#xff0c;详细介绍银行家算法的实现过程和应用。 一、算法背景 银行家算法由荷兰计算机科学家Edsge…

什么是im即时通讯?WorkPlus im即时通讯私有化部署安全可控

IM即时通讯是Instant Messaging的缩写&#xff0c;指的是一种实时的、即时的电子信息交流方式&#xff0c;也被称为即时通讯。它通过互联网和移动通信网络&#xff0c;使用户能够及时交换文本消息、语音通话、视频通话、文件共享等信息。而WorkPlus im即时通讯私有化部署则提供…

防火墙--双机热备

目录 双击热备作用 防火墙和路由器备份不同之处 如何连线 双机 热备 冷备 VRRP VGMP&#xff08;华为私有协议&#xff09; 场景解释 VGMP作用过程 主备的形成场景 接口故障的切换场景 整机故障 原主设备故障恢复的场景 如果没有开启抢占 如果开启了抢占 负载分…

对红酒品质进行数据分析(python)

http://t.csdnimg.cn/UWg2S 数据来源于这篇博客&#xff0c;直接下载好csv文件。 这篇内容均在VScode的jupyter notebook上完成&#xff0c;操作可以看我的另一篇博客&#xff1a;http://t.csdnimg.cn/69sDJ 一、准备工作 1. 导入数据库 #功能是可以内嵌绘图&#xff0c;并…

如何查看Linux中某个项目是否在Docker中运行

方法一&#xff1a;检查进程的 cgroup Docker 容器的进程运行在特定的 cgroup 中。你可以通过检查进程的 cgroup 信息来判断它是否在 Docker 容器中运行。 找到项目的进程 ID (PID)&#xff1a; 假设你知道项目的进程名称&#xff0c;例如 my_project&#xff0c;你可以使用 p…

纯硬件一键开关机电路的工作原理

这是一个一键开关机电路: 当按一下按键然后松开&#xff0c;MOS管导通&#xff0c;VOUT等于电源电压; 当再次按一下按键然后松开&#xff0c;MOS管关闭&#xff0c;VOUT等于0; 下面来分析一下这个电路的工作原理。上电后&#xff0c;输入电压通过R1和R2给电容充电&#xff0c;最…