Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android AOSP增量OTA签名验证失败_Android_Android Source_Auto Update_Firmware_Ota - Fatal编程技术网

Android AOSP增量OTA签名验证失败

Android AOSP增量OTA签名验证失败,android,android-source,auto-update,firmware,ota,Android,Android Source,Auto Update,Firmware,Ota,我正在尝试为基于Android 7.0 Nougat的定制Android ROM实现增量OTA更新过程。我已经成功构建了固件的第一个和第二个(修改)版本,因此我有了第一个和第二个target_files.zip 我按照官方指南()创建了增量OTA zip,更确切地说是使用以下命令: ./build/tools/releasetools/ota_from_target_files-i PREVIOUS-tardis-target_files.zip dist_output/tardis-targe

我正在尝试为基于Android 7.0 Nougat的定制Android ROM实现增量OTA更新过程。我已经成功构建了固件的第一个和第二个(修改)版本,因此我有了第一个和第二个target_files.zip

我按照官方指南()创建了增量OTA zip,更确切地说是使用以下命令: ./build/tools/releasetools/ota_from_target_files-i PREVIOUS-tardis-target_files.zip dist_output/tardis-target_files.zip incremental_ota_update.zip#从旧版本增量生成

我在一台设备上安装了第一个固件版本,并尝试通过以下步骤使用incremental_ota_update.zip对其进行更新:

  • 在/cache/recovery文件夹中创建了“command”文件,其中包含以下文本:--update_package=/cache/update.zip

  • 在/cache文件夹中手动复制了incremental_ota_update.zip

  • 从我的系统应用程序(一个启动程序应用程序)运行以下命令:RecoverySystem.installPackage(上下文,新文件(“/cache/incremental\u ota\u update.zip”)

  • 设备自行重启,进入恢复菜单时有两个选项:重启设备和使用引导加载程序重启,我点击“重启设备”选项。 它将重新启动,但未进行任何更改,增量更新未安装

    我检查了日志文件,上面写着:

    Opening update package...
    I:read key e=3 hash=20
    I:1 key(s) loaded from /res/keys
    Verifying update package...
    I:comment is 1738 bytes; signature 1720 bytes from end
    I:signature (offset: 0x3cfdfe, length: 1714): 308206ae06092a864886f70d010702a082069f3082069b020101310b300906052...[    2.849059] I:whole-file signature verified against RSA key 0
    Update package verification took 0.1 s (result 0).
    Error: Invalid OTA package, missing scatter
    E:install package error, result = 1
    Update.zip is not correct
    Installation aborted.
    nand type is emmc
    
    在此之后,我从第二个target_files.zip复制了ota_scatter.txt,并将其放入增量_ota_update.zip中,然后重试更新过程,现在出现以下错误:

    Opening update package...
    I:read key e=3 hash=20
    I:1 key(s) loaded from /res/keys
    Verifying update package...
    E:footer is wrong
    Update package verification took 0.0 s (result 1).
    E:signature verification failed
    E:install package error, result = 7
    Signature verification failed
    Installation aborted.
    nand type is emmc
    

    我不知道我做错了什么,如果有人能帮我,我将不胜感激

    我们想向您介绍这个问题的最新情况。我们发现了问题。与所有OTA更新一样,您需要检查是否使用与设备上的还原应用程序相同的工具提供商创建OTA更新zip

    我们的分散错误是由于名称不匹配造成的。还原应用程序脚本正在查找scatter.txt。在我们重命名该文件之后,出现了其他问题

    正如您所猜测的,您不应该重命名文件或在OTA更新zip中移动它们。所有需要的文件应以正确的格式和正确的名称存在

    简而言之,我们找到了创建OTA ZIP的正确工具和正确的命令

    这对你有什么用处

    • 在固件的源文件夹中搜索错误
    • 分析结果并打开相关文件
    • 了解恢复OTA更新的工具
    • 确保您使用供应商提供的OTA创建脚本创建OTA
    在我们的案例中,供应商是联发科

    这里有一点很有用:

    完整OTA

        ./build/tools/releasetools/ota_from_target_files -v \
        $(if $(filter true,$(TARGET_USERIMAGES_USE_UBIFS)),-g,--block) \
        -p $(HOST_OUT) \
        -k $(KEY_CERT_PAIR) \
        -s ./device/mediatek/build/releasetools/mt_ota_from_target_files \
        $(if $(OEM_OTA_CONFIG), -o $(OEM_OTA_CONFIG)) \
        $(BUILT_TARGET_FILES_PACKAGE) $@
    
        ./build/tools/releasetools/ota_from_target_files -v \
        $(if $(filter true,$(TARGET_USERIMAGES_USE_UBIFS)),-g,--block) \
        -p $(HOST_OUT) \
        -k $(KEY_CERT_PAIR) \
        -s ./device/mediatek/build/releasetools/mt_ota_from_target_files \
        $(if $(OEM_OTA_CONFIG), -o $(OEM_OTA_CONFIG)) \
        -i \
        $(BUILT_TARGET_FILES_PACKAGE) $@
    
    增量OTA

        ./build/tools/releasetools/ota_from_target_files -v \
        $(if $(filter true,$(TARGET_USERIMAGES_USE_UBIFS)),-g,--block) \
        -p $(HOST_OUT) \
        -k $(KEY_CERT_PAIR) \
        -s ./device/mediatek/build/releasetools/mt_ota_from_target_files \
        $(if $(OEM_OTA_CONFIG), -o $(OEM_OTA_CONFIG)) \
        $(BUILT_TARGET_FILES_PACKAGE) $@
    
        ./build/tools/releasetools/ota_from_target_files -v \
        $(if $(filter true,$(TARGET_USERIMAGES_USE_UBIFS)),-g,--block) \
        -p $(HOST_OUT) \
        -k $(KEY_CERT_PAIR) \
        -s ./device/mediatek/build/releasetools/mt_ota_from_target_files \
        $(if $(OEM_OTA_CONFIG), -o $(OEM_OTA_CONFIG)) \
        -i \
        $(BUILT_TARGET_FILES_PACKAGE) $@
    

    在这一点上,任何其他技术细节都只会让你感到困惑。吸气,呼气,然后在代码中搜索你的错误。那是你进入。。。快乐狩猎。

    您使用哪种恢复?我建议在TWRP或LOS recovery中进行测试,并检查那里的日志,可能会有更多信息。恢复和主ROM之间的密钥是否一致?你对完全更新或仅增量更新有相同的问题吗?@Mixaz我不使用TWRP或LOS(我查了一下,看看它们的意思)。密钥是一致的(我假设固件签名密钥)。使用相同的技术,完整的OTA可以正常工作,只有增量的OTA会出现错误。无论如何,我会尝试TWRP,看看是OTA包问题还是恢复问题。但是你用什么恢复呢?(很抱歉再次询问))@Mixaz如何验证我使用的是哪种恢复?我使用命令:RecoverySystem.installPackage(上下文,新文件(“/cache/incremental\u ota\u update.zip”);这可以在本机Android SDK中找到。我不知道您指的是哪种恢复。如果您没有安装任何自定义恢复,则表示使用的是供应商开发的库存恢复。有一种可能是它在增量更新方面有问题(我自己从来没有使用过,所以只是猜测)。通常,stock recovery只允许安装使用供应商密钥签名的更新,所以我很惊讶您可以安装完整的更新。如果在你的硬件上运行的话,你不太可能在股票恢复中得到支持,切换到开源的。有更多机会从开源社区获得反馈。