[Python-Dev] Support of the Android platform

Victor Stinner victor.stinner at gmail.com
Sun Dec 10 18:24:48 EST 2017


Xavier is working on fixing random issues specific to Android since 2
years. He is almost done, the last step is just to add a build infra to get
a buildbot.

https://github.com/python/cpython/pull/1629
https://bugs.python.org/issue30386

It's a set of scripts to cross compile Python from Linux to Android.

>From the ones who missed it, Xavier is a core dev and will maintain this
stuff ;-)

Since these changes add a new directory without touching the rest of the
code, I don't see a reason to not add it.

Victor

Le 10 déc. 2017 21:29, "Brett Cannon" <brett at python.org> a écrit :

> While the note from a technical standpoint is interest, Xavier, I don't
> quite see what needs to be done to support Android at this point. Are you
> simply asking we add Android API 24 as an official platform? Or permission
> to add your note to the Misc/ directory? Basically what are you wanting to
> see happen? :)
>
> On Sun, 10 Dec 2017 at 06:19 Xavier de Gaye <xdegaye at gmail.com> wrote:
>
>> 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 at 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 at python.org
> https://mail.python.org/mailman/listinfo/python-dev
> Unsubscribe: https://mail.python.org/mailman/options/python-dev/
> victor.stinner%40gmail.com
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-dev/attachments/20171211/02c6a00e/attachment-0001.html>


More information about the Python-Dev mailing list