user版本进行OTA升级时如何抓取升级过程的log

本文详细介绍了如何在Eng版本中获取recovery.log文件,以及在User版本下通过替换recovery.img和boot.img来抓取log的特殊方法。对于在User版本下遇到的log无法直接pull的问题,给出了具体的解决方案。

eng版本的log

In recovery mode

    adb pull /tmp/recovery.log

Reboot to normal mode

     /cache/recovery/last_log

 

user版本的log

In recovery mode

    目前没有办法在user版本也看到recovery.log,目前的办法是

直接用eng版本的recovery.img替换user版本的recovery.img,然后抓取log

Reboot to normal mode

    user版本也会产生/cache/recovery/last_log,但是可能会不能用adb pull出来!目前的办法是做完recoveryrebootnormal mode后,重新烧boot.img,用eng版本的boot.img替换user 版本的boot.img,然后将log pull出来!

<think> 我们正在讨论的是在Android R系统中修改OTA升级包的系统版本号。根据引用内容,OTA升级包在编译生成,包含多个分区镜像。系统版本号通常记录在构建系统生成的构建信息文件中(如build.prop),而OTA包本身也包含元数据(如META-INF/com/android/metadata)来描述适用的系统版本范围。 修改OTA升级包的系统版本号需要从两个层面考虑: 1. **构建修改**:在编译系统设置版本号,这样生成的OTA包自然包含新版本号。 2. **修改现有OTA包**:直接解包OTA包,修改其中的版本信息,然后重新打包签名。 ### 方法一:构建修改版本号(推荐) 在AOSP编译过程中,版本信息由以下构建变量控制: - `PLATFORM_VERSION`:系统版本名称(如Android R对应"11") - `BUILD_ID`:具体构建标识(如RQ2A.210405.005) - `BUILD_NUMBER`:内部版本号(通常用于递增) **操作步骤**: 1. 修改构建变量: ```bash # 在编译前设置环境变量 export BUILD_NUMBER=20240601 export BUILD_ID=Custom.R.Version ``` 2. 或修改`build/make/core/version_defaults.mk`中的默认值: ```makefile # 搜索PLATFORM_VERSION并修改 PLATFORM_VERSION := 11 BUILD_ID := Custom.R.Version BUILD_NUMBER := 20240601 ``` 3. 重新生成OTA包: ```bash source build/envsetup.sh lunch target_name-userdebug make otapackage # 生成完整OTA包 ``` 这样生成的OTA包(`out/target/product/[device]/[device]-ota-*.zip`)将包含新的版本信息。 ### 方法二:直接修改现有OTA包 如果需要修改已生成的OTA版本信息: 1. **解压OTA包**: ```bash unzip ota_package.zip -d ota_unpacked ``` 2. **修改元数据文件**: 编辑`ota_unpacked/META-INF/com/android/metadata`: ```ini post-build=Custom/R/Version:11/Custom.R.Version:20240601 pre-device=device_codename ``` 关键字段解释: - `post-build`:目标版本信息,格式为`品牌/版本/构建标识:SDK版本/构建ID:构建号` - `pre-device`:适用的设备代号 3. **修改构建属性文件**(可选): 更新`ota_unpacked/system/build.prop`中的相关属性: ```ini ro.build.display.id=Custom.R.Version ro.build.version.incremental=20240601 ro.build.version.release=11 ``` 4. **重新打包并签名**: ```bash # 重新压缩(注意:必须使用存储模式压缩,保留符号链接) cd ota_unpacked && zip -r ../new_ota.zip . -x "*.DS_Store" -0 -r -n .mp3:.jpg:.zip:.apk:.so:.jar:.dat:.dex:.odex:.vdex:.art:.oat:.png:.ttf:.xml:.bin:.txt:.prop:.cfg:.list:.log:.rc:.cnf: -X # 使用AOSP签名工具(需要编译环境) java -jar out/host/linux-x86/framework/signapk.jar -w build/target/product/security/testkey.x509.pem build/target/product/security/testkey.pk8 new_ota.zip signed_ota.zip ``` > **注意**:直接修改OTA包可能破坏升级过程,必须确保: > - 新版本号符合升级规则(通常需高于当前版本) > - 签名密钥与设备中的匹配(否则会被拒绝安装) > - 分区结构未改变(否则可能导致设备变砖) ### 相关问题 1. 如何为特定设备定制OTA升级包中的版本信息? 2. OTA升级包签名失败如何排查? 3. Android R中阻止降级升级的安全机制如何绕过? 4. 增量OTA包(delta update)的版本号如何修改? [^1]: 引用自用户提供的关于去除间戳校验的内容 [^2]: 引用自用户提供的关于OTA镜像打包方式的说明 [^3]: 引用自用户提供的关于OTA编译工具的依赖列表 </think> 以下是针对 Android R 系统修改 OTA 升级包系统版本号的详细方法,分为**构建修改**和**直接修改 OTA 包**两种方案: --- ### 一、构建修改版本号(推荐) 在编译系统直接注入版本信息,确保 OTA 包内置正确的版本号: #### 1. **修改系统构建变量** 在 AOSP 源码中编辑版本控制文件: ```bash # 修改全局版本标识 vim build/make/core/version_defaults.mk ``` 修改关键变量: ```makefile PLATFORM_VERSION := 11 # Android R 版本号 BUILD_ID := RQ3A.211001.001 # 构建ID BUILD_NUMBER := 20240601 # 内部版本号(间戳格式) ``` #### 2. **调整分区镜像版本** 在设备配置目录修改 `build.prop` 生成规则: ```bash # 修改设备专属构建属性 vim device/<vendor>/<device>/system.prop ``` 添加覆盖属性: ```properties ro.build.display.id=Custom_R_v3.0 ro.build.version.incremental=20240601 ``` #### 3. **编译完整 OTA 包** ```bash source build/envsetup.sh lunch <device>-userdebug make otapackage -j8 # 生成含新版本号的OTA包 ``` 生成的 OTA 包路径: `out/target/product/<device>/<device>-ota-<build_id>.zip` > **验证**:解压 OTA 包查看 `META-INF/com/android/metadata`: > ```ini > post-build=google/.../RQ3A.211001.001:11/20240601:userdebug/test-keys > ``` > 此处 `20240601` 即为修改后的版本号[^3] --- ### 二、直接修改现有 OTA 包 对已生成的 OTA 包进行二进制修改: #### 1. **解包 OTA 包** ```bash unzip ota_package.zip -d ota_unpacked ``` #### 2. **修改版本元数据** 编辑元数据文件: ```bash vim ota_unpacked/META-INF/com/android/metadata ``` 修改关键字段: ```diff - post-build=google/.../RQ3A.210605.001:11/20230601 + post-build=google/.../RQ3A.211001.001:11/20240601 # 新版本号 ``` #### 3. **更新系统属性** 修改 `system/build.prop`: ```bash vim ota_unpacked/system/build.prop ``` ```diff - ro.build.display.id=RQ3A.210605.001 + ro.build.display.id=Custom_R_v3.0 - ro.build.version.incremental=20230601 + ro.build.version.incremental=20240601 ``` #### 4. **重新打包并签名** ```bash # 压缩需保持存储模式 (cd ota_unpacked && zip -r ../new_ota.zip . -x "*.DS_Store" -0 -r -n .mp3:.jpg:.zip) # 使用AOSP签名工具 java -jar out/host/linux-x86/framework/signapk.jar \ build/target/product/security/testkey.x509.pem \ build/target/product/security/testkey.pk8 \ new_ota.zip signed_ota.zip ``` > **关键注意**: > 1. 新版本号必须高于当前系统版本,否则会触发降级保护[^1] > 2. 签名密钥必须与设备原厂密钥匹配(测试可用 `testkey`,量产需用厂商密钥) > 3. 修改后需完整验证分区哈希值避免启动失败 --- ### 三、增量 OTA 的特殊处理 当使用差量升级(如 `from-build=旧版本`),需额外操作: 1. 在编译命令中指定基础版本: ```bash ./build/tools/releasetools/ota_from_target_files \ -i base_ota.zip new_ota.zip incremental_ota.zip ``` 2. 确保 `META-INF/com/android/metadata` 包含正确的版本链: ```ini pre-build=旧版本ID # 必须是设备当前版本 post-build=新版本ID # 修改后的目标版本 ``` --- ### 相关问题 1. 如何绕过 Android R 的 OTA 降级保护机制? 2. 修改系统版本号后如何验证 OTA 升级兼容性? 3. 非 AOSP 设备(如厂商定制 ROM)的 OTA 版本号修改有哪些差异? 4. 如何为特定分区(如 boot/vendor)设置独立版本号? [^1]: 引用自用户提供的关于去除间戳校验的内容 [^2]: 引用自用户提供的关于OTA镜像打包方式的说明 [^3]: 引用自用户提供的关于OTA编译工具的依赖列表
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值