Ok, I created https://bugs.python.org/issue32637 "Android: set sys.platform and os.name to android"
Victor 2018-01-23 18:01 GMT+01:00 Brett Cannon <br...@python.org>: > > > On Mon, 22 Jan 2018 at 09:29 Victor Stinner <victor.stin...@gmail.com> > wrote: >> >> Hi, >> >> I'm still talking with Paul Peny (pmpp on IRC) who is trying to build >> the master branch of Python on Android, using cross-compilation or >> directly on an Android device. I started to took notes since Android >> is a complex platforms and it's not easy for me to remember >> everything. >> >> http://vstinner.readthedocs.io/python_android.html >> >> Paul would like to support Android 4.4 Kitkat (API 19) just because >> it's possible to find cheap devices running Android, but usually only >> with old Android versions. Technically, it doesn't see difficult to >> support API 19+ (instead of 21+), a few tiny patches are needed. But I >> don't want to have a "full support" of API 19+, only basic support >> like "make sure that the compilation doesn't fail", not "all tests >> must pass". >> >> It seems like sys.platform == 'android' would be more appropriate >> since Android is not Linux: different libc, different filesystems, >> etc. > > > I've had a similar thought myself. > > -Brett > >> >> >> While Xavier promotes cross-compilation, Paul would like to build >> Python directly on Android to get pip and wheels. >> >> Honestly, I have no strong opinion, since I don't know well Android. >> I'm trying to help everybody working on the Android support. IMHO it's >> fine to support multiple ways to build Python for Android. It's not >> like there is very obvious option which has no drawback... Cross >> compilation is complex, getting a C compiler on Android also seems to >> be complex. From my point of view, compared to a common Fedora Linux, >> Android doesn't seem easy to use to develop on CPython... >> >> Victor >> >> 2017-12-10 15:19 GMT+01:00 Xavier de Gaye <xdeg...@gmail.com>: >> > The following note is a proposal to add the support of the Android >> > platform. >> > >> > The note is easier to read with clickable links at >> > https://github.com/xdegaye/cagibi/blob/master/doc/android_support.rst >> > >> > Motivations >> > =========== >> > >> > * Android is ubiquitous. >> > * This would be the first platform supported by Python that is >> > cross-compiled, >> > thanks to many contributors. >> > * Although the Android operating system is linux, it is different from >> > most >> > linux platforms, for example it does not use GNU libc and runs SELinux >> > in >> > enforcing mode. Therefore supporting this platform would make Python >> > more >> > robust and also would allow testing it on arm 64-bit processors. >> > * Python running on Android is also a handheld calculator, a successor >> > of >> > the >> > slide rule and the `HP 41`_. >> > >> > Current status >> > ============== >> > >> > * The Python test suite succeeds when run on Android emulators using >> > buildbot >> > strenuous settings with the following architectures on API 24: x86, >> > x86_64, >> > armv7 and arm64. >> > * The `Android build system`_ is described in another section. >> > * The `buildmaster-config PR 26`_ proposes to update ``master.cfg`` to >> > enable >> > buildbots to run a given Android API and architecture on the >> > emulators. >> > * The Android emulator is actually ``qemu``, so the test suites for x86 >> > and >> > x86_64 last about the same time as the test suite run natively when >> > the >> > processor of the build system is of the x86 family. The test suites >> > for >> > the >> > arm architectures last much longer: about 8 hours for arm64 and 10 >> > hours >> > for >> > armv7 on a four years old laptop. >> > * The changes that have been made to achieve this status are listed in >> > `bpo-26865`_, the Android meta-issue. >> > * Given the cpu resources required to run the test suite on the arm >> > emulators, >> > it may be difficult to find a contributed buildbot worker. So it >> > remains >> > to >> > find the hardware to run these buildbots. >> > >> > Proposal >> > ======== >> > >> > Support the Android platform on API 24 [1]_ for the x86_64, armv7 and >> > arm64 >> > architectures built with NDK 14b. >> > >> > *API 24* >> > * API 21 is the first version to provide usable support for wide >> > characters >> > and where SELinux is run in enforcing mode. >> > >> > * API 22 introduces an annoying bug on the linker that prints >> > something >> > like >> > this when python is started:: >> > >> > ``WARNING: linker: libpython3.6m.so.1.0: unused DT entry: type >> > 0x6ffffffe arg 0x14554``. >> > >> > The `termux`_ Android terminal emulator describes this problem at >> > the >> > end >> > of its `termux-packages`_ gitlab page and has implemented a >> > ``termux-elf-cleaner`` tool to strip the useless entries from the >> > ELF >> > header of executables. >> > >> > * API 24 is the first version where the `adb`_ shell is run on the >> > emulator >> > as a ``shell`` user instead of the ``root`` user previously, and the >> > first >> > version that supports arm64. >> > >> > *x86_64* >> > It seems that no handheld device exists using that architecture. It is >> > supported because the x86_64 Android emulator runs fast and therefore >> > is a >> > good candidate as a buildbot worker. >> > >> > *NDK 14b* >> > This release of the NDK is the first one to use `Unified headers`_ >> > fixing >> > numerous problems that had been fixed by updating the Python configure >> > script >> > until now (those changes have been reverted by now). >> > >> > Android idiosyncrasies >> > ====================== >> > >> > * The default shell is ``/system/bin/sh``. >> > * The file system layout is not a traditional unix layout, there is no >> > ``/tmp`` for example. Most directories have user restricted access, >> > ``/sdcard`` is mounted as ``noexec`` for example. >> > * The (java) applications are allocated a unix user id and a >> > subdirectory on >> > ``/data/data``. >> > * SELinux is run in enforcing mode. >> > * Shared memory and semaphores are not supported. >> > * The default encoding is UTF-8. >> > >> > Android build system >> > ==================== >> > >> > The Android build system is implemented at `bpo-30386`_ with `PR 1629`_ >> > and >> > is documented by its `README`_. It provides the following features: >> > >> > * To build a distribution for a device or an emulator with a given API >> > level >> > and a given architecture. >> > * To start the emulator and >> > + install the distribution >> > + start a remote interactive shell >> > + or run remotely a python command >> > + or run remotely the buildbottest >> > * Run gdb on the python process that is running on the emulator with >> > python >> > pretty-printing. >> > >> > The build system adds the ``Android/`` directory and the >> > ``configure-android`` >> > script to the root of the Python source directory on the master branch >> > without >> > modifying any other file. The build system can be installed, upgraded >> > (i.e. >> > the >> > SDK and NDK) and run remotely, through ssh for example. >> > >> > The following external libraries, when they are configured in the build >> > system, >> > are downloaded from the internet and cross-compiled (only once, on the >> > first >> > run of the build system) before the cross-compilation of the extension >> > modules: >> > >> > * ``ncurses`` >> > * ``readline`` >> > * ``sqlite`` >> > * ``libffi`` >> > * ``openssl``, the cross-compilation of openssl fails on x86_64 and >> > arm64 >> > and >> > this step is skipped on those architectures. >> > >> > The following extension modules are disabled by adding them to the >> > ``*disabled*`` section of ``Modules/Setup``: >> > >> > * ``_uuid``, Android has no uuid/uuid.h header. >> > * ``grp`` some grp.h functions are not declared. >> > * ``_crypt``, Android does not have crypt.h. >> > * ``_ctypes`` on x86_64 where all long double tests fail (`bpo-32202`_) >> > and >> > on >> > arm64 (see `bpo-32203`_). >> > >> > .. [1] On Wikipedia `Android version history`_ lists the correspondence >> > between >> > API level, commercial name and version for each release. It also >> > provides >> > information on the global Android version distribution, see the two >> > charts >> > on top. >> > >> > .. _`README`: >> > https://github.com/xdegaye/cpython/blob/bpo-30386/Android/README.rst >> > .. _`bpo-26865`: https://bugs.python.org/issue26865 >> > .. _`bpo-30386`: https://bugs.python.org/issue30386 >> > .. _`bpo-32202`: https://bugs.python.org/issue32202 >> > .. _`bpo-32203`: https://bugs.python.org/issue32203 >> > .. _`PR 1629`: https://github.com/python/cpython/pull/1629 >> > .. _`buildmaster-config PR 26`: >> > https://github.com/python/buildmaster-config/pull/26 >> > .. _`Android version history`: >> > https://en.wikipedia.org/wiki/Android_version_history >> > .. _`termux`: https://termux.com/ >> > .. _`termux-packages`: https://gitlab.com/jbwhips883/termux-packages >> > .. _`adb`: https://developer.android.com/studio/command-line/adb.html >> > .. _`Unified headers`: >> > >> > https://android.googlesource.com/platform/ndk.git/+/ndk-r14-release/docs/UnifiedHeaders.md >> > .. _`HP 41`: https://en.wikipedia.org/wiki/HP-41C >> > .. vim:filetype=rst:tw=78:ts=8:sts=2:sw=2:et: >> > _______________________________________________ >> > Python-Dev mailing list >> > Python-Dev@python.org >> > https://mail.python.org/mailman/listinfo/python-dev >> > Unsubscribe: >> > >> > https://mail.python.org/mailman/options/python-dev/victor.stinner%40gmail.com >> _______________________________________________ >> Python-Dev mailing list >> Python-Dev@python.org >> https://mail.python.org/mailman/listinfo/python-dev >> Unsubscribe: >> https://mail.python.org/mailman/options/python-dev/brett%40python.org _______________________________________________ Python-Dev mailing list Python-Dev@python.org https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com