ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Open SDK 21下载全解析:区分API Level与LineageOS,附校验排障

Open SDK 21下载全解析:区分API Level与LineageOS,附校验排障 简介这是一份基于 OpenJDK 21 的完整开发包压缩包格式为 zip面向需要搭建 Java 开发环境的开发者。压缩包共包含 484 个文件整体大小约 188MB内部既有开发工具也有运行环境文件构成上包含 87 个动态链接库、36 个可执行程序、70 个模块镜像以及归档文件、属性配置、许可证和安全证书等可粗略分为开发工具、运行时组件和授权文档三大类。目前已有 206 人学习/下载适用于需要固定版本 JDK 或离线安装的环境。获取该压缩包后开发者能获得一套相对完整的 JDK 21 组件包括编译器、文档生成器、虚拟机运行库和标准类库可直接用于代码编写、编译与运行对刚接触 Java 或希望验证新版特性的使用者这份打包资源省去了逐一下载和整理模块的麻烦目录结构也便于快速查阅。1. open sdk 21 下载文件先分清这个“21”是 API Level还是 LineageOS 21把 “open sdk 21 下载文件” 这一串字扔给我的人通常并不是想要一个叫 OpenSDK 的完整软件包而是卡在了两个不同的 “21” 上一个是 Android 的 API Level 21也就是 Android 5.0 对应的 SDK Platform另一个是 LineageOS 21一个基于 Android 14 的开源定制系统分支。前者的下载物里有 android.jar给老设备 App 编译用后者的“open SDK”和 ROM 包则服务于源码编译和刷机。两条路线的包名、命令、验证方式完全不一样选错门就会出现 “Failed to find package” 或者文件对不上编译目标。这篇我把两条路都拆开给你能直接照着做的下载、校验和排障步骤。2. 把“21”拆成三份下载物android.jar、lineage-sdk 与 ROM 包别选错门2.1 三份下载物的门牌号我在本地处理这个问题时会先让提问者说清一件你最后是要编译 App还是要编 ROM还是要刷机。因为这个 “21” 在不同语境下对应的文件完全不同常见的有下面三份你嘴里的“21”常见包名 / 文件特征主要用途Android API 21 平台platforms;android-21内含 android.jar给 minSdk 或 targetSdk 为 21 的 App 提供编译接口LineageOS 21 的 open SDK 产物lineage-sdk编译产物一般不会单独挂在下载页给 ROM 系统应用提供org.lineageos.*扩展接口LineageOS 21 刷机包lineage-21.0-日期-设备代号.zip直接给对应机型刷入 Android 14 定制系统我一般会先打开 SDK Manager 的命令行工具查一下机器上已经装了哪些包再做决定。因为platforms;android-21和 LineageOS 21 的 lineage-sdk 都是本地文件而 ROM zip 是设备固件三者的 “下载” 动作完全不同。2.2 判断路径的两个问题问自己两个问题就够了。第一个问题你是从 Android Studio 里建项目还是从 LineageOS 源码树里跑make如果是前者你缺的是platforms;android-21如果是后者你需要的是lineage-21.0分支里的 lineage-sdk而不是 API 21 的 android.jar。第二个问题你的最终产物是 APK 还是刷机包APK 场景里platforms;android-21只是编译期接口真机运行时不依赖它刷机包场景里你需要根据手机代号下载对应的lineage-21.0ROM zip并且一定要校验 SHA-256。这里有一个特别容易混的误区有人搜“open sdk 21 下载文件”其实是想给 Jenkins 或 Gradle 配 Java 21 的 toolchain。那种情况应该去找 OpenJDK 21 的发行版而不是 Android SDK Manager。OpenSDK 21 这个叫法本身不是严格官方的包名Android 官方 SDK Manager 里的门牌号是platforms;android-21LineageOS 21 项目里也没有人把 lineage-sdk 叫成 OpenSDK 21。搞清楚这一点后面所有命令才不会被误解带偏。2.3 为什么直接搜“open sdk 21 zip”往往下不到对的东西原因很简单Android SDK 的 21 平台不是一个独立 zip而是由sdkmanager管理的目录结构里面还依赖platform-tools、build-tools这类外围包。LineageOS 21 的 open SDK 也不是维护者打包好放到网盘上的文件它通常要跟着源码树一起编出来。直接搜一个 zip 文件名很容易下到别人从旧版本里拷出来的 android.jar目录不完整Gradle 一样不认。所以下文先讲 API 21 怎么用官方命令行下载再讲 LineageOS 21 场景下怎么拿 open SDK 和 ROM 文件。3. 用 sdkmanager 拉取 API 21 平台文件最小命令和目录检查3.1 最小安装命令Android Studio 新装出来之后默认下载列表里一般不会把 Android 5.0 这种老平台排在前面。你需要在 SDK Manager 里勾选 “Show Package Details”或者直接走命令行。命令行最省事也最容易复现。export ANDROID_HOME$HOME/android-sdk # 接受许可证并安装两个互不包含的包 yes | sdkmanager \ --sdk_root$ANDROID_HOME \ platforms;android-21 \ build-tools;21.1.2这段命令里的--sdk_root指定 SDK 的根目录。注意是根目录不是platforms/android-21目录。很多第一次用的人把ANDROID_HOME指到platforms这一层后面 Gradle 会一直报找不到 SDK。platforms;android-21这个包名是官方 SDK Manager 里的门牌号它安装的是 Android API Level 21 的 platform 文件核心产物是android.jar。build-tools;21.1.2是配套的构建工具里面有aapt、dx、aidl。这两个包不互相包含只装platforms;android-21不会给你aapt只装 build-tools 也不会给你android.jar所以通常一起装。yes的作用是自动确认许可证。如果你在交互式终端里手动安装可以不加yes按提示输入y。但在脚本或 CI 环境里一定要加上否则会卡在 License 确认这一步。3.2 装完先看这三个文件下载完成只是第一步。我一般会立刻检查三个文件确认包没有装半截。cat $ANDROID_HOME/platforms/android-21/source.properties ls -lh $ANDROID_HOME/platforms/android-21/android.jar ls $ANDROID_HOME/build-tools/21.1.2/{aapt,dx,aidl}source.properties里会有Pkg.Pathplatforms;android-21和AndroidVersion.ApiLevel21这样的键值对这是判断版本最直接的依据。如果你看到AndroidVersion.ApiLevel22或者Pkg.Path不是android-21那就是装的包不对。android.jar的大小不用记死重点是它必须存在并且是可读的 Java archive。build-tools/21.1.2下面至少要能看到aapt和dx。缺少其中一个最常见原因是网络中断导致 sdkmanager 没有解压完整这时候不要手动去别的平台目录里拷文件直接sdkmanager --uninstall再重装一次。3.3 多版本共存和验证命令SDK 目录本身支持多版本共存platforms/android-21、platforms/android-34可以同时存在。这不冲突Gradle 会按compileSdk去选对应目录。安装完成后我习惯再跑一条命令确认状态sdkmanager --sdk_root$ANDROID_HOME --list_installed这条命令会列出已经安装的 packages。里面应该能看到platforms;android-21和build-tools;21.1.2。如果只看到platform-tools而没有platforms;android-21那说明你之前下载的是另一个版本或者包名写错了。4. LineageOS 21 场景下载 open SDK 和 ROM 文件别再往 API 21 上靠4.1 lineage-sdk 21 和 API 21 的差别LineageOS 21 是基于 Android 14 的定制系统分支所以它的 SDK 版本号是跟着 ROM 分支走的跟 API Level 21 没有任何关系。很多人看到 “21” 就下意识去装platforms;android-21装完才发现里面根本没有 LineageOS 的扩展接口。LineageOS 的 open SDK 在源码树里的名字一般叫lineage-sdk它提供的是org.lineageos.*这一类系统扩展 API不是 Android 5.0 时代的android.*接口。如果你要写的是依赖 LineageOS 特性的系统应用比如自定义开关、硬件扩展能力那必须用 lineage-sdk 编译如果只是普通 App就不要碰它。4.2 从源码树构建 open SDK 产物LineageOS 21 的 open SDK 下载方式常见做法不是去某个网盘拿一个 zip而是把lineage-21.0分支的源码同步下来然后从源码树里编出 jar。因为 lineage-sdk 的接口和系统框架强绑定单独抽一个预编译包很容易跟你本地的 ROM 版本对不上。cd LineageOS 21 源码根目录 # 先初始化编译环境 source build/envsetup.sh # 选择目标设备userdebug 通常用于开发调试 lunch lineage_device-userdebug # 只编 lineage-sdk 的常见目标名 # 不同分支的具体目标可能不同以 mka help 为准 mka lineage-sdk这段命令里lunch的参数是设备代号比如lineage_beryllium-userdebug。如果你只是想要 lineage-sdk 的接口 jar不需要完整编出刷机包单独mka lineage-sdk会快很多。编完之后的产物一般在out/target/common/obj/JAVA_LIBRARIES/下面路径里会包含lineage-sdk的中间目录。可以用find来找find out -type f -name *lineage-sdk* | head -20如果find输出为空说明这次编译没有触发 lineage-sdk 的产物检查一下lunch选择的设备是不是带有 LineageOS SDK 的产品配置。有些 AOSP 兼容设备不会自动把 lineage-sdk 编进去。4.3 下载 LineageOS 21 ROM 文件并校验如果你不是要开发系统应用只是想下载 LineageOS 21 刷机包那要的文件是lineage-21.0-日期-设备代号.zip。下载后第一件事不是刷机而是校验文件完整性。我一般会用 sha256sum 对一下发布页给出的哈希值sha256sum lineage-21.0-*-device.zip对比哈希值时不要只看文件大小。ROM 文件在网盘之间搬运时经常出现大小一致但内容被改动的情况哈希对不上就说明文件已经损坏或者是一个不对应你机型的重打包文件。校验完成后刷机流程一般是adb reboot recovery # 到 Recovery 里选择 Apply update from ADB adb sideload lineage-21.0-*-device.zip这里最容易翻车的是 Recovery 版本太旧。LineageOS 21 是 Android 14 分支老的 Recovery 不一定认识新分区的签名方案。升级 Recovery 到支持 LineageOS 21 的版本再执行 sideload能避免很多莫名其妙的报错。5. open sdk 21 下载排障5 个常见错误和解决顺序5.1 现象sdkmanager 提示 Failed to find package platforms;android-21原因有两个第一个是包名写错。有人把platforms;android-21写成了android-21或platforms;android-21.1。SDK Manager 里的包名是非常严格的门牌号多一个点、少一个分号都找不到。第二个原因是 sdkmanager 版本太旧旧版本无法识别新版仓库里某些路径。解决方法是先确认你用的是最新 cmdline-tools 里的sdkmanager然后执行yes | sdkmanager --sdk_root$ANDROID_HOME --list | grep android-21--list会输出当前仓库里所有可安装包你直接搜android-21看到的是不是platforms;android-21。如果列出的是platforms;android-22或platforms;android-20说明你要的是其他版本。5.2 现象下载完没有 android.jar或者 aapt 不在这个通常是网络中断导致的半包状态。sdkmanager 下载和解压不是原子的zip 只拉了一半解压时没有报错但目录里缺文件。解决方法是先卸载再重装不要手动补文件sdkmanager --sdk_root$ANDROID_HOME --uninstall platforms;android-21 yes | sdkmanager --sdk_root$ANDROID_HOME platforms;android-21重装后重点看android.jar和build-tools/21.1.2/aapt。如果连续两次都缺同一个文件考虑是不是磁盘满了。SDK 目录最好预留 10 GB 以上空间老平台虽然不大但多版本共存之后体积累加起来很可观。5.3 现象LineageOS 21 ROM 刷机时报未知错误 21 或签名校验失败这个现象最常见于升级场景。你从旧版本 LineageOS 直接升级到 21Recovery 却很旧不认识新包的签名或分区格式。报错信息不一定直接写 “signature verification failed”有时候就是一个未知错误 21这是因为 Recovery 把失败原因吞掉了。解决顺序是先校验下载的 zip 哈希再确认 Recovery 版本是否支持 Android 14 分区最后不要用别人重新打包过的 zip。官方或维护者发布的包签名是固定的任何重打包都会破坏签名。5.4 现象Gradle 报 SDK location not found但目录里明明有 android-21这个几乎都是环境变量指错了。ANDROID_HOME应该指到 SDK 根目录比如$HOME/android-sdk而不是$HOME/android-sdk/platforms/android-21。Gradle 会到ANDROID_HOME/platform-tools、ANDROID_HOME/platforms/android-21这种子目录里找文件如果你把根目录直接设成了platforms/android-21它再自己拼一层路径就找不到了。解决方法是把环境变量改成根目录然后重启终端或 IDE。export ANDROID_HOME$HOME/android-sdk echo $ANDROID_HOME5.5 现象同一个项目在别人电脑上能编在自己电脑上报资源找不到这种问题经常被当成玄学其实多半是 build-tools 版本不一致。你下载了platforms;android-21但项目里的 buildToolsVersion 是21.1.2你机器上装的却是21.1.1。Gradle 不会自动去匹配找不到就报资源编译错误。解决方法是精确安装项目要求的 build-tools 版本不要装一个相近版本就算完。项目里的build.gradle写的是什么sdkmanager 里就装什么。6. 下载后的验证技巧两条命令确认 21 没装歪我拿到一个新环境时第一件事不是打开 IDE而是先跑两条命令确认 21 这个包真的装对了。第一条看版本属性第二条看工具链是否完整cat $ANDROID_HOME/platforms/android-21/source.properties | grep -E Pkg.Path|AndroidVersion.ApiLevel find $ANDROID_HOME/build-tools/21.1.2 -maxdepth 1 -name aapt -o -name dx | sort第一条输出里必须有Pkg.Pathplatforms;android-21第二条至少要有aapt和dx两个文件。这两点确认后再去跑 Gradle 或命令行编译基本上不会在 SDK 路径上浪费时间。如果你是在 LineageOS 21 源码树里做编译我最后还会多做一步把source build/envsetup.sh和lunch写入当前终端环境后先运行mka lineage-sdk而不是直接mka bacon。这样能更快暴露 SDK 接口缺失的问题也不会因为一次全量编译失败分不清是 SDK 问题还是设备配置问题。我早期犯过一个很蠢的错为了给老项目配 API 21手动从网盘找了一个 android.jar 放进platforms目录结果source.properties完全缺失Android Studio 虽然能识别文件名但 Gradle 认为 SDK 未安装。后来我养成了一个习惯任何 SDK 文件都必须从 sdkmanager 或官方维护流程里来校验source.properties后再让构建工具引用它。这个习惯帮我少踩了很多坑也希望帮到你。本文还有配套的精品资源点击获取
返回列表