Android cmdline-tools 版本与其最小JDK关系
关键词:Android cmdline-tools 历史版本、Android cmdline-tools 最小JDK版本、JDK 对应 major version、JDK LTS 信息
由于 JDK8 是一个常用的、较低的版本,因此只需要关注 JDK8 及以上版本的运行情况。
cmdline-tools 版本和最低 JDK
最终结论:(在 Mac 上,基于 JDK8 测试的结果)
cmdline-tools 版本 | SdkManagerCliSettings | AndroidLocationsProvider | 最低 JDK |
---|---|---|---|
11.0 | 61 (JDK 17) | 55 (JDK 11) | 17 |
10.0 | 52 (JDK 8) | 55 (JDK 11) | 11 |
9.0 | 52 (JDK 8) | 55 (JDK 11) | 11 |
8.0 | 52 (JDK 8) | 52 (JDK 8) | 8 |
7.0 | 52 (JDK 8) | 52 (JDK 8) | 8 |
6.0 | 52 (JDK 8) | 52 (JDK 8) | 8 |
通过上表可以看出,在 cmdline-tools 内部,各个 Jar 的编译目标 JDK 版本存在不一致的情况。因此,在实际运行时,需要将所有 Jar 文件的编译目标 JDK 版本的最大值作为 cmdline-tools 运行时的最小的 JDK 版本。
Android 官网的 cmdline-tools 提供的最新版本是11.0(截止2023年10月24日),也就是说,其 Runtime 的 JDK 版本必须是 JDK17 及以上。
检查流程
$ java -version
java version "1.8.0_351"$ cd path/cmdline-tools/9.0/bin
$ ./sdkmanager --list
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError: com/android/prefs/AndroidLocationsProvider has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
由上述报错信息可知,com/android/prefs/AndroidLocationsProvider
要求最低使用 version 55.0(JDK 11)。
但是其他 class (比如 lib/sdklib/libsdkmanager_lib.jar
内的 com.android.sdklib.tool.sdkmanager.SdkManagerCliSettings
)仍旧是 version 52.0 (JDK 8)。
这里的思路是:
直接切换到cmdline-tools对应版本,然后基于 runtime JDK = 8 的环境,执行 ./sdkmanager --version
检查是否报错,如报错,查看要求的最低 version 为多少。(低于JDK8的不再验证)
验证的脚本:majorVersion.sh
使用方法:./majorVersion.sh path/cmdline-tools/11.0
#!/bin/bash$1/bin/sdkmanager --version
$1/bin/sdkmanager --version 2>&1 | grep "class file"jar_file=/lib/sdklib/libsdkmanager_lib.jarecho "-> $jar_file"
# 使用 javap 命令解析 JAR 文件内指定的 class
output=$(javap -verbose -classpath "$1${jar_file}" com.android.sdklib.tool.sdkmanager.SdkManagerCliSettings 2>&1)#echo "$output"
# 查找主要版本号
major_version=$(echo "$output" | grep 'major version')
# 打印主要版本号
echo "--> $major_version"##---
jar_file=/lib/common/tools.common.jarecho
echo "-> $jar_file"
# 使用 javap 命令解析 JAR 文件内指定的 class
output=$(javap -verbose -classpath "$1${jar_file}" com.android.prefs.AndroidLocationsProvider 2>&1)
# 查找主要版本号
major_version=$(echo "$output" | grep 'major version')
# # 打印主要版本号
echo "--> $major_version"
验证结果:
# 11.0
Exception in thread "main" java.lang.UnsupportedClassVersionError: com/android/sdklib/tool/sdkmanager/SdkManagerCli has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 52.0-> /lib/sdklib/libsdkmanager_lib.jar
major version: 61
-> /lib/common/tools.common.jar
major version: 55# 10.0
Exception in thread "main" java.lang.UnsupportedClassVersionError: com/android/prefs/AndroidLocationsProvider has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0-> /lib/sdklib/libsdkmanager_lib.jar
major version: 52
-> /lib/common/tools.common.jar
major version: 55# 9.0
Exception in thread "main" java.lang.UnsupportedClassVersionError: com/android/prefs/AndroidLocationsProvider has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0-> /lib/sdklib/libsdkmanager_lib.jar
major version: 52
-> /lib/common/tools.common.jar
major version: 55# 8.0
-> /lib/sdklib/libsdkmanager_lib.jar
major version: 52
-> /lib/common/tools.common.jar
major version: 52
扩展资料
cmdline-tools 历史版本
官网地址:https://developer.android.com/studio
cmdline-tools 版本 | 最低 JDK | Mac | Linux | Windows |
---|---|---|---|---|
11.0(latest) | 17 | commandlinetools-mac-10406996_latest.zip | commandlinetools-linux-10406996_latest.zip | commandlinetools-win-10406996_latest.zip |
10.0 | 11 | commandlinetools-mac-9862592_latest.zip | commandlinetools-linux-9862592_latest.zip | commandlinetools-win-9862592_latest.zip |
9.0 | 11 | commandlinetools-mac-9477386_latest.zip | commandlinetools-linux-9477386_latest.zip | commandlinetools-win-9477386_latest.zip |
8.0 | 8 | commandlinetools-mac-9123335_latest.zip | commandlinetools-linux-9123335_latest.zip | commandlinetools-win-9123335_latest.zip |
下载地址的生成规则:https://dl.google.com/android/repository/文件名
JDK 对应 major version
Java SE 21 = 65 (0x41 hex),
Java SE 20 = 64 (0x40 hex),
Java SE 19 = 63 (0x3F hex),
Java SE 18 = 62 (0x3E hex),
(LTS) Java SE 17 = 61 (0x3D hex),
Java SE 16 = 60 (0x3C hex),
Java SE 15 = 59 (0x3B hex),
Java SE 14 = 58 (0x3A hex),
Java SE 13 = 57 (0x39 hex),
Java SE 12 = 56 (0x38 hex),
(LTS) Java SE 11 = 55 (0x37 hex),
Java SE 10 = 54 (0x36 hex),[4]
Java SE 9 = 53 (0x35 hex),[5]
(LTS) Java SE 8 = 52 (0x34 hex),
Java SE 7 = 51 (0x33 hex),
Java SE 6.0 = 50 (0x32 hex),
Java SE 5.0 = 49 (0x31 hex),
JDK 1.4 = 48 (0x30 hex),
JDK 1.3 = 47 (0x2F hex),
JDK 1.2 = 46 (0x2E hex),
JDK 1.1 = 45 (0x2D hex).
资料来源:Java class file
JDK LTS 信息
- JDK 17(LTS)
- major version = 61
- 积极支持:2026年9月30日
- 安全支持:2029年9月30日
- JDK 11(LTS)
- major version = 55
- 积极支持:2023年9月30日
- 安全支持:2026年9月30日
- JDK 8(LTS)
- major version = 52
- 积极支持:2022年3月31日
- 安全支持:2030年12月31日
资料来源:
- https://endoflife.date/java
- https://www.oracle.com/java/technologies/java-se-glance.html
如果有什么建议或者问题可以随时联系我,共同探讨学习:
- Github: likfe
- CSDN:他叫自己Mr.张
- 掘金:cafeting
- 微博:cafeting
相关文章:
Android cmdline-tools 版本与其最小JDK关系
关键词:Android cmdline-tools 历史版本、Android cmdline-tools 最小JDK版本、JDK 对应 major version、JDK LTS 信息 由于 JDK8 是一个常用的、较低的版本,因此只需要关注 JDK8 及以上版本的运行情况。 cmdline-tools 版本和最低 JDK 最终结论&…...

基于ARM+FPGA+AD的多通道精密数据采集仪方案
XM 系列具备了数据采集仪应具备的“操作简单、便于携带、满足各种测量需求”等功能的产品。具有超小、超轻量的手掌大小尺寸,支持8 种测量模块,还可进行最多576 Ch的多通道测量。另外,支持省配线系统,可大幅削减配线工时。使用时不…...

【JAVA学习笔记】43 - 枚举类
项目代码 https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter11/src/com/yinhai/enum_ 〇、创建时自动填入版权 作者等信息 如何在每个文件创建的时候打入自己的信息以及版权呢 菜单栏-File-setting-Editor-File and Code Templaters -Includes-输入信…...

Springcloud介绍
1.基本介绍 Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring …...
LK光流法和LK金字塔光流法(含python和c++代码示例)
0 引言 本文主要记录LK光流算法及LK金字塔光流算法的详细原理,最后还调用OpenCV中的cv2.calcOpticalFlowPyrLK()函数实现LK金字塔光流算法,其中第3部分是python语言实现版本,第4部分是c++语言实现版本。 1 LK光流算法 1.1 简述 LK光流法是一种计算图像序列中物体运动的光…...
数据库索引是什么?创建索引的注意事项
数据库索引: 索引(index)是帮助MySQL高效获取数据的数据结构(有效),在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向&#x…...

java中的异常,以及出现异常后的处理【try,catch,finally】
一、异常概念 异常 :指的是程序在执行过程中,出现的非正常的情况,最终会导致JVM的非正常停止。 注意: 在Java等面向对象的编程语言中,异常本身是一个类,产生异常就是创建异常对象并抛出了一个异常对象。Java处理异常的…...

前端构建但没有更新
使用jenkins构建vue前端代码时,构建完成后,jenkins提示构建成功, 但前端刷新提示还是原来的效果,此时需要查看下jenkins构建日志,如果出现下面的文字,说明缺少依赖,最新的代码并没有构建到项目中…...

【Opencv】OpenCV使用CMake和MinGW的编译安装出错解决
编译时出现的错误: mingw32-make[1]: *** [modules/core/CMakeFiles/opencv_core.dir/all] Error 2 Makefile:161: recipe for target ‘all’ failed mingw32-make: *** [all] Error 2解决方法: 根据贴吧老哥的解答,发现是mingw版本有问题导…...
#Day Day Plan# 《NCB_PCI_Express_Base 5.0.1.0》pdf 译文笔记 模版
目录 一 本章节主讲知识点 1.1 xxx 1.2 sss 1.3 ddd 二 本章节原文翻译 2.1 ddd 三 本章节关联知识点 2.1 ddd 四 本章节存疑问题 2.1 222 五 总结 一 本章节主讲知识点 1.1 xxx 1.2 sss 1.3 ddd 二 本章节原文翻译 2.1 ddd 三 本章节关联知识点 2.1 ddd 四…...

分代ZGC详解
ZGC(Z Garbage Collector)是Java平台上的一种垃圾收集器,它是由Oracle开发的,旨在解决大堆的低延迟垃圾收集问题。ZGC是一种并发的分代垃圾收集器,它主要针对具有大内存需求和低停顿时间要求的应用程序 分代ZGC收集器…...
vue图片懒加载
Vue图片懒加载是一种优化页面性能的技术,它可以延迟加载页面上的图片,直到它们进入可见区域。这可以减少页面的加载时间,提高用户体验。 在Vue中实现图片懒加载可以使用第三方库vue-lazyload。首先需要安装该库: npm install vu…...

【c++】运算符重载实例
重载自增自减运算符 Intger num(2); num; num;对自增运算符的重载要区分前置和后置。在重载之前需要思考一个问题,num是返回一个临时变量还是num对象的本体。 为了解决这个问题可以考虑实现一个Inc_()函数和_Inc()函数分别模仿后置和前置的行为 Integer Inc_(){i…...

用*画田字形状,numpy和字符串格式化都可以胜任
numpy的字符型元素矩阵,可以方便画;直接python字符串手撕,也可以轻巧完成。 (本笔记适合熟悉循环和列表的 coder 翻阅) 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Free:大咖免费“圣经”教程《…...

搭建一个windows的DevOps环境记录
边搭建边记录,整个DevOps环境的搭建可能会很久。。。 一、安装Jenkins: 参考:Jenkins基础篇--windows安装Jenkins-CSDN博客 注意上面选择JDK的路径,选择到安装目录,该目录并不一定要在path中配置了(就是…...
漏洞扫描系统的主要功能有哪些
漏洞扫描系统是一种自动化的工具,用于发现和报告计算机网络系统中的安全漏洞。这些漏洞可能包括软件漏洞、配置错误、不安全的网络设备等。漏洞扫描系统的主要功能包括以下几个方面: 目标识别:漏洞扫描系统首先需要识别目标系统的基本信息&am…...
Spring Boot配置多个Kafka数据源
一、配置文件 application.properties配置文件如下 #kafka多数据源配置 #kafka数据源一,日志审计推送 spring.kafka.one.bootstrap-servers172.19.12.109:32182 spring.kafka.one.producer.retries0 spring.kafka.one.producer.properties.max.block.ms5000 #kafk…...
Learning Open-World Object Proposals without Learning to Classify(论文解析)
Learning Open-World Object Proposals without Learning to Classify 摘要1 介绍2 相关工作3 方法3.1 基线3.2 基于纯定位的对象性3.3. 对象定位网络 (OLN)4 实验4.1跨类泛化4.2.开放世界类不可知检测4.3更多的跨数据集泛化4.3.1 Objects365 泛化4.3.2 EpicKitchens 的泛化4.4…...
前端在项目中添加自己的功能页面
1.src—>mock–>sideMenue:边表(sidemenue)的子功能的添加:左边功能框中的显示 在相应的父功能添加子功能 id号不能和他人的一样,casecode:就是路由名字 title:中文名称 2.前后端接口(后端程序员给),定义好接口名称 src—>moudles—…...
数据库MySQL(二):DDL数据定义语言
数据定义语言(Data Definition Language,DDL) 该语言主要用于定义数据库对象,操作对象为数据库、表或字段。 数据库操作 # 查询所有数据库 SHOW DATABASES;# 查询当前数据库 SELECT DATABASE(); # 创建数据库 CREATE DATABASE […...

深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...

页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...

srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...