一、问题引入 1.1 背景 预置条件:已编译出2个版本的target包; 问题引入:项目需要本地验证当前项目是否可以编译出OTA差分包和全量包,并通过差分包和全量包成功完成测试机系统版本升级(这里重点讨论编译
预置条件:已编译出2个版本的target包;
问题引入:项目需要本地验证当前项目是否可以编译出OTA差分包和全量包,并通过差分包和全量包成功完成测试机系统版本升级(这里重点讨论编译差分包过程中遇到的问题)
编译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 表示用后面紧跟的密钥重新签名升级包。
问题描述:使用ota脚本编译OTA报错:ImportError: No module named Google.protobuf
问题原因:python环境中缺少google.protobuf,通过如下命令安装该工具
pip install googlepip install protobuf
问题描述:使用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
详细报错信息如下:
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......
根据报错分析是因为用于编译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
编译OTA时用到的target包是通过项目代码整编获取的,最终生成的target包位于项目的如下目录中:
out/target/product/qssi/obj/PACKAGING/target_files_intermediates/
而当整编项目代码时,有一种编译失败,报错中会有这样一句:Clang SA is not enabled,这样的报错一般都是因为swap分区不足造成的,只需要增大Linux系统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
2024-01-21
2023-10-28
2023-10-28
2023-10-27
2023-10-27
2023-10-27
2023-10-27
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0