返回顶部
首页 > 资讯 > 移动开发 >OTA编译报Exception in thread “main“ java.lang.UnsupportedClassVersionError: com/android/signapk/SignApk
  • 876
分享到

OTA编译报Exception in thread “main“ java.lang.UnsupportedClassVersionError: com/android/signapk/SignApk

androidOTA 2023-09-20 15:09:55 876人浏览 薄情痞子
摘要

一、问题引入 1.1 背景         预置条件:已编译出2个版本的target包;         问题引入:项目需要本地验证当前项目是否可以编译出OTA差分包和全量包,并通过差分包和全量包成功完成测试机系统版本升级(这里重点讨论编译

一、问题引入

1.1 背景

        预置条件:已编译出2个版本的target包;

        问题引入:项目需要本地验证当前项目是否可以编译出OTA差分包和全量包,并通过差分包和全量包成功完成测试机系统版本升级(这里重点讨论编译差分包过程中遇到的问题)

1.2 编译命令

编译OTA的命令:./build/tools/releasetools/ota_from_target_files -p out/host/linux-x86 -k device/qcom/common/security/releasekey -s device/qcom/common/releasetools.py  -v --block -i ota/qssi-target_files-eng1126.zip ota/qssi-target_files-eng1201.zip ota/ota1126_to_1201.zip参数描述:第一个为制作OTA的脚本工具;-s后面为mtk的插入脚本工具;-k后面为项目签名(如果项目有专门签名,那么就是device/mediatek/common/security//releasekey,如果项目没有定制签名就用平台签名build/target/product/security/ releasekey)-v  显示正在执行的命令--block 基于block更新,代码生成基于块的升级包,其实已经没有意义了。Android P的代码,不再支持基于文件的升级包-p 指定在做包过程中用于搜索相应的bin程序和jar包的路径-i 制作差分包-k 表示用后面紧跟的密钥重新签名升级包。

二、问题处理过程

2.1 no module protobuf

        问题描述:使用ota脚本编译OTA报错:ImportError: No module named Google.protobuf

        问题原因:python环境中缺少google.protobuf,通过如下命令安装该工具

pip install googlepip install protobuf

2.2 Python版本语法问题

        问题描述:使用ota脚本编译OTA报错如下:

File "/media/user/code2/aosp/qssi/build/make/tools/releasetools/common.py", line 1672
f"GKI boot_signature size must be <= {BOOT_SIGNATURE_SIZE}")

        问题原因:python版本导致的语法问题,这里使用python2的环境编译了python3语法的代码,只需要把报错的脚本代码修改为python3的语法即可,例如将上述语句修改为:

"GKI boot_signature size must be <= {}".fORMat(BOOT_SIGNATURE_SIZE)

        另外,切换当前系统python版本的方法如下:

        (1)列出可用的python替代版本:

update-alternatives --list python 

        (2)在列出的python替代版本中选择对应的python版本,选择需要的python版本序号回车确定即可:

sudo update-alternatives --config python

        注:如果上述(1)中报如下错误,则表示 Python 的替代版本尚未被update-alternatives 命令识别,需要对该版本的python进行安装,安装命令如下第2、3条

update-alternatives: error: no alternatives for python
update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1  update-alternatives --install /usr/bin/python python /usr/bin/python3.6 2 

三、jdk版本导致的报错

3.1 报错信息

        详细报错信息如下:

ExternalError: Failed to run signapk.jar: return code 1:Error: A JNI error has occurred, please check your installation and try againException in thread "main" java.lang.UnsupportedClassVersionError: com/android/signapk/SignApk has been compiled by a more recent version of the Java Runtime (class file version 53.0), this version of the Java Runtime only recognizes class file versions up to 52.0......

 3.2 问题分析和解决

        根据报错分析是因为用于编译jar文件的jdk版本不一致导致,适用于jdk8的Java类版本是52,适用于jdk11的Java类版本是55,解决方法如下:

        (1)首先用如下命令查看jdk版本,我之前的版本是openjdk-8

java --version

        (2)使用如下命令安装openjdk-11

sudo apt-get install openjdk-11-jdk

        (3)使用如下命令配置linux默认jdk版本,选择你需要的JDK版本

sudo update-alternatives --config java

        (4)使用如下命令配置默认java版本,选择你需要的 java 版本。

sudo update-alternatives --config javac 

四、swap分区不足问题

4.1 问题描述

        编译OTA时用到的target包是通过项目代码整编获取的,最终生成的target包位于项目的如下目录中:

out/target/product/qssi/obj/PACKAGING/target_files_intermediates/

        而当整编项目代码时,有一种编译失败,报错中会有这样一句:Clang SA is not enabled,这样的报错一般都是因为swap分区不足造成的,只需要增大Linux系统swap分区的大小即可。

4.2 swap分区扩展

        1.1 查看当前swap分区的大小;

free -h

        1.2 总内存为3.7G,交换分区大小为500M; 

在这里插入图片描述

         2.1 创建大小为4G的空间

dd if=/dev/zero of=/swap1 bs=1M count=4096

        2.2 if 表示infile,of表示outfile,bs=1M代表增加的模块大小,count=4096代表4096个模块,也就是4G空间

         3. 将目的文件设置为swap分区文件

mkswap /swap1

        4. 激活swap,立即启用交换分区文件

swapon 例如:swapon /swap1

        5. free -h查看swap已经增加了,但这只是临时性的,如果机器重启会失效

在这里插入图片描述

        6.1 设置开机自动挂载 

vi /etc/fstab

        6.2 最后一行添加

/swap1          swap     swap    defaults        0 0

        7. 重启测试,测试成功!内存增加

在这里插入图片描述

 

来源地址:https://blog.csdn.net/qq_41739313/article/details/128151231

--结束END--

本文标题: OTA编译报Exception in thread “main“ java.lang.UnsupportedClassVersionError: com/android/signapk/SignApk

本文链接: https://lsjlt.com/news/413067.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作