如何通过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"有两个问题:
- sed默认使用基础正则表达式,
+需要转义成\+才能表示“一个或多个” - 这个命令只是做替换操作,没有筛选出符合要求的行,也没有终止逻辑,所以会陷入无意义的处理
用上面的方案就能精准过滤出你需要的纯数字版本platforms包啦!
内容的提问来源于stack exchange,提问作者Oreoezi
相关产品推荐
相关产品推荐

