如何查看安卓系统版本?
Posted
技术标签:
【中文标题】如何查看安卓系统版本?【英文标题】:How can I check the system version of Android? 【发布时间】:2011-05-18 09:00:29 【问题描述】:有谁知道如何以编程方式检查系统版本(例如1.0
、2.2
等)?
【问题讨论】:
是否有快捷方式(代码 sn-p 或实时模板)在 android studio 中添加此检查 【参考方案1】:请注意Build.VERSION.SDK_INT 不可靠,@Falcon165o 提到过,最近我也遇到了。
所以为了获取当前安装的android的String数据(基于Android version list),我做了这样的代码:
Java
//Current Android version data
public static String currentVersion()
double release=Double.parseDouble(Build.VERSION.RELEASE.replaceAll("(\\d+[.]\\d+)(.*)","$1"));
String codeName="Unsupported";//below Jelly Bean
if(release >= 4.1 && release < 4.4) codeName = "Jelly Bean";
else if(release < 5) codeName="Kit Kat";
else if(release < 6) codeName="Lollipop";
else if(release < 7) codeName="Marshmallow";
else if(release < 8) codeName="Nougat";
else if(release < 9) codeName="Oreo";
else if(release < 10) codeName="Pie";
else if(release >= 10) codeName="Android "+((int)release);//since API 29 no more candy code names
return codeName+" v"+release+", API Level: "+Build.VERSION.SDK_INT;
科特林
fun currentVersion(): String
val release = java.lang.Double.parseDouble(java.lang.String(Build.VERSION.RELEASE).replaceAll("(\\d+[.]\\d+)(.*)", "$1"))
var codeName = "Unsupported"//below Jelly Bean
if (release >= 4.1 && release < 4.4) codeName = "Jelly Bean"
else if (release < 5) codeName = "Kit Kat"
else if (release < 6) codeName = "Lollipop"
else if (release < 7) codeName = "Marshmallow"
else if (release < 8) codeName = "Nougat"
else if (release < 9) codeName = "Oreo"
else if (release < 10) codeName = "Pie"
else if (release >= 10) codeName = "Android "+(release.toInt())//since API 29 no more candy code names
return codeName + " v" + release + ", API Level: " + Build.VERSION.SDK_INT
它产生的输出示例:
Marshmallow v6.0,API 级别:23
【讨论】:
当版本包含多个点时,此代码在 Double.parseDouble(Build.VERSION.RELEASE) 处崩溃。例如 7.1.1 @MiklósKeresztes 感谢您提供信息丰富的评论 - 我已经修正了我的答案。【参考方案2】:假设你的安卓设备上有bash
,你可以使用这个bash函数:
function androidCodeName
androidRelease=$(getprop ro.build.version.release)
androidCodeName=$(getprop ro.build.version.codename)
# Time "androidRelease" x10 to test it as an integer
case $androidRelease in
[0-9].[0-9]|[0-9].[0-9].|[0-9].[0-9].[0-9]) androidRelease=$(echo $androidRelease | cut -d. -f1-2 | tr -d .);;
[0-9].) androidRelease=$(echo $androidRelease | sed 's/\./0/');;
[0-9]) androidRelease+="0";;
esac
[ -n "$androidRelease" ] && [ $androidCodeName = REL ] &&
# Do not use "androidCodeName" when it equals to "REL" but infer it from "androidRelease"
androidCodeName=""
case $androidRelease in
10) androidCodeName+=NoCodename;;
11) androidCodeName+="Petit Four";;
15) androidCodeName+=Cupcake;;
20|21) androidCodeName+=Eclair;;
22) androidCodeName+=FroYo;;
23) androidCodeName+=Gingerbread;;
30|31|32) androidCodeName+=Honeycomb;;
40) androidCodeName+="Ice Cream Sandwich";;
41|42|43) androidCodeName+="Jelly Bean";;
44) androidCodeName+=KitKat;;
50|51) androidCodeName+=Lollipop;;
60) androidCodeName+=Marshmallow;;
70|71) androidCodeName+=Nougat;;
80|81) androidCodeName+=Oreo;;
90) androidCodeName+=Pie;;
100) androidCodeName+=ToBeReleased;;
*) androidCodeName=unknown;;
esac
echo $androidCodeName
【讨论】:
【参考方案3】:要检查大于或等于 Marshmallow 的设备版本,请使用此代码。
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M)
要检查其他人,只需更改 VERSION_CODES,例如, K 代表 kitkat, L 代表循环播放 N 代表牛轧糖等等...
【讨论】:
【参考方案4】:例如,一个功能仅适用于 api21 up 下面我们修复了 api21 down 中的错误
if(Build.VERSION.SDK_INT >= 21)
//only api 21 above
else
//only api 21 down
【讨论】:
【参考方案5】:我无法对答案发表评论,但 Kaushik 的答案存在巨大错误: SDK_INT与系统版本不同,实际上是指API Level。
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH)
//this code will be executed on devices running ICS or later
Build.VERSION_CODES.ICE_CREAM_SANDWICH
的值等于 14。
14是Ice Cream Sandwich的API级别,系统版本是4.0。所以如果你写的是 4.0,你的代码会在所有从 Donut 开始的设备上执行,因为 4 是 Donut 的 API 级别(Build.VERSION_CODES.DONUT
等于 4)。
if(Build.VERSION.SDK_INT >= 4.0)
//this code will be executed on devices running on DONUT (NOT ICS) or later
这个例子是为什么使用“幻数”是一个坏习惯的一个原因。
【讨论】:
其实Build.VERSION.SDK_INT是API级别,不是版本号。所以正确的行是if(Build.VERSION.SDK_INT >= 15)
如果我告诉你版本代码与 API 级别相同并且 ICE_CREAM_SANDWICH 的 SDK_INT 是 14 而不是 15,该怎么办? @erdomester【参考方案6】:
使用此方法:
public static String getAndroidVersion()
String versionName = "";
try
versionName = String.valueOf(Build.VERSION.RELEASE);
catch (Exception e)
e.printStackTrace();
return versionName;
【讨论】:
这有什么帮助?【参考方案7】:使用这个类
import android.os.Build;
/**
* Created by MOMANI on 2016/04/14.
*/
public class AndroidVersionUtil
public static int getApiVersion()
return android.os.Build.VERSION.SDK_INT;
public static boolean isApiVersionGraterOrEqual(int thisVersion)
return android.os.Build.VERSION.SDK_INT >= thisVersion;
【讨论】:
【参考方案8】:if (Build.VERSION.SDK_INT >= ApiHelper.VERSION_CODES.HONEYCOMB_MR2)
//do anything you like.
【讨论】:
能否请您详细说明您的答案,添加更多关于您提供的解决方案的描述?【参考方案9】:Build.Version 是获取此数据的位置。这是如何格式化它的代码sn-p。
public String getAndroidVersion()
String release = Build.VERSION.RELEASE;
int sdkVersion = Build.VERSION.SDK_INT;
return "Android SDK: " + sdkVersion + " (" + release +")";
看起来像这样“Android SDK:19 (4.4.4)”
【讨论】:
【参考方案10】:使用示例:
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.GINGERBREAD)
// only for gingerbread and newer versions
【讨论】:
我完全忽略了任何比 Eclair (7)、Android 2.1 更旧的版本,很快我们也停止支持 2.1。但是您可以使用 SDK 代替 SDK_INT。 SDK 在 API 级别 4 中被弃用。请改用 SDK_INT。 我有一个问题:如果它运行在 GINGERBREAD 之前的系统上,那么我们无法获取 android.os.Build.VERSION_CODES.GINGERBREAD,应用会崩溃吗? 不,因为 GINGERBREAD 在 java 构建期间将被替换为仅数字。只需要使用更大的Android编译版本。 由于某种原因我得到了Unresolved reference: Manifest
【参考方案11】:
检查android.os.Build.VERSION
。
CODENAME
:当前开发代号,如果是发布版本,则为字符串“REL”。INCREMENTAL
:底层源代码管理用于表示此构建的内部值。RELEASE
:用户可见的版本字符串。
【讨论】:
有什么使用方法的例子吗? 这方面的难点在于 SDK_INT 已在 API 级别 4 中定义,并且在 1-3 上使用它会失败。有人知道如何很好地处理它吗? SDK 从 API 1 开始可用,INCREMENTAL 也适用于所有版本。 Build.VERSION.RELEASE 是一个字符串,因此您可以随意使用此字符串。 别担心,即使是穴居人今天也没有使用 Android API 1-3。 @Zordid【参考方案12】:Build.VERSION.RELEASE;
这将为您提供版本的实际数量;又名 2.3.3 或 2.2。 使用 Build.VERSION.SDK_INT 的问题是,如果你有一个 root 手机或自定义 rom,你可能有一个非标准操作系统(也就是我的 android 正在运行 2.3.5),并且在使用 Build.VERSION.SDK_INT 时将返回 null所以 Build.VERSION.RELEASE 无论如何都可以工作!
【讨论】:
来自 SDK:“用户可见的版本字符串。例如,“1.0”或“3.4b5”。 ....“3.4b5”如何确定是哪个版本号? 整个答案 2.3.3 是版本号,或 2.2,或 2.3.5(在我的情况下是自定义 rom)。这是整个操作系统的版本号。 它返回相同的东西菜单>>设置>>关于电话。它应该被标记为固件版本或类似的东西。 一个 int 怎么会返回 null 呢? SDK_INT 是原始 int。【参考方案13】:你可以通过Build.VERSION
找到Android版本。
文档建议您对照Build.VERSION_CODES
中的值检查Build.VERSION.SDK_INT
。
只要您意识到Build.VERSION.SDK_INT
仅在 API 级别 4(即 Android 1.6(甜甜圈)中引入)就可以了。所以这不会影响您,但如果您确实希望您的应用在 Android 1.5 或更早版本上运行,那么您将不得不使用已弃用的Build.VERSION.SDK
。
【讨论】:
以上是关于如何查看安卓系统版本?的主要内容,如果未能解决你的问题,请参考以下文章