diff -r 89e2201142f9 Doc/library/sys.rst --- a/Doc/library/sys.rst Fri Nov 18 10:42:10 2016 -0800 +++ b/Doc/library/sys.rst Fri Nov 18 22:38:47 2016 +0100 @@ -404,6 +404,15 @@ always available. .. versionadded:: 3.4 +.. function:: getandroidapilevel() + + Return the API version of Android as an integer. + + Availability: Android. + + .. versionadded:: 3.7 + + .. function:: getcheckinterval() Return the interpreter's "check interval"; see :func:`setcheckinterval`. diff -r 89e2201142f9 Lib/test/support/__init__.py --- a/Lib/test/support/__init__.py Fri Nov 18 10:42:10 2016 -0800 +++ b/Lib/test/support/__init__.py Fri Nov 18 22:38:47 2016 +0100 @@ -735,8 +735,12 @@ requires_lzma = unittest.skipUnless(lzma is_jython = sys.platform.startswith('java') -_ANDROID_API_LEVEL = sysconfig.get_config_var('ANDROID_API_LEVEL') -is_android = (_ANDROID_API_LEVEL is not None and _ANDROID_API_LEVEL > 0) +if hasattr(sys, 'getandroidapilevel'): + _ANDROID_API_LEVEL = sys.getandroidapilevel() + is_android = (_ANDROID_API_LEVEL > 0) +else: + _ANDROID_API_LEVEL = None + is_android = False if sys.platform != 'win32': unix_shell = '/system/bin/sh' if is_android else '/bin/sh' diff -r 89e2201142f9 Python/sysmodule.c --- a/Python/sysmodule.c Fri Nov 18 10:42:10 2016 -0800 +++ b/Python/sysmodule.c Fri Nov 18 22:38:47 2016 +0100 @@ -1350,6 +1350,20 @@ PyDoc_STRVAR(is_finalizing_doc, Return True if Python is exiting."); +#ifdef ANDROID_API_LEVEL +PyDoc_STRVAR(getandroidapilevel_doc, +"getandroidapilevel()\n\ +\n\ +Return the running API version of Android as an integer."); + +static PyObject * +sys_getandroidapilevel(PyObject *self) +{ + return PyLong_FromLong(ANDROID_API_LEVEL); +} +#endif /* ANDROID_API_LEVEL */ + + static PyMethodDef sys_methods[] = { /* Might as well keep this in alphabetic order */ {"callstats", (PyCFunction)PyEval_GetCallStats, METH_NOARGS, @@ -1434,6 +1448,10 @@ static PyMethodDef sys_methods[] = { METH_VARARGS | METH_KEYWORDS, set_asyncgen_hooks_doc}, {"get_asyncgen_hooks", sys_get_asyncgen_hooks, METH_NOARGS, get_asyncgen_hooks_doc}, +#ifdef ANDROID_API_LEVEL + {"getandroidapilevel", (PyCFunction)sys_getandroidapilevel, METH_NOARGS, + getandroidapilevel_doc}, +#endif {NULL, NULL} /* sentinel */ };