我正在编写一个C程序,该程序要在运行Linux的桌面以及Android设备上执行。
我必须做一些特定于桌面的事情和一些特定于Android的事情。
我的问题是,是否有办法获得C语言中的OS版本,以便我可以处理该程序是在台式机上还是在Android设备上执行?
在您的本机代码中,您可以使用property_get()
,如下所示:
#include <cutils/properties.h>
// ...
int myfunction() {
char sdk_ver_str[PROPERTY_VALUE_MAX] = "0";
property_get("ro.build.version.sdk", sdk_ver_str, "0");
sdk_ver = atoi(sdk_ver_str);
// ...
}
在桌面上,property_get()
应返回空字符串。
请注意,从Android 6开始<cutils/properties.h>
,SDK中不提供该功能,请__system_property_get
按以下方式使用:
#include <sys/system_properties.h>
// ...
int myfunction() {
char sdk_ver_str[PROPERTY_VALUE_MAX];
if (__system_property_get("ro.build.version.sdk", sdk_ver_str)) {
sdk_ver = atoi(sdk_ver_str);
} else {
// Not running on Android or SDK version is not available
// ...
}
// ...
}
您可以adb shell getprop
用来查看所有可能的Android属性。但是请注意,并非所有设备都支持所有这些功能。
更新:如果您不需要操作系统版本,而只是想知道您的C / C ++代码是否正在Android上运行,那么非常简单的判断方法就是检查环境变量是否ANDROID_PROPERTY_WORKSPACE
存在,例如:
if (getenv("ANDROID_PROPERTY_WORKSPACE")) {
// running under Android
} else {
// running on desktop
}
此方法仅需要getenv()
由提供stdlib.h
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句