当前位置: 首页 > news >正文

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 版本SdkManagerCliSettingsAndroidLocationsProvider最低 JDK
11.061 (JDK 17)55 (JDK 11)17
10.052 (JDK 8)55 (JDK 11)11
9.052 (JDK 8)55 (JDK 11)11
8.052 (JDK 8)52 (JDK 8)8
7.052 (JDK 8)52 (JDK 8)8
6.052 (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 版本最低 JDKMacLinuxWindows
11.0(latest)17commandlinetools-mac-10406996_latest.zipcommandlinetools-linux-10406996_latest.zipcommandlinetools-win-10406996_latest.zip
10.011commandlinetools-mac-9862592_latest.zipcommandlinetools-linux-9862592_latest.zipcommandlinetools-win-9862592_latest.zip
9.011commandlinetools-mac-9477386_latest.zipcommandlinetools-linux-9477386_latest.zipcommandlinetools-win-9477386_latest.zip
8.08commandlinetools-mac-9123335_latest.zipcommandlinetools-linux-9123335_latest.zipcommandlinetools-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 […...

如何判断seo 报价是否合适

如何判断SEO报价是否合适 在当前数字化营销的环境中,SEO(搜索引擎优化)已经成为企业提升在线可见性和吸引潜在客户的关键策略。SEO服务的报价各异,不少企业在选择服务时往往会纠结于如何判断一个SEO报价是否合适。本文将从多个角…...

CoPaw复杂逻辑推理与数学解题能力极限测试

CoPaw复杂逻辑推理与数学解题能力极限测试 1. 开场:挑战AI的认知边界 今天我们要做一个有趣的实验——对CoPaw进行一场高强度的逻辑与数学能力压力测试。就像给运动员做极限体能测试一样,我们将用一系列高难度题目来检验这个AI模型的推理能力边界。 测…...

阿里达摩院神器实测:RexUniNLU开箱即用,智能客服理解力飙升

阿里达摩院神器实测:RexUniNLU开箱即用,智能客服理解力飙升 1. 开箱体验:零样本理解模型初探 1.1 一键部署的便捷性 RexUniNLU镜像的部署过程简单到令人惊讶。启动后访问7860端口,一个清爽的Web界面立即呈现在眼前。界面分为三…...

用STM32F103和0.96寸OLED做个桌面电子宠物:从GIF动图到屏幕显示的完整流程

用STM32F103和0.96寸OLED打造智能桌面电子宠物:从动图处理到交互设计的完整指南 在嵌入式开发的世界里,没有什么比亲手打造一个会动的电子宠物更有成就感了。想象一下,你的桌面上有一个由0.96寸OLED屏幕和STM32F103微控制器驱动的小生命&…...

Mirage Flow 运维效率提升实战:智能日志排查与故障自愈方案

Mirage Flow 运维效率提升实战:智能日志排查与故障自愈方案 你是不是也经历过这样的深夜?告警短信突然炸了锅,几十上百条日志涌进来,你得像侦探一样,在成百上千行日志里大海捞针,试图找出那个导致系统崩溃…...

基础入门-版本控制-GitLab/Gitea 基本使用

GitLab/Gitea 基本使用 在前面的章节中,我们学习了 Git 基础命令和团队协作流程。在实际工作中,这些操作都是围绕着代码托管平台展开的。GitLab 和 Gitea 是两种广泛使用的自托管 Git 仓库管理工具,它们提供了仓库管理、权限控制、代码审查、CI/CD 等功能,是运维团队进行配…...

STM8S001单片机:8引脚高性价比嵌入式开发方案

1. STM8S001单片机:小身材大能量的性价比之王 在嵌入式开发领域,我们常常陷入一个两难选择:要么使用功能强大但引脚众多、价格昂贵的高端MCU,要么选择功能简陋、开发环境不友好的廉价芯片。STMicroelectronics最新推出的STM8S001系…...

避坑指南:将π0模型从仿真迁移到Aubo真实机械臂,我踩过的那些‘坑’

从仿真到真实机械臂:π0模型迁移Aubo实战避坑手册 当我在实验室第一次看到π0模型在仿真环境中流畅地操控虚拟机械臂完成复杂抓取任务时,内心充满了将它部署到真实Aubo机械臂上的期待。然而,从仿真环境到真实硬件的迁移之路远比想象中坎坷——…...

OpenClaw效率对比:Qwen2.5-VL-7B与传统OCR工具在文档处理中的表现

OpenClaw效率对比:Qwen2.5-VL-7B与传统OCR工具在文档处理中的表现 1. 测试背景与动机 最近在整理公司历史项目文档时,遇到了一个棘手的问题:大量扫描版PDF和图片格式的技术文档需要数字化处理。这些文档包含代码片段、手写注释和复杂表格&a…...

GitHub Copilot 深入实战:从配置到效率翻倍

第一章:GitHub Copilot 入门 1.1 什么是 GitHub Copilot GitHub Copilot 是由 GitHub 与 OpenAI 合作开发的 AI 编程助手,于 2021 年 6 月正式发布。它基于 OpenAI 的 Codex 模型(GPT-4 的专门针对编程任务优化的版本)构建,能够在开发者编写代码时实时提供智能建议和自动…...