Android 11源码 Framework修改默认usb连接模式为MTP模式
目标: 对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。
// 省略部分代码
...
@Override
public 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 disconnected
if (!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默认选项为
文件传输
。