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

这篇具有很好参考价值的文章主要介绍了OTA编译报Exception in thread “main“ java.lang.UnsupportedClassVersionError: com/android/signapk/SignApk。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、问题引入

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/<project>/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 google
pip 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 again
Exception 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; 

exception in thread

         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空间

exception in thread

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

mkswap /swap1

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

swapon <swap_file>
例如:swapon /swap1

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

exception in thread

        6.1 设置开机自动挂载 

vi /etc/fstab

        6.2 最后一行添加

/swap1          swap     swap    defaults        0 0

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

exception in thread

 文章来源地址https://www.toymoban.com/news/detail-661354.html

到了这里,关于OTA编译报Exception in thread “main“ java.lang.UnsupportedClassVersionError: com/android/signapk/SignApk的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 运行java项目时Exception in thread “main“ java.lang.UnsupportedClassVersionError解决办法

    本地终端CMD运行java项目时,Exception in thread “main“ java.lang.UnsupportedClassVersionError,报错截图: 1、解决措施就是保证jvm(java命令)和jdk(javac命令)版本一致。如果是windows版本,则在命令行中分别输入java -version和javac -version命令来查看版本是否一致。 发现java版本为1.8.0,而

    2024年02月11日
    浏览(49)
  • 已解决:Exception in thread “main“ java.lang.NoSuchMethodError

    分为两种情况,如果找不到自己写的某个方法,一般是main函数没加static之类的。这里讨论第二种情况:找不到第三方包中的某个方法。 这样的情况大概率是因为这个报错的包在Maven依赖中存在多个版本,存在版本冲突。如下面的报错就是因为google.protobuf这个包有多个版本,而

    2024年02月08日
    浏览(58)
  • Exception in thread “main“ java.lang.reflect.InvocationTargetException

    idea中app后台本地运行成功,但是打成jar包后运行,失败报错如下 原因分析:jar包运行存在问题,项目中有dockerfile文件,直接执行java -jar会报错,因为dockerfeil文件中配置了启动jar包的命令:    

    2024年02月08日
    浏览(46)
  • 已解决Exception in thread “main“ java.lang.NullPointerException

    已解决Exception in thread “main” java.lang.NullPointerException Exception in thread “main“ java.lang.NullPointerException 对于异常 “Exception in thread “main” java.lang.NullPointerException” 的详细解决方法 下滑查看解决方法 可以按照以下步骤进行处理: 确定异常的位置:根据异常信息中提供的线程和

    2024年01月22日
    浏览(52)
  • 已解决 Java Error: Exception in thread ‘main‘ java.lang.ClassNotFoundException

    🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页 : 🐅🐾猫头虎的博客🎐 《面试题大全专栏》 🦕 文章图文并茂🦖生动形象🐅简单易学!欢迎大家来踩踩~🌺 《IDEA开发秘籍专栏》 🐾 学会IDEA常用操作,工作效率翻倍~💐 《100天精通Golang(基础入门篇)》 🐅

    2024年02月03日
    浏览(56)
  • poi报错 Exception in thread “main“ java.lang.NoSuchFieldError: Factory

    背景:要实现一个需求,按照word模板合成一定的内容,给到前端,但是却跌到在了第一步,就是这个依赖的问题上 这个问题归根到底就是这个依赖冲突问题, 可是让我奇怪的是我用那个依赖分析器解决了poi-tl文件的冲突,因为我之前还使用了ali的easyexcel好多使用这个poi-相关

    2024年02月07日
    浏览(48)
  • Exception in thread “main“ java.lang.NoClassDefFoundError: javax/servlet/Servlet

    缺少jar包 jar包冲突 先查看pom文件中是否引入了对应的依赖,如果没有的话,需要引入: 如果是从 Maven Repository 上面获取的依赖记得要 删除scop 这一行,我就是网上找了几百种方法,才发现是这个问题!

    2024年02月13日
    浏览(49)
  • 已解决 Java Error: Exception in thread ‘main‘ java.lang.NullPointerException BUG 》

    🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页 : 🐅🐾猫头虎的博客🎐 《面试题大全专栏》 🦕 文章图文并茂🦖生动形象🐅简单易学!欢迎大家来踩踩~🌺 《IDEA开发秘籍专栏》 🐾 学会IDEA常用操作,工作效率翻倍~💐 《100天精通Golang(基础入门篇)》 🐅

    2024年02月07日
    浏览(56)
  • sparkbug解决:Exception in thread “main“ java.lang.UnsupportedOperationException: No Encoder found for

    报错: 问题原因: Spark SQL中的 Dataset 类需要一个编码器来将JVM对象序列化为内部的Spark SQL格式。而对于复杂类型(比如 Row 或者自定义类),Spark 需要隐式的 Encoder ,代码因为缺少这样的编码器,所以会导致 UnsupportedOperationException 异常。 附上代码 问题解决: 添加 Encoders.kr

    2024年02月04日
    浏览(46)
  • 解决报错Exception in thread “main“ java.lang.NoClassDefFoundError: org/openqa/selenium/HasAuthentication

    解决报错Exception in thread “main” java.lang.NoClassDefFoundError: org/openqa/selenium/HasAuthentication 网上查资料发现 是导入了不同版本的selenium包。 解决办法: 修改pom.xml 重新下载后 selenium相关依赖包都是同个版本了 重新运行代码 ,运行通过!

    2024年02月16日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包