Android 11源码 Framework修改默认usb连接模式为MTP模式
Android 11源码 Framework修改默认usb连接模式为MTP模式
- Android 11源码 Framework修改默认usb连接模式为MTP模式
- 修改Framework层源码
- 编译修改后的源码
- 更新到手机系统
目标: 对Framework
定制开发,修改Framework
层代码,编译查看修改效果。本节我们修改USB默认选项,将USB默认充电模式改为默认MTP模式。
效果图: 默认情况下USB选项为不进行数据传输
:
修改Framework层源码
- 执行环境编译:
cd ~/aosp
source build/envsetup.sh
lunch
2. 用编辑软件打开源码目录,并修改源码:
将USB默认选项改为MTP文件传输。修改文件为:frameworks/base/services/usb/java/com/android/server/usb/UsbDeviceManager.java。
// 省略部分代码...@Overridepublic void handleMessage(Message msg) {switch (msg.what) {case MSG_UPDATE_STATE:mConnected = (msg.arg1 == 1);mConfigured = (msg.arg2 == 1);updateUsbNotification(false);updateAdbNotification(false);if (mBootCompleted) {updateUsbStateBroadcastIfNeeded(getAppliedFunctions(mCurrentFunctions));}if ((mCurrentFunctions & UsbManager.FUNCTION_ACCESSORY) != 0) {updateCurrentAccessory();}if (mBootCompleted) {if (!mConnected && !hasMessages(MSG_ACCESSORY_MODE_ENTER_TIMEOUT)&& !hasMessages(MSG_FUNCTION_SWITCH_TIMEOUT)) {// restore defaults when USB is disconnectedif (!mScreenLocked&& mScreenUnlockedFunctions != UsbManager.FUNCTION_NONE) {setScreenUnlockedFunctions();} else {// 20210618 lxy modify usb default value//setEnabledFunctions(UsbManager.FUNCTION_NONE, false);setEnabledFunctions(UsbManager.FUNCTION_MTP, false);}}updateUsbFunctions();} else {mPendingBootBroadcast = true;}break;// 省略部分代码 ...}}protected void finishBoot() {if (mBootCompleted && mCurrentUsbFunctionsReceived && mSystemReady) {if (mPendingBootBroadcast) {updateUsbStateBroadcastIfNeeded(getAppliedFunctions(mCurrentFunctions));mPendingBootBroadcast = false;}if (!mScreenLocked&& mScreenUnlockedFunctions != UsbManager.FUNCTION_NONE) {setScreenUnlockedFunctions();} else {// 20210618 lxy modify usb default value//setEnabledFunctions(UsbManager.FUNCTION_NONE, false);setEnabledFunctions(UsbManager.FUNCTION_MTP, false);}if (mCurrentAccessory != null) {mUsbDeviceManager.getCurrentSettings().accessoryAttached(mCurrentAccessory);}updateUsbNotification(false);updateAdbNotification(false);updateUsbFunctions();}}// 省略部分代码 ...
编译修改后的源码
只修改了部分源码,不用对整个源码进行编译,我们在修改的目录下执行mm
命令,对修改模块进行编译即可。
mm
编译后生成services.jar
文件,输出到:out/target/product/sargo/system/framework/目录。
cd ~/aosp/out/target/product/sargo/system/framework/
ls -lt
进入到输出目录,通过ls
命令查看,可以看到services.jar
的日期为当期编译好的时间。
更新到手机系统
- 在更新之前我们先查看一下当前手机系统中
services.jar
文件的信息。
adb devices
adb root
adb remount
adb shell
cd /system/framework
ls -lt
2. 将修改编译后的文件更新到手机系统
cd ~/aosp/out/target/product/sargo/system/framework/
adb push services.jar /system/framework/
- 进入手机系统查看是否更新成功
adb shell cd /system/framework
ls -lt
可以看到手机系统中services.jar
文件的日期已经更新为编译后的时间。
- 重新启动系统服务
adb shell
stop;start
- 用USB数据线连接电脑和手机,查看USB选项:可以看到这时候USB默认选项为
文件传输
。
Android 11源码 Framework修改默认usb连接模式为MTP模式相关推荐
- Android 11 Framework修改默认usb连接模式为MTP模式
将USB默认选项改为MTP文件传输.修改文件为:frameworks/base/services/usb/java/com/android/server/usb/UsbDeviceManager.ja ...
- 2022-08-29 AndroidR 修改默认usb连接模式为MTP(Media Transfer Protocol)),UsbDeviceManager.java里面处理OTG口usb设备拔插侦听
一.默认是做为adb 调试功能,实际测试修改persist.sys.usb.config 是没有用. 二.拔插usb设备默认的选项是No data transfer 三.按下面的修改就可以修改默认u ...
- Android 11源码——安全策略SELinux关闭
Android 11源码 安全策略SELinux关闭 SELinux介绍 背景 关闭Android的SELinux 临时关闭 永久关闭 SELinux介绍 作为 Android 安全模型的一部分,An ...
- Arch 编译 Android 11 源码
文章目录 环境准备 下载源码 下载 repo 工具 repo init 原理 初始化仓库 选择同步指定分支 同步代码 切换源 编译代码 遇到的错误 很多人都写,如何在 Ubuntu 下编译 Andro ...
- android 11源码开机更改屏幕方向触摸方向
目录 1.修改屏幕方向 2.配置触摸方向 3.修改触摸相关配置源码 修改屏幕方向以后需要将系统的触摸方向一并配置,否则可能造成坐标错乱情况,修改完毕后重新编译源码烧录后验证结果 1.修改屏幕方向 这里 ...
- 修改编译Android 11源码时发现报can‘t find symble的错误
在/home/wq/android_11_source_repo/packages/apps/Contacts/src/com/android/contacts/activities/ContactS ...
- Android P 源码如何修改屏幕密度
1. device/模块公司名称/模块平台名称/system.prop 比如:device/qcom/sdm660_64/system.prop 这个文件添加字段:ro.sf.lcd_density= ...
- Android源码中修改USB默认模式(充电、MTP等)、关闭通知栏的USB通知
写了几年Android App,公司领导突然叫我在源码中修改USB连接后不能从PC端传数据到设备,这个之前没怎么接触过源码,咱也不知道,咱也不敢问呢,然后百度一搜,多倒是多,直接贴一大篇源码,得了吧, ...
- android系统源码7.1.2_r8下载,编译,运行到nexus5X上,修改源码并编译SDK进行测试
一,学习android系统源码下载,编译的作用 1,可以自己 DIY 自己的rom系统,从系统层面,宏观的加深理解 android系统 2,编译自己的 userdebug(原生root权限) rom, ...
最新文章
- WPF窗体置于桌面最底层
- 解决Android中No resource found that matches android:TextAppearance.Material.Widget.Button.Inverse问题...
- Java实现目的选层电梯的调度
- 【转】EntityFramework使用Code First模式创建数据库控制生成单数形式的表名
- 互联网晚报 | 3月21日 星期一 |​ 科大讯飞5亿成立科技新公司;新能源车企称采购宁德时代电池成本上涨两万元...
- SAP License:定义某一模块的后台配置权限
- c语言汉诺塔动画程序,汉诺塔问题算法(c语言控制台动画演示版)
- php写dnf脚本,dnf分解机脚本c
- 50k热敏电阻温度对照表c语言,50K热敏电阻温度表..doc
- 微信小程序后端用python_Python开发微信小程序后端开发小坑
- 小型微型计算机系统杂志好投么,小型微型计算机系统杂志
- QT QString转16进制
- Python核心编程第二版第五章数字(课后习题)----我的答案
- 章节六:带参数请求数据
- 深度优先搜索中的树边、后向边,前向边和交叉边
- 埃森哲带给我们什么启示?
- 【漫漫转码路】Python Day 03
- Python学习笔记-Day2
- Spring Boot 配合搭建 ELK,这才是正确看日志的方式!
- 35. 应用监控【监控端点健康信息】
热门文章
- win2008 R2 安装VS2003
- Linux Tomcat JSP 布署详细教程
- Java Swing JTree:树组件
- css flew 布局 解决父元素高度不固定,子级居中。
- Graylog 中文手册 常用功能和问题整理
- 访问HDFS的权限问题:Permission denied: user=xxx, access=WRITE, inode=“xxxxxxxx“:
- Go 语言 入门 基于 GoLand 2023.1 创建第一个Go程序
- 研发质量保障体系搭建
- 瑞幸咖啡贵不贵?咖啡不贵,商业却很贵
- 数学/线性代数 {子式,余子式,代数余子式,拉普拉斯展开}