android 9 源码修改直接开放oem解锁

OEM解锁与USB设备管理
本文详细介绍了在Android系统中实现OEM解锁的过程,并解释了如何通过修改UsbDeviceManager.java文件来允许用户进行OEM解锁。文章还提供了具体的步骤,包括烧写模式设置、运行模式启动、fastboot模式进入及使用fastboot命令进行OEM解锁。

路径:

frameworks\base\services\usb\java\com\android\server\usb\UsbDeviceManager.java

添加:

import android.service.oemlock.OemLockManager;
protected void finishBoot() {
        	+ OemLockManager mOemLockManager = (OemLockManager) mContext.getSystemService(Context.OEM_LOCK_SERVICE);
		+ mOemLockManager.setOemUnlockAllowedByUser(true);
			
        
            if (mBootCompleted && mCurrentUsbFunctionsReceived && mSystemReady) {
                if (mPendingBootBroadcast) {
                    updateUsbStateBroadcastIfNeeded(getAppliedFunctions(mCurrentFunctions));
                    mPendingBootBroadcast = false;
                }


          .....

步骤:

1、拨码烧写模式,全编后全烧

2、拨码运行模式后启动

3、启动完成后重启进入fastboot模式  (reboot bootloader  或 启动后按键盘,进入u-boot命令行模式,打命令:fastboot 0 回车)

4、此时,可以使用fastboot命令或者开始全烧

a、oem解锁:fastboot oem unlock

b、查看oem解锁使能:flashing get_unlock_ability,具体可以打命令fastboot oem --help查看,可能不同板子命令不同

 

参考:

https://www.cnblogs.com/martinzhang98/p/10639176.html

### **在 Android 11 源码修改 OEM 分区添加 `bootanimation.zip`** #### **1. 确定 OEM 分区的源码路径** 在 AOSP 中,OEM 分区的文件通常由 `device/<厂商>/<设备>/oem/` 或 `vendor/<厂商>/<设备>/oem/` 控制。 需要确认设备源码中的 OEM 分区配置,例如: ```bash # 查找 OEM 分区的编译规则 find device/ vendor/ -name "oem.mk" -o -name "*.mk" | xargs grep -l "oem" ``` --- #### **2. 修改编译系统添加 `bootanimation.zip`** ##### **(1) 创建或修改 `oem.mk` 文件** 在设备目录下(如 `device/<vendor>/<device>/oem.mk`)添加: ```makefile # 将 bootanimation.zip 打包到 OEM 分区 PRODUCT_COPY_FILES += \ $(LOCAL_PATH)/bootanimation.zip:$(TARGET_COPY_OUT_OEM)/media/bootanimation.zip ``` **说明**: - `TARGET_COPY_OUT_OEM` 是 AOSP 预定义的变量,指向 `/oem` 分区。 - 文件需放在设备源码目录(如 `device/<vendor>/<device>/bootanimation.zip`)。 ##### **(2) 确保 OEM 分区可写** 在 `BoardConfig.mk` 中确认分区属性: ```makefile # 确保 OEM 分区为可读写(非只读) BOARD_OEMIMAGE_PARTITION_SIZE := 268435456 # 256MB BOARD_OEMIMAGE_FILE_SYSTEM_TYPE := ext4 BOARD_OEMIMAGE_JOURNAL_SIZE := 0 ``` --- #### **3. 修改 `SurfaceFlinger` 加载逻辑** 默认情况下,`SurfaceFlinger` 从 `/system/media/bootanimation.zip` 加载动画。需修改为优先检查 `/oem/media/`。 ##### **(1) 修改 `BootAnimation.cpp`** 编辑文件: `frameworks/base/cmds/bootanimation/BootAnimation.cpp` 找到 `BootAnimation::readyToRun()` 方法,修改路径检测逻辑: ```cpp // 添加 OEM 路径检查 String8 oemAnimationPath("/oem/media/bootanimation.zip"); if (access(oemAnimationPath.string(), R_OK) == 0) { mZipFileName = oemAnimationPath; } else { // 默认路径 mZipFileName = String8("/system/media/bootanimation.zip"); } ``` ##### **(2) 处理 SELinux 权限** 在 `file_contexts` 中添加标签: `device/<vendor>/<device>/sepolicy/file_contexts` ```plaintext /oem/media/bootanimation\.zip u:object_r:oem_file:s0 ``` --- #### **4. 编译并刷写 OEM 分区** ```bash # 编译 OEM 镜像 make otatools -j$(nproc) m oemimage # 刷入设备(需解锁 bootloader) fastboot flash oem $OUT/oem.img fastboot reboot ``` --- #### **5. 验证修改** ##### **(1) 检查文件是否存在于 OEM 分区** ```bash adb shell ls -l /oem/media/bootanimation.zip # 输出应显示文件权限为 644 ``` ##### **(2) 查看日志确认加载路径** ```bash adb logcat | grep BootAnimation # 期望输出: # BootAnimation: Using /oem/media/bootanimation.zip ``` --- ### **关键问题排查** #### **Q1:编译时报错 `oemimage too large`** - **原因**:`BOARD_OEMIMAGE_PARTITION_SIZE` 设置过小。 - **解决**:在 `BoardConfig.mk` 中增大分区大小: ```makefile BOARD_OEMIMAGE_PARTITION_SIZE := 536870912 # 512MB ``` #### **Q2:开机动画未生效** - **可能原因**: 1. SELinux 拒绝访问 `/oem/media/`。 2. 厂商自定义了动画服务(如 MIUI 的 `bootvideo`)。 - **调试步骤**: ```bash adb shell dmesg | grep avc # 检查 SELinux 拒绝日志 adb shell getprop | grep bootanimation # 查看系统属性 ``` --- ### **厂商适配注意事项** 1. **华为/荣耀**: - 可能需要修改 `vendor/huawei` 下的 `bootanimation` 服务。 2. **小米 (MIUI)**: - 替换 `/system/media/theme/bootanimation.zip` 或禁用 `bootvideo`。 3. **OPPO/Realme**: - 检查 `/my_bigball/` 或 `/my_product/` 分区。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值