You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过sdkmanager自动筛选并获取最新Android平台版本(非Android Studio环境)

解决sdkmanager过滤纯数字版本platforms的问题

我来帮你搞定这个过滤难题!你之前的思路是对的,但sed的正则用法和匹配逻辑需要调整,毕竟要精准排除那些带非数字标识的platforms包(比如platforms;android-TiramisuPrivacySandbox)。

核心思路

先精准筛选出platforms;android-后紧跟纯数字的行,再从中提取版本号。这里推荐用grep配合扩展正则来做过滤,比纯sed更直观好维护。

方案1:排序取最新版本(适合要最高版本的场景)

如果你的目标是获取最新的纯数字Android平台版本,可以用排序的方式拿到最大的版本号:

# 提取所有纯数字版本的platforms行,截取版本号后排序取最大值
platform_version=$(sdkmanager --list | grep -E "^platforms;android-[0-9]+ " | sed 's/^platforms;android-//' | cut -d' ' -f1 | sort -n | tail -n1)

拆解一下每个步骤:

  • grep -E "^platforms;android-[0-9]+ ":用扩展正则匹配行首是platforms;android-+纯数字+空格的行,直接排除带字母的条目
  • sed 's/^platforms;android-//':去掉前缀platforms;android-
  • cut -d' ' -f1:截取空格前的版本号部分
  • sort -n | tail -n1:按数字排序后取最后一行(即最大版本号)

方案2:倒序取第一个匹配项(和你之前build-tools的逻辑一致)

如果你习惯用tac倒序找第一个匹配的最新版本,可以这么写:

# 倒序输出后找到第一个符合要求的platforms行,再提取版本号
platform_line=$(sdkmanager --list | tac | grep -m1 -E "^platforms;android-[0-9]+ ")
platform_version=${platform_line#platforms;android-}  # 去掉前缀
platform_version=${platform_version% *}                # 去掉后面的空格及内容

这里grep -m1表示找到第一个匹配项就停止,效率更高,然后用bash的字符串参数展开直接提取版本号,不用额外调用sed,更高效。

安装对应平台包

拿到版本号后,直接执行安装命令即可:

sdkmanager "platforms;android-$platform_version"

为什么你之前的命令不行?

你之前的sed "/platforms;android-[0-9]+/g"有两个问题:

  1. sed默认使用基础正则表达式,+需要转义成\+才能表示“一个或多个”
  2. 这个命令只是做替换操作,没有筛选出符合要求的行,也没有终止逻辑,所以会陷入无意义的处理

用上面的方案就能精准过滤出你需要的纯数字版本platforms包啦!

内容的提问来源于stack exchange,提问作者Oreoezi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 16:57:43