如何从Python脚本检测Android操作系统?

zsohkypk  于 2022-12-09  发布在  Android
关注(0)|答案(2)|浏览(168)

我正在Android设备上的termux环境中运行python脚本,我希望能够检测到操作系统是Android。
传统方法行不通:

>>> import platform
>>> import sys
>>> print(platform.system())
'Linux'
>>> print(sys.platform)
'linux'
>>> print(platform.release())
'4.14.117-perf+'
>>> print(platform.platform())
'Linux-4.14.117-perf+-aarch64-with-libc'

还有哪些其他的ooTB选项可用?
一个明显有用的选项是platform.machine(),它返回armv8--这不仅仅是“Linux”,它只是体系结构,而不是操作系统,它可能会返回假阳性,例如在树莓派或其他基于arm的系统上。

fiei3ece

fiei3ece1#

我尝试了os.uname(),但没有成功。所以我建议使用子进程,因为uname -o返回b'Android\n'
下面是一个简单的Android检查:

import subprocess
subprocess.check_output(['uname', '-o']).strip() == b'Android'
yzuktlbb

yzuktlbb2#

还有一种更简单的方法,它不依赖于使用外部实用程序,而只使用os模块。代码如下:

import os # import **os** module, since we need it's *environ* variable

def isAndroid() -> bool: # function for fast usage
    for item in list(os.environ.keys()): # checks every **key** in **os.environ** dict
        if "ANDROID" in item.upper(): # if **key** contains word **ANDROID** then return True and break [Edit: Add `.upper()` so we can detect in lowercase env variables too]
            return True
    return False # returns False if no match happened

TermuxPydroid 3上返回True,但尚未在其他环境上测试
这种方法在理论上有缺陷:由于此方法使用os模块提供environmentallist,如果有人更改它或它只是在键中不包含ANDROIDword,即使它是Android平台,那么它将返回False

编辑Python 3.7+ 选项/变体

import sys
is_android: bool = hasattr(sys, 'getandroidapilevel') # Availability = 3.7+

除了版本限制/可用性和可能无法在任何其他实现中实现之外,此选项没有任何缺陷。

相关问题