Showing preview only (2,081K chars total). Download the full file or copy to clipboard to get everything.
Repository: kivy/python-for-android
Branch: develop
Commit: a4a8b2814424
Files: 589
Total size: 1.9 MB
Directory structure:
gitextract_039kc1dw/
├── .coveragerc
├── .deepsource.toml
├── .dockerignore
├── .github/
│ ├── ISSUE_TEMPLATE.md
│ └── workflows/
│ ├── custom-build.yml
│ ├── docker.yml
│ ├── no-response.yml
│ ├── push.yml
│ ├── pypi-release.yml
│ └── support.yml
├── .gitignore
├── .projectile
├── .readthedocs.yaml
├── CHANGELOG.md
├── CODE_OF_CONDUCT.md
├── CONTACT.md
├── CONTRIBUTING.md
├── Dockerfile
├── FAQ.md
├── LICENSE
├── MANIFEST.in
├── Makefile
├── README.md
├── ci/
│ ├── __init__.py
│ ├── constants.py
│ ├── makefiles/
│ │ ├── android.mk
│ │ └── osx.mk
│ ├── rebuild_updated_recipes.py
│ └── run_emulator_tests.sh
├── distribute.sh
├── doc/
│ ├── Makefile
│ ├── make.bat
│ ├── requirements.txt
│ └── source/
│ ├── _static/
│ │ └── .empty
│ ├── apis.rst
│ ├── bootstraps.rst
│ ├── buildoptions.rst
│ ├── commands.rst
│ ├── conf.py
│ ├── contact.rst
│ ├── contribute.rst
│ ├── distutils.rst
│ ├── docker.rst
│ ├── faq.rst
│ ├── index.rst
│ ├── quickstart.rst
│ ├── recipes.rst
│ ├── services.rst
│ ├── testing_pull_requests.rst
│ └── troubleshooting.rst
├── pythonforandroid/
│ ├── __init__.py
│ ├── androidndk.py
│ ├── archs.py
│ ├── bdistapk.py
│ ├── bootstrap.py
│ ├── bootstraps/
│ │ ├── __init__.py
│ │ ├── _sdl_common/
│ │ │ ├── __init__.py
│ │ │ └── build/
│ │ │ ├── .gitignore
│ │ │ ├── blacklist.txt
│ │ │ ├── jni/
│ │ │ │ └── Application.mk
│ │ │ ├── src/
│ │ │ │ └── main/
│ │ │ │ ├── assets/
│ │ │ │ │ └── .gitkeep
│ │ │ │ ├── java/
│ │ │ │ │ ├── .gitkeep
│ │ │ │ │ └── org/
│ │ │ │ │ └── kivy/
│ │ │ │ │ └── android/
│ │ │ │ │ └── launcher/
│ │ │ │ │ ├── Project.java
│ │ │ │ │ ├── ProjectAdapter.java
│ │ │ │ │ └── ProjectChooser.java
│ │ │ │ ├── jniLibs/
│ │ │ │ │ └── .gitkeep
│ │ │ │ ├── libs/
│ │ │ │ │ └── .gitkeep
│ │ │ │ └── res/
│ │ │ │ ├── drawable/
│ │ │ │ │ └── .gitkeep
│ │ │ │ ├── layout/
│ │ │ │ │ ├── chooser_item.xml
│ │ │ │ │ ├── main.xml
│ │ │ │ │ ├── project_chooser.xml
│ │ │ │ │ └── project_empty.xml
│ │ │ │ ├── mipmap/
│ │ │ │ │ └── .gitkeep
│ │ │ │ └── mipmap-anydpi-v26/
│ │ │ │ └── .gitkeep
│ │ │ └── templates/
│ │ │ ├── AndroidManifest.tmpl.xml
│ │ │ └── strings.tmpl.xml
│ │ ├── build.gradle
│ │ ├── common/
│ │ │ └── build/
│ │ │ ├── ant.properties
│ │ │ ├── build.py
│ │ │ ├── gradle/
│ │ │ │ └── wrapper/
│ │ │ │ ├── gradle-wrapper.jar
│ │ │ │ └── gradle-wrapper.properties
│ │ │ ├── gradlew
│ │ │ ├── gradlew.bat
│ │ │ ├── jni/
│ │ │ │ ├── Android.mk
│ │ │ │ └── application/
│ │ │ │ ├── Android.mk
│ │ │ │ └── src/
│ │ │ │ ├── Android.mk
│ │ │ │ └── start.c
│ │ │ ├── src/
│ │ │ │ └── main/
│ │ │ │ └── java/
│ │ │ │ └── org/
│ │ │ │ ├── kamranzafar/
│ │ │ │ │ └── jtar/
│ │ │ │ │ ├── Octal.java
│ │ │ │ │ ├── TarConstants.java
│ │ │ │ │ ├── TarEntry.java
│ │ │ │ │ ├── TarHeader.java
│ │ │ │ │ ├── TarInputStream.java
│ │ │ │ │ ├── TarOutputStream.java
│ │ │ │ │ └── TarUtils.java
│ │ │ │ ├── kivy/
│ │ │ │ │ └── android/
│ │ │ │ │ ├── GenericBroadcastReceiver.java
│ │ │ │ │ ├── GenericBroadcastReceiverCallback.java
│ │ │ │ │ ├── PythonService.java
│ │ │ │ │ └── PythonUtil.java
│ │ │ │ └── renpy/
│ │ │ │ └── android/
│ │ │ │ ├── AssetExtract.java
│ │ │ │ ├── Hardware.java
│ │ │ │ └── ResourceManager.java
│ │ │ ├── templates/
│ │ │ │ ├── Service.tmpl.java
│ │ │ │ ├── build.properties
│ │ │ │ ├── build.tmpl.gradle
│ │ │ │ ├── build.tmpl.xml
│ │ │ │ ├── custom_rules.tmpl.xml
│ │ │ │ ├── gradle.tmpl.properties
│ │ │ │ └── lottie.xml
│ │ │ └── whitelist.txt
│ │ ├── empty/
│ │ │ ├── __init__.py
│ │ │ └── build/
│ │ │ └── .gitkeep
│ │ ├── gradle.properties
│ │ ├── qt/
│ │ │ ├── __init__.py
│ │ │ └── build/
│ │ │ ├── .gitignore
│ │ │ ├── blacklist.txt
│ │ │ ├── jni/
│ │ │ │ ├── Application.mk
│ │ │ │ └── application/
│ │ │ │ └── src/
│ │ │ │ ├── Android.mk
│ │ │ │ ├── Android_static.mk
│ │ │ │ └── bootstrap_name.h
│ │ │ ├── src/
│ │ │ │ └── main/
│ │ │ │ ├── assets/
│ │ │ │ │ └── .gitkeep
│ │ │ │ ├── java/
│ │ │ │ │ ├── .gitkeep
│ │ │ │ │ └── org/
│ │ │ │ │ └── kivy/
│ │ │ │ │ └── android/
│ │ │ │ │ └── PythonActivity.java
│ │ │ │ ├── jniLibs/
│ │ │ │ │ └── .gitkeep
│ │ │ │ ├── libs/
│ │ │ │ │ └── .gitkeep
│ │ │ │ └── res/
│ │ │ │ ├── drawable/
│ │ │ │ │ └── .gitkeep
│ │ │ │ └── mipmap/
│ │ │ │ └── .gitkeep
│ │ │ └── templates/
│ │ │ ├── AndroidManifest.tmpl.xml
│ │ │ ├── libs.tmpl.xml
│ │ │ └── strings.tmpl.xml
│ │ ├── sdl2/
│ │ │ ├── __init__.py
│ │ │ └── build/
│ │ │ ├── jni/
│ │ │ │ └── application/
│ │ │ │ └── src/
│ │ │ │ ├── Android.mk
│ │ │ │ ├── Android_static.mk
│ │ │ │ └── bootstrap_name.h
│ │ │ └── src/
│ │ │ ├── main/
│ │ │ │ └── java/
│ │ │ │ ├── .gitkeep
│ │ │ │ └── org/
│ │ │ │ └── kivy/
│ │ │ │ └── android/
│ │ │ │ └── PythonActivity.java
│ │ │ └── patches/
│ │ │ ├── SDLActivity.java.patch
│ │ │ └── SDLSurface.java.patch
│ │ ├── sdl3/
│ │ │ ├── __init__.py
│ │ │ └── build/
│ │ │ ├── jni/
│ │ │ │ └── application/
│ │ │ │ └── src/
│ │ │ │ ├── Android.mk
│ │ │ │ ├── Android_static.mk
│ │ │ │ └── bootstrap_name.h
│ │ │ └── src/
│ │ │ ├── main/
│ │ │ │ └── java/
│ │ │ │ └── org/
│ │ │ │ └── kivy/
│ │ │ │ └── android/
│ │ │ │ └── PythonActivity.java
│ │ │ └── patches/
│ │ │ ├── SDLActivity.java.patch
│ │ │ └── SDLSurface.java.patch
│ │ ├── service_library/
│ │ │ ├── __init__.py
│ │ │ └── build/
│ │ │ ├── jni/
│ │ │ │ ├── Application.mk
│ │ │ │ └── application/
│ │ │ │ └── src/
│ │ │ │ └── bootstrap_name.h
│ │ │ ├── src/
│ │ │ │ └── main/
│ │ │ │ ├── java/
│ │ │ │ │ └── org/
│ │ │ │ │ └── kivy/
│ │ │ │ │ └── android/
│ │ │ │ │ └── PythonActivity.java
│ │ │ │ └── res/
│ │ │ │ └── mipmap/
│ │ │ │ └── .gitkeep
│ │ │ └── templates/
│ │ │ ├── AndroidManifest.tmpl.xml
│ │ │ └── Service.tmpl.java
│ │ ├── service_only/
│ │ │ ├── __init__.py
│ │ │ └── build/
│ │ │ ├── blacklist.txt
│ │ │ ├── jni/
│ │ │ │ ├── Android.mk
│ │ │ │ ├── Application.mk
│ │ │ │ └── application/
│ │ │ │ └── src/
│ │ │ │ ├── Android.mk
│ │ │ │ ├── Android_static.mk
│ │ │ │ ├── bootstrap_name.h
│ │ │ │ └── pyjniusjni.c
│ │ │ ├── src/
│ │ │ │ └── main/
│ │ │ │ ├── assets/
│ │ │ │ │ └── .gitkeep
│ │ │ │ ├── java/
│ │ │ │ │ └── org/
│ │ │ │ │ └── kivy/
│ │ │ │ │ └── android/
│ │ │ │ │ └── PythonActivity.java
│ │ │ │ ├── jniLibs/
│ │ │ │ │ └── .gitkeep
│ │ │ │ └── res/
│ │ │ │ ├── drawable/
│ │ │ │ │ └── .gitkeep
│ │ │ │ └── mipmap/
│ │ │ │ └── .gitkeep
│ │ │ └── templates/
│ │ │ ├── AndroidManifest.tmpl.xml
│ │ │ ├── Service.tmpl.java
│ │ │ └── strings.tmpl.xml
│ │ ├── settings.gradle
│ │ └── webview/
│ │ ├── __init__.py
│ │ └── build/
│ │ ├── blacklist.txt
│ │ ├── jni/
│ │ │ ├── Android.mk
│ │ │ ├── Application.mk
│ │ │ └── application/
│ │ │ └── src/
│ │ │ ├── Android.mk
│ │ │ ├── Android_static.mk
│ │ │ ├── bootstrap_name.h
│ │ │ └── pyjniusjni.c
│ │ ├── proguard-project.txt
│ │ ├── src/
│ │ │ └── main/
│ │ │ ├── assets/
│ │ │ │ └── .gitkeep
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── kivy/
│ │ │ │ └── android/
│ │ │ │ └── PythonActivity.java
│ │ │ ├── jniLibs/
│ │ │ │ └── .gitkeep
│ │ │ └── res/
│ │ │ ├── drawable/
│ │ │ │ └── .gitkeep
│ │ │ ├── layout/
│ │ │ │ └── main.xml
│ │ │ ├── mipmap/
│ │ │ │ └── .gitkeep
│ │ │ ├── mipmap-anydpi-v26/
│ │ │ │ └── .gitkeep
│ │ │ └── values/
│ │ │ └── strings.xml
│ │ ├── templates/
│ │ │ ├── AndroidManifest.tmpl.xml
│ │ │ ├── WebViewLoader.tmpl.java
│ │ │ ├── strings.tmpl.xml
│ │ │ └── test/
│ │ │ ├── build.tmpl.xml
│ │ │ └── build.xml.tmpl
│ │ └── webview_includes/
│ │ ├── _load.html
│ │ └── _loading_style.css
│ ├── build.py
│ ├── checkdependencies.py
│ ├── distribution.py
│ ├── entrypoints.py
│ ├── graph.py
│ ├── includes/
│ │ └── arm64-v8a/
│ │ └── machine/
│ │ └── cpu-features.h
│ ├── logger.py
│ ├── patching.py
│ ├── prerequisites.py
│ ├── pythonpackage.py
│ ├── recipe.py
│ ├── recipes/
│ │ ├── Pillow/
│ │ │ ├── __init__.py
│ │ │ └── setup.py.patch
│ │ ├── __init__.py
│ │ ├── aiohttp/
│ │ │ └── __init__.py
│ │ ├── android/
│ │ │ ├── __init__.py
│ │ │ └── src/
│ │ │ ├── android/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── _android.pyx
│ │ │ │ ├── _android_billing.pyx
│ │ │ │ ├── _android_billing_jni.c
│ │ │ │ ├── _android_jni.c
│ │ │ │ ├── _android_sound.pyx
│ │ │ │ ├── _android_sound_jni.c
│ │ │ │ ├── _ctypes_library_finder.py
│ │ │ │ ├── activity.py
│ │ │ │ ├── billing.py
│ │ │ │ ├── broadcast.py
│ │ │ │ ├── display_cutout.py
│ │ │ │ ├── loadingscreen.py
│ │ │ │ ├── mixer.py
│ │ │ │ ├── permissions.py
│ │ │ │ ├── runnable.py
│ │ │ │ ├── storage.py
│ │ │ │ └── touch.py
│ │ │ └── setup.py
│ │ ├── apsw/
│ │ │ └── __init__.py
│ │ ├── argon2-cffi/
│ │ │ └── __init__.py
│ │ ├── atom/
│ │ │ ├── __init__.py
│ │ │ └── pyproject.toml.patch
│ │ ├── aubio/
│ │ │ └── __init__.py
│ │ ├── audiostream/
│ │ │ └── __init__.py
│ │ ├── av/
│ │ │ ├── __init__.py
│ │ │ └── patches/
│ │ │ └── compilation_syntax_errors.patch
│ │ ├── av_codecs/
│ │ │ └── __init__.py
│ │ ├── bcrypt/
│ │ │ └── __init__.py
│ │ ├── bitarray/
│ │ │ └── __init__.py
│ │ ├── boost/
│ │ │ ├── __init__.py
│ │ │ ├── disable-so-version.patch
│ │ │ ├── fix-android-issues.patch
│ │ │ ├── use-android-libs.patch
│ │ │ └── user-config.jam
│ │ ├── brokenrecipe/
│ │ │ └── __init__.py
│ │ ├── cffi/
│ │ │ ├── __init__.py
│ │ │ └── disable-pkg-config.patch
│ │ ├── coincurve/
│ │ │ ├── __init__.py
│ │ │ └── coincurve.patch
│ │ ├── coverage/
│ │ │ ├── __init__.py
│ │ │ └── fallback-utf8.patch
│ │ ├── cryptography/
│ │ │ └── __init__.py
│ │ ├── cymunk/
│ │ │ └── __init__.py
│ │ ├── cython/
│ │ │ └── __init__.py
│ │ ├── decorator/
│ │ │ └── __init__.py
│ │ ├── enaml/
│ │ │ ├── 0001-Update-setup.py.patch
│ │ │ └── __init__.py
│ │ ├── ethash/
│ │ │ └── __init__.py
│ │ ├── evdev/
│ │ │ ├── __init__.py
│ │ │ ├── evcnt.patch
│ │ │ ├── evdev-permissions.patch
│ │ │ ├── include-dir.patch
│ │ │ ├── keycnt.patch
│ │ │ └── remove-uinput.patch
│ │ ├── feedparser/
│ │ │ └── __init__.py
│ │ ├── ffmpeg/
│ │ │ ├── __init__.py
│ │ │ └── patches/
│ │ │ ├── backport-Android15-MediaCodec-fix.patch
│ │ │ └── configure.patch
│ │ ├── ffpyplayer/
│ │ │ ├── __init__.py
│ │ │ └── setup.py.patch
│ │ ├── ffpyplayer_codecs/
│ │ │ └── __init__.py
│ │ ├── flask/
│ │ │ └── __init__.py
│ │ ├── fontconfig/
│ │ │ └── __init__.py
│ │ ├── fortran/
│ │ │ └── __init__.py
│ │ ├── freetype/
│ │ │ └── __init__.py
│ │ ├── freetype-py/
│ │ │ ├── __init__.py
│ │ │ └── fix_import.patch
│ │ ├── genericndkbuild/
│ │ │ └── __init__.py
│ │ ├── gevent/
│ │ │ ├── __init__.py
│ │ │ └── cross_compiling.patch
│ │ ├── greenlet/
│ │ │ └── __init__.py
│ │ ├── groestlcoin_hash/
│ │ │ └── __init__.py
│ │ ├── grpcio/
│ │ │ ├── __init__.py
│ │ │ ├── comment-getserverbyport-r-args.patch
│ │ │ ├── remove-android-log-write.patch
│ │ │ └── use-ndk-zlib-and-openssl-recipe-include.patch
│ │ ├── harfbuzz/
│ │ │ └── __init__.py
│ │ ├── hostpython3/
│ │ │ ├── __init__.py
│ │ │ └── fix_ensurepip.patch
│ │ ├── httpx/
│ │ │ └── __init__.py
│ │ ├── icu/
│ │ │ ├── __init__.py
│ │ │ └── disable-libs-version.patch
│ │ ├── ifaddr/
│ │ │ ├── __init__.py
│ │ │ └── getifaddrs.patch
│ │ ├── ifaddrs/
│ │ │ └── __init__.py
│ │ ├── jedi/
│ │ │ ├── __init__.py
│ │ │ └── fix_MergedNamesDict_get.patch
│ │ ├── jpeg/
│ │ │ ├── Application.mk
│ │ │ ├── __init__.py
│ │ │ ├── build-static.patch
│ │ │ └── remove-version.patch
│ │ ├── kivy/
│ │ │ ├── __init__.py
│ │ │ ├── no-ast-str.patch
│ │ │ ├── sdl-gl-swapwindow-nogil.patch
│ │ │ └── use_cython.patch
│ │ ├── kivy3/
│ │ │ └── __init__.py
│ │ ├── kiwisolver/
│ │ │ └── __init__.py
│ │ ├── leveldb/
│ │ │ └── __init__.py
│ │ ├── libbz2/
│ │ │ ├── __init__.py
│ │ │ └── lib_android.patch
│ │ ├── libcairo/
│ │ │ ├── __init__.py
│ │ │ └── meson.patch
│ │ ├── libcurl/
│ │ │ └── __init__.py
│ │ ├── libexpat/
│ │ │ └── __init__.py
│ │ ├── libffi/
│ │ │ ├── Application.mk
│ │ │ ├── __init__.py
│ │ │ ├── disable-mips-check.patch
│ │ │ └── remove-version-info.patch
│ │ ├── libgeos/
│ │ │ └── __init__.py
│ │ ├── libglob/
│ │ │ ├── __init__.py
│ │ │ └── glob.patch
│ │ ├── libiconv/
│ │ │ └── __init__.py
│ │ ├── liblzma/
│ │ │ └── __init__.py
│ │ ├── libogg/
│ │ │ └── __init__.py
│ │ ├── libopenblas/
│ │ │ └── __init__.py
│ │ ├── libpcre/
│ │ │ └── __init__.py
│ │ ├── libpq/
│ │ │ └── __init__.py
│ │ ├── libpthread/
│ │ │ └── __init__.py
│ │ ├── librt/
│ │ │ └── __init__.py
│ │ ├── libsecp256k1/
│ │ │ └── __init__.py
│ │ ├── libshine/
│ │ │ └── __init__.py
│ │ ├── libsodium/
│ │ │ ├── __init__.py
│ │ │ └── size_max_fix.patch
│ │ ├── libtorrent/
│ │ │ ├── __init__.py
│ │ │ ├── disable-so-version.patch
│ │ │ ├── setup-lib-name.patch
│ │ │ ├── use-soname-python.patch
│ │ │ └── user-config-openssl.patch
│ │ ├── libtribler/
│ │ │ └── __init__.py
│ │ ├── libvorbis/
│ │ │ └── __init__.py
│ │ ├── libvpx/
│ │ │ ├── __init__.py
│ │ │ └── patches/
│ │ │ └── 0001-android-force-neon-runtime.patch
│ │ ├── libwebp/
│ │ │ └── __init__.py
│ │ ├── libx264/
│ │ │ └── __init__.py
│ │ ├── libxml2/
│ │ │ ├── __init__.py
│ │ │ ├── add-glob.c.patch
│ │ │ ├── glob.c
│ │ │ └── glob.h
│ │ ├── libxslt/
│ │ │ ├── __init__.py
│ │ │ └── fix-dlopen.patch
│ │ ├── libzbar/
│ │ │ ├── __init__.py
│ │ │ └── werror.patch
│ │ ├── libzmq/
│ │ │ └── __init__.py
│ │ ├── lxml/
│ │ │ └── __init__.py
│ │ ├── m2crypto/
│ │ │ └── __init__.py
│ │ ├── materialyoucolor/
│ │ │ └── __init__.py
│ │ ├── matplotlib/
│ │ │ ├── __init__.py
│ │ │ └── meson.patch
│ │ ├── moderngl/
│ │ │ └── __init__.py
│ │ ├── msgpack-python/
│ │ │ └── __init__.py
│ │ ├── ndghttpsclient
│ │ ├── netifaces/
│ │ │ ├── __init__.py
│ │ │ └── fix-build.patch
│ │ ├── numpy/
│ │ │ └── __init__.py
│ │ ├── omemo/
│ │ │ └── __init__.py
│ │ ├── omemo-backend-signal/
│ │ │ └── __init__.py
│ │ ├── openal/
│ │ │ └── __init__.py
│ │ ├── opencv/
│ │ │ ├── __init__.py
│ │ │ └── patches/
│ │ │ └── p4a_build.patch
│ │ ├── opencv_extras/
│ │ │ └── __init__.py
│ │ ├── openssl/
│ │ │ └── __init__.py
│ │ ├── pandas/
│ │ │ ├── __init__.py
│ │ │ └── fix_numpy_includes.patch
│ │ ├── pil/
│ │ │ └── __init__.py
│ │ ├── png/
│ │ │ ├── __init__.py
│ │ │ └── build_shared_library.patch
│ │ ├── preppy/
│ │ │ ├── __init__.py
│ │ │ └── fix-setup.patch
│ │ ├── primp/
│ │ │ └── __init__.py
│ │ ├── protobuf_cpp/
│ │ │ ├── __init__.py
│ │ │ └── fix-python3-compatibility.patch
│ │ ├── psycopg2/
│ │ │ └── __init__.py
│ │ ├── py3dns/
│ │ │ ├── __init__.py
│ │ │ └── patches/
│ │ │ └── android.patch
│ │ ├── pyaml/
│ │ │ └── __init__.py
│ │ ├── pybind11/
│ │ │ └── __init__.py
│ │ ├── pycairo/
│ │ │ ├── __init__.py
│ │ │ └── meson.patch
│ │ ├── pycparser/
│ │ │ └── __init__.py
│ │ ├── pycrypto/
│ │ │ ├── __init__.py
│ │ │ └── add_length.patch
│ │ ├── pycryptodome/
│ │ │ └── __init__.py
│ │ ├── pydantic-core/
│ │ │ └── __init__.py
│ │ ├── pygame/
│ │ │ └── __init__.py
│ │ ├── pyicu/
│ │ │ ├── __init__.py
│ │ │ └── locale.patch
│ │ ├── pyjnius/
│ │ │ ├── __init__.py
│ │ │ ├── genericndkbuild_jnienv_getter.patch
│ │ │ ├── sdl3_jnienv_getter.patch
│ │ │ └── use_cython.patch
│ │ ├── pyleveldb/
│ │ │ ├── __init__.py
│ │ │ └── bindings-only.patch
│ │ ├── pymunk/
│ │ │ └── __init__.py
│ │ ├── pynacl/
│ │ │ └── __init__.py
│ │ ├── pyogg/
│ │ │ ├── __init__.py
│ │ │ └── patches/
│ │ │ └── fix-find-lib.patch
│ │ ├── pyopenal/
│ │ │ ├── __init__.py
│ │ │ └── patches/
│ │ │ └── fix-find-lib.patch
│ │ ├── pyopenssl/
│ │ │ ├── __init__.py
│ │ │ └── fix-dlfcn.patch
│ │ ├── pyproj/
│ │ │ └── __init__.py
│ │ ├── pyrxp/
│ │ │ └── __init__.py
│ │ ├── pysdl2/
│ │ │ └── __init__.py
│ │ ├── pysha3/
│ │ │ └── __init__.py
│ │ ├── python3/
│ │ │ ├── __init__.py
│ │ │ └── patches/
│ │ │ ├── 3.14_armv7l_fix.patch
│ │ │ ├── 3.14_fix_remote_debug.patch
│ │ │ ├── cpython-311-ctypes-find-library.patch
│ │ │ ├── py3.7.1_fix-ctypes-util-find-library.patch
│ │ │ ├── py3.7.1_fix-zlib-version.patch
│ │ │ ├── py3.7.1_fix_cortex_a8.patch
│ │ │ ├── py3.8.1.patch
│ │ │ ├── py3.8.1_fix_cortex_a8.patch
│ │ │ ├── pyconfig_detection.patch
│ │ │ └── reproducible-buildinfo.diff
│ │ ├── pyusb/
│ │ │ ├── __init__.py
│ │ │ └── fix-android.patch
│ │ ├── pyzbar/
│ │ │ └── __init__.py
│ │ ├── pyzmq/
│ │ │ └── __init__.py
│ │ ├── regex/
│ │ │ └── __init__.py
│ │ ├── reportlab/
│ │ │ ├── __init__.py
│ │ │ └── patches/
│ │ │ └── fix-setup.patch
│ │ ├── ruamel.yaml/
│ │ │ ├── __init__.py
│ │ │ └── disable-pip-req.patch
│ │ ├── scipy/
│ │ │ ├── __init__.py
│ │ │ ├── meson.patch
│ │ │ └── wrapper.py
│ │ ├── scrypt/
│ │ │ ├── __init__.py
│ │ │ └── remove_librt.patch
│ │ ├── sdl2/
│ │ │ └── __init__.py
│ │ ├── sdl2_image/
│ │ │ ├── __init__.py
│ │ │ └── enable-webp.patch
│ │ ├── sdl2_mixer/
│ │ │ └── __init__.py
│ │ ├── sdl2_ttf/
│ │ │ └── __init__.py
│ │ ├── sdl3/
│ │ │ └── __init__.py
│ │ ├── sdl3_image/
│ │ │ ├── __init__.py
│ │ │ └── enable-webp.patch
│ │ ├── sdl3_mixer/
│ │ │ ├── __init__.py
│ │ │ └── disable-libgme.patch
│ │ ├── sdl3_ttf/
│ │ │ └── __init__.py
│ │ ├── secp256k1/
│ │ │ ├── __init__.py
│ │ │ ├── cross_compile.patch
│ │ │ ├── drop_setup_requires.patch
│ │ │ ├── find_lib.patch
│ │ │ ├── no-download.patch
│ │ │ └── pkg-config.patch
│ │ ├── setuptools/
│ │ │ └── __init__.py
│ │ ├── shapely/
│ │ │ ├── __init__.py
│ │ │ └── setup.patch
│ │ ├── snappy/
│ │ │ └── __init__.py
│ │ ├── spine/
│ │ │ └── __init__.py
│ │ ├── sqlalchemy/
│ │ │ └── __init__.py
│ │ ├── sqlite3/
│ │ │ └── __init__.py
│ │ ├── storm/
│ │ │ └── __init__.py
│ │ ├── tflite-runtime/
│ │ │ ├── CMakeLists.patch
│ │ │ ├── __init__.py
│ │ │ └── build_with_cmake.patch
│ │ ├── tiktoken/
│ │ │ └── __init__.py
│ │ ├── twisted/
│ │ │ ├── __init__.py
│ │ │ ├── incremental.patch
│ │ │ └── remove_tests.patch
│ │ ├── ujson/
│ │ │ └── __init__.py
│ │ ├── uvloop/
│ │ │ └── __init__.py
│ │ ├── vispy/
│ │ │ ├── __init__.py
│ │ │ ├── disable_font_triage.patch
│ │ │ ├── disable_freetype.patch
│ │ │ ├── disable_freetype.patch_backup
│ │ │ ├── remove_ati_check.patch
│ │ │ └── use_es2.patch
│ │ ├── vlc/
│ │ │ └── __init__.py
│ │ ├── wsaccel/
│ │ │ └── __init__.py
│ │ ├── x3dh/
│ │ │ ├── __init__.py
│ │ │ └── requires_fix.patch
│ │ ├── xeddsa/
│ │ │ ├── __init__.py
│ │ │ └── remove_dependencies.patch
│ │ ├── zbar/
│ │ │ ├── __init__.py
│ │ │ └── zbar-0.10-python-crash.patch
│ │ ├── zbarlight/
│ │ │ └── __init__.py
│ │ ├── zeroconf/
│ │ │ ├── __init__.py
│ │ │ └── patches/
│ │ │ └── setup.patch
│ │ ├── zope/
│ │ │ └── __init__.py
│ │ └── zope_interface/
│ │ ├── __init__.py
│ │ ├── fix-init.patch
│ │ └── no_tests.patch
│ ├── recommendations.py
│ ├── toolchain.py
│ ├── tools/
│ │ ├── biglink
│ │ ├── liblink
│ │ └── liblink.sh
│ └── util.py
├── setup.py
├── testapps/
│ ├── on_device_unit_tests/
│ │ ├── README.rst
│ │ ├── buildozer.spec
│ │ ├── setup.py
│ │ ├── test_app/
│ │ │ ├── app_flask.py
│ │ │ ├── app_kivy.py
│ │ │ ├── app_service.py
│ │ │ ├── constants.py
│ │ │ ├── main.py
│ │ │ ├── screen_keyboard.kv
│ │ │ ├── screen_orientation.kv
│ │ │ ├── screen_service.kv
│ │ │ ├── screen_unittests.kv
│ │ │ ├── static/
│ │ │ │ ├── Blanka-Regular.otf
│ │ │ │ └── flask.css
│ │ │ ├── templates/
│ │ │ │ ├── base.html
│ │ │ │ ├── index.html
│ │ │ │ ├── page2.html
│ │ │ │ └── unittests.html
│ │ │ ├── tests/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── mixin.py
│ │ │ │ └── test_requirements.py
│ │ │ ├── tools.py
│ │ │ ├── widgets.kv
│ │ │ └── widgets.py
│ │ └── test_qt/
│ │ ├── jar/
│ │ │ └── PySide6/
│ │ │ └── jar/
│ │ │ ├── Qt6Android.jar
│ │ │ └── Qt6AndroidBindings.jar
│ │ └── recipes/
│ │ ├── PySide6/
│ │ │ └── __init__.py
│ │ └── shiboken6/
│ │ └── __init__.py
│ ├── setup_testapp_python3_sqlite_openssl.py
│ ├── setup_vispy.py
│ ├── testapp_sqlite_openssl/
│ │ └── main.py
│ ├── testapp_vispy/
│ │ └── main.py
│ ├── testlauncher_setup/
│ │ └── sdl2.py
│ └── testlauncherreboot_setup/
│ └── sdl2.py
├── tests/
│ ├── recipes/
│ │ ├── recipe_ctx.py
│ │ ├── recipe_lib_test.py
│ │ ├── test_freetype.py
│ │ ├── test_gevent.py
│ │ ├── test_harfbuzz.py
│ │ ├── test_hostpython3.py
│ │ ├── test_icu.py
│ │ ├── test_jpeg.py
│ │ ├── test_leveldb.py
│ │ ├── test_libbz2.py
│ │ ├── test_libcurl.py
│ │ ├── test_libexpat.py
│ │ ├── test_libffi.py
│ │ ├── test_libgeos.py
│ │ ├── test_libiconv.py
│ │ ├── test_liblzma.py
│ │ ├── test_libogg.py
│ │ ├── test_libpq.py
│ │ ├── test_libsecp256k1.py
│ │ ├── test_libshine.py
│ │ ├── test_libvorbis.py
│ │ ├── test_libvpx.py
│ │ ├── test_libx264.py
│ │ ├── test_libxml2.py
│ │ ├── test_libxslt.py
│ │ ├── test_openal.py
│ │ ├── test_openssl.py
│ │ ├── test_pandas.py
│ │ ├── test_png.py
│ │ ├── test_pyicu.py
│ │ ├── test_python3.py
│ │ ├── test_reportlab.py
│ │ ├── test_sdl2_mixer.py
│ │ └── test_snappy.py
│ ├── test_androidmodule_ctypes_finder.py
│ ├── test_androidndk.py
│ ├── test_archs.py
│ ├── test_bdistapk.py
│ ├── test_bootstrap.py
│ ├── test_bootstrap_build.py
│ ├── test_build.py
│ ├── test_checkdependencies.py
│ ├── test_distribution.py
│ ├── test_entrypoints.py
│ ├── test_graph.py
│ ├── test_logger.py
│ ├── test_patching.py
│ ├── test_prerequisites.py
│ ├── test_pythonpackage.py
│ ├── test_pythonpackage_basic.py
│ ├── test_recipe.py
│ ├── test_recommendations.py
│ ├── test_toolchain.py
│ └── test_util.py
└── tox.ini
================================================
FILE CONTENTS
================================================
================================================
FILE: .coveragerc
================================================
[run]
relative_files = True
omit =
*test*
[report]
exclude_lines =
pragma: no cover
def __repr__
raise NotImplementedError
if __name__ == .__main__.:
================================================
FILE: .deepsource.toml
================================================
version = 1
test_patterns = ["tests/**"]
exclude_patterns = ["testapps/**"]
[[analyzers]]
name = "python"
enabled = true
[analyzers.meta]
runtime_version = "3.x.x"
================================================
FILE: .dockerignore
================================================
venv/
.buildozer/
**/.pytest_cache/
.tox/
bin/
*.pyc
**/__pycache__
*.egg-info/
docker-data/
================================================
FILE: .github/ISSUE_TEMPLATE.md
================================================
<!--
The issue tracker is a tool to address bugs NOT a support platform.
Please use the Discord community or Stack Overflow for support questions,
more information at https://github.com/kivy/python-for-android#support
-->
### Checklist
- [ ] the issue is indeed a bug and not a support request
- [ ] issue doesn't already exist: https://github.com/kivy/python-for-android/issues
- [ ] I have a short, runnable example that reproduces the issue
- [ ] I reproduced the problem with the latest development version (`p4a.branch = develop`)
- [ ] I used the grave accent (aka backticks) to format code or logs when appropriated
### Versions
- Python:
- OS:
- Kivy:
- Cython:
- OpenJDK:
### Description
// REPLACE ME: What are you trying to get done, what has happened, what went wrong, and what did you expect?
### buildozer.spec
Command:
```sh
// REPLACE ME: buildozer command ran? e.g. buildozer android debug
// Keep the triple grave accent (aka backquote/backtick) to have the code formatted
```
Spec file:
```
// REPLACE ME: Paste your buildozer.spec file here
```
### Logs
```
// REPLACE ME: Paste the build output containing the error
// Keep the triple grave accent (a.k.a. backquote/backtick) to have the code formatted
```
================================================
FILE: .github/workflows/custom-build.yml
================================================
name: Custom build
on:
workflow_dispatch:
inputs:
arch:
description: "Comma separated architectures (e.g., armeabi-v7a, arm64-v8a, x86_64, x86)"
required: true
default: "armeabi-v7a,arm64-v8a,x86_64,x86"
artifact:
description: "Artifact type"
required: true
default: "apk"
type: choice
options:
- "aab"
- "aar"
- "apk"
bootstrap:
description: "Bootstrap to use"
required: true
default: "sdl2"
type: choice
options:
- "qt"
- "sdl2"
- "service_library"
- "service_only"
- "webview"
mode:
description: "Build mode"
required: true
default: "debug"
type: choice
options:
- "debug"
- "release"
os:
description: "Operating system to run on"
required: true
default: "ubuntu-latest"
type: choice
options:
- "ubuntu-latest"
- "macos-latest"
requirements:
description: "Comma separated requirements"
required: true
default: "python3,kivy"
env:
APK_ARTIFACT_FILENAME: bdist_unit_tests_app-debug-1.1.apk
AAB_ARTIFACT_FILENAME: bdist_unit_tests_app-release-1.1.aab
AAR_ARTIFACT_FILENAME: bdist_unit_tests_app-release-1.1.aar
PYTHONFORANDROID_PREREQUISITES_INSTALL_INTERACTIVE: 0
jobs:
build:
name: Build test APP [ ${{ github.event.inputs.arch }} | ${{ github.event.inputs.artifact }} | ${{ github.event.inputs.bootstrap }} | ${{ github.event.inputs.mode }} | ${{ github.event.inputs.os }} | ${{ github.event.inputs.requirements }}]
runs-on: ${{ github.event.inputs.os }}
steps:
- name: Checkout python-for-android
uses: actions/checkout@v4
- name: Pull the python-for-android docker image
run: make docker/pull
- name: Build python-for-android docker image
run: make docker/build
- name: Build multi-arch artifact with docker
run: |
docker run --name p4a-latest kivy/python-for-android make ARCH=${{ github.event.inputs.arch }} ARTIFACT=${{ github.event.inputs.artifact }} BOOTSTRAP=${{ github.event.inputs.bootstrap }} MODE=${{ github.event.inputs.mode }} REQUIREMENTS=${{ github.event.inputs.requirements }} testapps-generic
- name: Copy produced artifacts from docker container (*.apk, *.aab)
if: github.event.inputs.bootstrap != 'service_library'
run: |
mkdir -p dist
docker cp p4a-latest:/home/user/app/testapps/on_device_unit_tests/${{ env.APK_ARTIFACT_FILENAME }} dist/ || true
docker cp p4a-latest:/home/user/app/testapps/on_device_unit_tests/${{ env.AAB_ARTIFACT_FILENAME }} dist/ || true
- name: Copy produced artifacts from docker container (*.aar)
if: github.event.inputs.bootstrap == 'service_library'
run: |
mkdir -p dist
docker cp p4a-latest:/home/user/app/testapps/on_device_unit_tests/${{ env.AAR_ARTIFACT_FILENAME }} dist/
- name: Rename artifacts to include the build platform name (*.apk, *.aab, *.aar)
run: |
if [ -f dist/${{ env.APK_ARTIFACT_FILENAME }} ]; then mv dist/${{ env.APK_ARTIFACT_FILENAME }} dist/${{ github.event.inputs.os }}-${{ github.event.inputs.bootstrap }}-${{ env.APK_ARTIFACT_FILENAME }}; fi
if [ -f dist/${{ env.AAB_ARTIFACT_FILENAME }} ]; then mv dist/${{ env.AAB_ARTIFACT_FILENAME }} dist/${{ github.event.inputs.os }}-${{ github.event.inputs.bootstrap }}-${{ env.AAB_ARTIFACT_FILENAME }}; fi
if [ -f dist/${{ env.AAR_ARTIFACT_FILENAME }} ]; then mv dist/${{ env.AAR_ARTIFACT_FILENAME }} dist/${{ github.event.inputs.os }}-${{ github.event.inputs.bootstrap }}-${{ env.AAR_ARTIFACT_FILENAME }}; fi
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: ${{ github.event.inputs.os }}-${{ github.event.inputs.bootstrap }}-artifacts
path: dist
# Cleanup the container after all steps are done
- name: Cleanup Docker container
run: docker rm p4a-latest
if: always()
================================================
FILE: .github/workflows/docker.yml
================================================
name: Docker
on:
workflow_dispatch:
push:
branches:
- develop
tags:
- "*"
pull_request:
jobs:
docker:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: docker/setup-buildx-action@v3
- run: make docker/build
- name: docker login
if: github.ref == 'refs/heads/develop' || startsWith(github.ref, 'refs/tags/')
env:
DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
run: make docker/login
- name: docker push
if: github.ref == 'refs/heads/develop'
run: make docker/push
- name: docker push (tag)
if: startsWith(github.ref, 'refs/tags/')
run: |
make docker/tag DOCKER_TAG=${GITHUB_REF#refs/tags/}
make docker/push
================================================
FILE: .github/workflows/no-response.yml
================================================
name: No Response
# Both `issue_comment` and `scheduled` event types are required for this Action
# to work properly.
on:
issue_comment:
types: [created]
schedule:
# Schedule for an arbitrary time (5am) once every day
- cron: '* 5 * * *'
jobs:
noResponse:
# Don't run if in a fork
if: github.repository_owner == 'kivy'
runs-on: ubuntu-latest
steps:
- uses: lee-dohm/no-response@9bb0a4b5e6a45046f00353d5de7d90fb8bd773bb
# This commit hash targets release v0.5.0 of lee-dohm/no-response.
# Targeting a commit hash instead of a tag has been done for security reasons.
# Please be aware that the commit hash specifically targets the "Automatic compilation"
# done by `github-actions[bot]` as the `no-response` Action needs to be compiled.
with:
token: ${{ github.token }}
daysUntilClose: 42
responseRequiredLabel: 'awaiting-reply'
closeComment: >
This issue has been automatically closed because there has been no response
to our request for more information from the original author. With only the
information that is currently in the issue, we don't have the means
to take action. Please reach out if you have or find the answers we need so
that we can investigate further.
================================================
FILE: .github/workflows/push.yml
================================================
name: Unit tests & build apps
on: ['push', 'pull_request']
env:
APK_ARTIFACT_FILENAME: bdist_unit_tests_app-debug-1.1.apk
AAB_ARTIFACT_FILENAME: bdist_unit_tests_app-release-1.1.aab
AAR_ARTIFACT_FILENAME: bdist_unit_tests_app-release-1.1.aar
PYTHONFORANDROID_PREREQUISITES_INSTALL_INTERACTIVE: 0
concurrency:
group: build-${{ github.ref }}
cancel-in-progress: true
jobs:
flake8:
name: Flake8 tests
runs-on: ubuntu-latest
steps:
- name: Checkout python-for-android
uses: actions/checkout@v5
- name: Set up Python 3.x
uses: actions/setup-python@v6
with:
python-version: 3.x
- name: Run flake8
run: |
python -m pip install --upgrade pip
pip install tox>=2.0
tox -e pep8
spotless:
name: Java Spotless check
runs-on: ubuntu-latest
steps:
- name: Checkout python-for-android
uses: actions/checkout@v5
- name: Set up Java 17
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '17'
- name: Set up Gradle
uses: gradle/actions/setup-gradle@v4
- name: Run Spotless check
working-directory: pythonforandroid/bootstraps
run: ./common/build/gradlew spotlessCheck
test:
name: Pytest [Python ${{ matrix.python-version }} | ${{ matrix.os }}]
needs: [flake8, spotless]
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
python-version: ['3.8', '3.9', '3.10', '3.11', '3.12', '3.13', '3.14', '3.14t']
os: [ubuntu-latest, macos-latest]
steps:
- name: Checkout python-for-android
uses: actions/checkout@v5
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v6
with:
python-version: ${{ matrix.python-version }}
allow-prereleases: true
- name: Tox tests
run: |
python -m pip install --upgrade pip
pip install tox>=2.0
make test
- name: Coveralls
uses: AndreMiras/coveralls-python-action@develop
if: ${{ matrix.os == 'ubuntu-latest' }}
with:
parallel: true
flag-name: run-${{ matrix.os }}-${{ matrix.python-version }}
ubuntu_build:
name: Build test APP [ ${{ matrix.runs_on }} | ${{ matrix.bootstrap.name }} ]
needs: [flake8, spotless]
runs-on: ${{ matrix.runs_on }}
strategy:
matrix:
runs_on: [ubuntu-latest]
bootstrap:
- name: sdl2
target: testapps-with-numpy
# - name: sdl2_scipy # TODO: Re-enable this failing test.
# target: testapps-with-scipy
- name: webview
target: testapps-webview
- name: service_library
target: testapps-service_library-aar
- name: qt
target: testapps-qt
steps:
- name: Maximize build space
uses: easimon/maximize-build-space@v10
with:
root-reserve-mb: 4096
swap-size-mb: 1024
remove-dotnet: 'true'
remove-android: 'true'
remove-haskell: 'true'
remove-codeql: 'true'
remove-docker-images: 'true'
- name: Checkout python-for-android
uses: actions/checkout@v5
- name: Relocate Docker data directory
run: |
sudo systemctl stop docker
sudo mkdir -p "${GITHUB_WORKSPACE}/docker-data"
echo '{"data-root": "'${GITHUB_WORKSPACE}/docker-data'"}' | sudo tee /etc/docker/daemon.json
sudo systemctl start docker
docker info | grep "Docker Root Dir"
- name: Build python-for-android docker image
run: |
docker build --tag=kivy/python-for-android .
- name: Build multi-arch ${{ matrix.bootstrap.target }} artifact with docker
run: |
docker run --name p4a-latest kivy/python-for-android make ${{ matrix.bootstrap.target }}
- name: Copy produced artifacts from docker container (*.apk, *.aab)
if: matrix.bootstrap.name != 'service_library'
run: |
mkdir -p dist
docker cp p4a-latest:/home/user/app/testapps/on_device_unit_tests/${{ env.APK_ARTIFACT_FILENAME }} dist/
docker cp p4a-latest:/home/user/app/testapps/on_device_unit_tests/${{ env.AAB_ARTIFACT_FILENAME }} dist/
- name: Copy produced artifacts from docker container (*.aar)
if: matrix.bootstrap.name == 'service_library'
run: |
mkdir -p dist
docker cp p4a-latest:/home/user/app/testapps/on_device_unit_tests/${{ env.AAR_ARTIFACT_FILENAME }} dist/
- name: Rename artifacts to include the build platform name (*.apk, *.aab, *.aar)
run: |
if [ -f dist/${{ env.APK_ARTIFACT_FILENAME }} ]; then mv dist/${{ env.APK_ARTIFACT_FILENAME }} dist/${{ matrix.runs_on }}-${{ matrix.bootstrap.name }}-${{ env.APK_ARTIFACT_FILENAME }}; fi
if [ -f dist/${{ env.AAB_ARTIFACT_FILENAME }} ]; then mv dist/${{ env.AAB_ARTIFACT_FILENAME }} dist/${{ matrix.runs_on }}-${{ matrix.bootstrap.name }}-${{ env.AAB_ARTIFACT_FILENAME }}; fi
if [ -f dist/${{ env.AAR_ARTIFACT_FILENAME }} ]; then mv dist/${{ env.AAR_ARTIFACT_FILENAME }} dist/${{ matrix.runs_on }}-${{ matrix.bootstrap.name }}-${{ env.AAR_ARTIFACT_FILENAME }}; fi
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.runs_on }}-${{ matrix.bootstrap.name }}-artifacts
path: dist
macos_build:
name: Build test APP [ ${{ matrix.runs_on }} | ${{ matrix.bootstrap.name }} ]
needs: [flake8, spotless]
runs-on: ${{ matrix.runs_on }}
strategy:
matrix:
# macos-latest (ATM macos-15) runs on Apple Silicon,
# macos-15-intel runs on Intel
runs_on: ['macos-latest', 'macos-15-intel']
bootstrap:
- name: sdl2
target: testapps-with-numpy
- name: webview
target: testapps-webview
env:
ANDROID_HOME: ${HOME}/.android
ANDROID_SDK_ROOT: ${HOME}/.android/android-sdk
ANDROID_SDK_HOME: ${HOME}/.android/android-sdk
ANDROID_NDK_HOME: ${HOME}/.android/android-ndk
steps:
- name: Checkout python-for-android
uses: actions/checkout@v5
- name: Set up Python 3.x
uses: actions/setup-python@v6
with:
python-version: 3.x
- name: Install python-for-android
run: |
python3 -m pip install --editable .
- name: Install prerequisites via pythonforandroid/prerequisites.py (Experimental)
run: |
python3 pythonforandroid/prerequisites.py
- name: Install dependencies (Legacy)
run: |
make --file ci/makefiles/osx.mk
- name: Build multi-arch apk Python 3 (armeabi-v7a, arm64-v8a, x86_64, x86)
run: |
make ${{ matrix.bootstrap.target }}
- name: Copy produced artifacts into dist/ (*.apk, *.aab)
run: |
mkdir -p dist
cp testapps/on_device_unit_tests/*.apk dist/
cp testapps/on_device_unit_tests/*.aab dist/
ls -l dist/
- name: Rename artifacts to include the build platform name (*.apk, *.aab)
run: |
if [ -f dist/${{ env.APK_ARTIFACT_FILENAME }} ]; then mv dist/${{ env.APK_ARTIFACT_FILENAME }} dist/${{ matrix.runs_on }}-${{ matrix.bootstrap.name }}-${{ env.APK_ARTIFACT_FILENAME }}; fi
if [ -f dist/${{ env.AAB_ARTIFACT_FILENAME }} ]; then mv dist/${{ env.AAB_ARTIFACT_FILENAME }} dist/${{ matrix.runs_on }}-${{ matrix.bootstrap.name }}-${{ env.AAB_ARTIFACT_FILENAME }}; fi
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.runs_on }}-${{ matrix.bootstrap.name }}-artifacts
path: dist
test_on_emulator:
name: Run App on Emulator
needs: ubuntu_build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- name: Download Artifacts
uses: actions/download-artifact@v5
with:
name: ubuntu-latest-sdl2-artifacts
path: dist/
- name: Setup and start Android Emulator
uses: reactivecircus/android-emulator-runner@v2
with:
api-level: 30
arch: x86_64
script: ci/run_emulator_tests.sh
ubuntu_rebuild_updated_recipes:
name: Test updated recipes for arch ${{ matrix.android_arch }} [ ubuntu-latest ]
needs: [flake8, spotless]
runs-on: ubuntu-latest
# continue on error to see failures across all architectures
continue-on-error: true
strategy:
matrix:
android_arch: ["arm64-v8a", "armeabi-v7a", "x86_64", "x86"]
env:
REBUILD_UPDATED_RECIPES_EXTRA_ARGS: --arch=${{ matrix.android_arch }}
steps:
- name: Maximize build space
uses: easimon/maximize-build-space@v10
with:
root-reserve-mb: 4096
swap-size-mb: 1024
remove-dotnet: 'true'
remove-android: 'true'
remove-haskell: 'true'
remove-codeql: 'true'
remove-docker-images: 'true'
- name: Checkout python-for-android (all-history)
uses: actions/checkout@v5
with:
fetch-depth: 0
- name: Relocate Docker data directory
run: |
sudo systemctl stop docker
sudo mkdir -p "${GITHUB_WORKSPACE}/docker-data"
echo '{"data-root": "'${GITHUB_WORKSPACE}/docker-data'"}' | sudo tee /etc/docker/daemon.json
sudo systemctl start docker
docker info | grep "Docker Root Dir"
- name: Pull docker image
run: |
make docker/pull
- name: Rebuild updated recipes
run: |
make docker/run/make/rebuild_updated_recipes
macos_rebuild_updated_recipes:
name: Test updated recipes for arch ${{ matrix.android_arch }} [ ${{ matrix.runs_on }} ]
needs: [flake8, spotless]
runs-on: ${{ matrix.runs_on }}
# continue on error to see failures across all architectures
continue-on-error: true
strategy:
matrix:
android_arch: ["arm64-v8a", "armeabi-v7a", "x86_64", "x86"]
# macos-latest (ATM macos-15) runs on Apple Silicon,
# macos-15-intel runs on Intel
runs_on: ['macos-latest', 'macos-15-intel']
env:
ANDROID_HOME: ${HOME}/.android
ANDROID_SDK_ROOT: ${HOME}/.android/android-sdk
ANDROID_SDK_HOME: ${HOME}/.android/android-sdk
ANDROID_NDK_HOME: ${HOME}/.android/android-ndk
REBUILD_UPDATED_RECIPES_EXTRA_ARGS: --arch=${{ matrix.android_arch }}
steps:
- name: Checkout python-for-android (all-history)
uses: actions/checkout@v5
with:
fetch-depth: 0
- name: Set up Python 3.x
uses: actions/setup-python@v6
with:
python-version: 3.x
- name: Install python-for-android
run: |
python3 -m pip install --editable .
- name: Install prerequisites via pythonforandroid/prerequisites.py (Experimental)
run: |
python3 pythonforandroid/prerequisites.py
- name: Install dependencies (Legacy)
run: |
make --file ci/makefiles/osx.mk
- name: Rebuild updated recipes
run: |
make rebuild_updated_recipes
coveralls_finish:
needs: test
runs-on: ubuntu-latest
steps:
- name: Coveralls Finished
uses: AndreMiras/coveralls-python-action@develop
with:
parallel-finished: true
documentation:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- name: Requirements
run: |
python -m pip install --upgrade pip
pip install -r doc/requirements.txt
- name: Check links
run: sphinx-build -b linkcheck doc/source doc/build
- name: Generate documentation
run: sphinx-build doc/source doc/build
================================================
FILE: .github/workflows/pypi-release.yml
================================================
name: PyPI release
on: [push]
jobs:
pypi_release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python 3.x
uses: actions/setup-python@v5
with:
python-version: '3.x'
- name: Install dependencies
run: |
python -m pip install --upgrade setuptools wheel twine
- name: Build
run: |
python setup.py sdist bdist_wheel
twine check dist/*
- name: Publish package
if: github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags')
uses: pypa/gh-action-pypi-publish@v1.13.0
with:
user: __token__
password: ${{ secrets.pypi_password }}
================================================
FILE: .github/workflows/support.yml
================================================
# When a user creates an issue that is actually a support request, it should
# be closed with a friendly comment.
#
# This triggers on an issue being labelled with the `support` tag.
name: 'Support Requests'
on:
issues:
types: [labeled, unlabeled, reopened]
permissions:
issues: write
jobs:
action:
runs-on: ubuntu-latest
steps:
- uses: dessant/support-requests@v4
with:
github-token: ${{ github.token }}
support-label: 'support'
issue-comment: >
👋 @{issue-author},
Sorry to hear you are having difficulties with Kivy's python-for-android; Kivy unites a number of different technologies, so building apps can be temperamental.
We try to use GitHub issues only to track work for developers to do to fix bugs and add new features to python-for-android.
However, this issue appears to be a support request. Please use our
[support channels](https://github.com/kivy/python-for-android/blob/master/CONTACT.md)
to get help with the project.
If you're having trouble installing python-for-android,
please see our [quickstart](https://python-for-android.readthedocs.io/en/latest/quickstart) guide.
If you're having trouble using python-for-android,
please see our [troubleshooting guide](https://python-for-android.readthedocs.io/en/latest/troubleshooting)
and [FAQ](https://github.com/kivy/python-for-android/blob/master/FAQ.md).
Let us know if this comment was made in error, and we'll be happy
to reopen the issue.
close-issue: true
lock-issue: false
================================================
FILE: .gitignore
================================================
*.swp
*.swo
*~
#ECLIPSE + PYDEV
.project
.pydevproject
.deps
.optional-deps
*.pyc
*.pyo
*.apk
.packages
python_for_android.egg-info
/build/
doc/build
__pycache__/
venv/
#idea/pycharm
.idea/
# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
coverage.xml
*.cover
.pytest_cache/
# testapp's build folder
testapps/build/
# Gradle build artifacts (Java linting)
pythonforandroid/bootstraps/.gradle/
pythonforandroid/bootstraps/build/
# Dolphin (the KDE file manager autogenerates the file `.directory`)
.directory
================================================
FILE: .projectile
================================================
================================================
FILE: .readthedocs.yaml
================================================
# Read the Docs configuration file for Sphinx projects
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
version: 2
build:
os: ubuntu-22.04
tools:
python: "3"
python:
install:
- requirements: doc/requirements.txt
sphinx:
configuration: doc/source/conf.py
================================================
FILE: CHANGELOG.md
================================================
# Changelog
## [v2024.01.21](https://github.com/kivy/python-for-android/tree/v2024.01.21)
[Full Changelog](https://github.com/kivy/python-for-android/compare/v2023.09.16...v2024.01.21)
**Fixed bugs:**
- Update documentation copyright [\#2921](https://github.com/kivy/python-for-android/issues/2921)
- Support mail address is broken [\#2899](https://github.com/kivy/python-for-android/issues/2899)
- doc/macos/jdk: invalid brew install command provided. [\#2896](https://github.com/kivy/python-for-android/issues/2896)
- pyzmq recipe build fail [\#2818](https://github.com/kivy/python-for-android/issues/2818)
- Existing distribution not detected due to pip package casing mismatch [\#2494](https://github.com/kivy/python-for-android/issues/2494)
- unknown argument "fp-model" and strict is not a directory or a file [\#2359](https://github.com/kivy/python-for-android/issues/2359)
- Copy past is not working on kivy mobile app [\#2270](https://github.com/kivy/python-for-android/issues/2270)
- Flaky test failure in blacklist\(?\) - investigation needed [\#1781](https://github.com/kivy/python-for-android/issues/1781)
- Problem with loading gevent: BadZipfile: File is not a zip file [\#1739](https://github.com/kivy/python-for-android/issues/1739)
- ImportError when importing files containing \N{name} escape sequence [\#1060](https://github.com/kivy/python-for-android/issues/1060)
- Error with permission specification via setup.cfg [\#985](https://github.com/kivy/python-for-android/issues/985)
**Closed issues:**
- Build failed: Could not find `android` or `sdkmanager` binaries in Android SDK [\#2956](https://github.com/kivy/python-for-android/issues/2956)
- Libffi - configure: error: C compiler cannot create executables \(WSL 2\) [\#2953](https://github.com/kivy/python-for-android/issues/2953)
- G [\#2951](https://github.com/kivy/python-for-android/issues/2951)
- Hh [\#2949](https://github.com/kivy/python-for-android/issues/2949)
- Can't build for Android on macOS on M2 [\#2947](https://github.com/kivy/python-for-android/issues/2947)
- BroadcastReceiver does not invoke the callback [\#2946](https://github.com/kivy/python-for-android/issues/2946)
- Add pdf2docx library recipe [\#2941](https://github.com/kivy/python-for-android/issues/2941)
- use build aar in kotlin app ,can't load /lib/arm64/libpybundle.so file [\#2940](https://github.com/kivy/python-for-android/issues/2940)
- Feature Request: Pymssql [\#2936](https://github.com/kivy/python-for-android/issues/2936)
- LXML v4.8.0 fails to build. [\#2928](https://github.com/kivy/python-for-android/issues/2928)
- Trying to apply a plugin fails [\#2926](https://github.com/kivy/python-for-android/issues/2926)
- ModuleNotFoundError: No module named '\_sysconfigdata\_\_darwin\_darwin' [\#2925](https://github.com/kivy/python-for-android/issues/2925)
- ReadTheDocs version is unclear. [\#2920](https://github.com/kivy/python-for-android/issues/2920)
- How to get real file path from uri [\#2911](https://github.com/kivy/python-for-android/issues/2911)
- And [\#2910](https://github.com/kivy/python-for-android/issues/2910)
- ModuleNotFoundError: No module named 'backports'
[\#2909](https://github.com/kivy/python-for-android/issues/2909)
- not able to access files unless connected to adb once [\#2907](https://github.com/kivy/python-for-android/issues/2907)
- opening files in other apps [\#2906](https://github.com/kivy/python-for-android/issues/2906)
- ImportError: dlopen failed: cannot locate symbol "\_ZTVSt9bad\_alloc" [\#2903](https://github.com/kivy/python-for-android/issues/2903)
- Fails to build pyjnius [\#2902](https://github.com/kivy/python-for-android/issues/2902)
- Kivy app crashes on startup [\#2895](https://github.com/kivy/python-for-android/issues/2895)
- aar file does not import properly in version v2023.09.16 [\#2894](https://github.com/kivy/python-for-android/issues/2894)
- App is crashing with Pyrebase4 [\#2893](https://github.com/kivy/python-for-android/issues/2893)
- shared libs builds with 32 bit arch instead of 64 bit [\#2888](https://github.com/kivy/python-for-android/issues/2888)
- liblzma download error [\#2885](https://github.com/kivy/python-for-android/issues/2885)
- Misconfiguration causing failure in compilation. [\#2879](https://github.com/kivy/python-for-android/issues/2879)
- cygrpc.so is for EM\_X86\_64 \(62\) instead of EM\_AARCH64 \(183\) [\#2853](https://github.com/kivy/python-for-android/issues/2853)
- Are you able to build cffi==1.15.1? [\#2847](https://github.com/kivy/python-for-android/issues/2847)
- java.lang.IllegalStateException [\#2844](https://github.com/kivy/python-for-android/issues/2844)
- \[BUG\]: ctypes: AttributeError: undefined symbol: PyCapsule\_New [\#2840](https://github.com/kivy/python-for-android/issues/2840)
- kivy can't load image in requesturl android [\#2832](https://github.com/kivy/python-for-android/issues/2832)
- Feature Request: Add Python `3.11` support [\#2798](https://github.com/kivy/python-for-android/issues/2798)
- Error Build APK FIle using Flask [\#2783](https://github.com/kivy/python-for-android/issues/2783)
- macOS: gwadlew fails at build tools stage \(newest build tools is 34.0.0-rc3, brew/openjdk@20\). [\#2781](https://github.com/kivy/python-for-android/issues/2781)
- Kivy python Error loading video on some android device [\#2780](https://github.com/kivy/python-for-android/issues/2780)
- buildozer/p4a.prerequisites: enable automation build with no questions asked. [\#2778](https://github.com/kivy/python-for-android/issues/2778)
- \_python\_bundle does not exist...this not looks good, all python recipes should have this folder, should we expect a crash soon? [\#2773](https://github.com/kivy/python-for-android/issues/2773)
- Background service implemented using Pyjnius does not auto-restart on Kivy APK close [\#2772](https://github.com/kivy/python-for-android/issues/2772)
- \[JVM\]: FLAG\_IMMUTABLE or FLAG\_MUTABLE is required when a PendingIntent is created [\#2759](https://github.com/kivy/python-for-android/issues/2759)
- there is an issue with playing video from URL on the latest p4a releases [\#2744](https://github.com/kivy/python-for-android/issues/2744)
- App crashes at launch on specific devices \(\[libpython3.9.so\] \_PyEval\_EvalFrameDefault\) \(Adreno 730?\) [\#2723](https://github.com/kivy/python-for-android/issues/2723)
- Pandas giving error in Buildozer [\#2719](https://github.com/kivy/python-for-android/issues/2719)
- buildozer -v android debug [\#2711](https://github.com/kivy/python-for-android/issues/2711)
- \[proposed feature-request\] Lacking psutil recipe [\#2707](https://github.com/kivy/python-for-android/issues/2707)
- \[ERROR\]: Build failed: Asked to compile for no Archs, so failing. [\#2685](https://github.com/kivy/python-for-android/issues/2685)
- Feature Request: Give more access to the android project folder inside of the dist folder [\#2614](https://github.com/kivy/python-for-android/issues/2614)
- `shutil.copy()` fails on external removable storage devices [\#2589](https://github.com/kivy/python-for-android/issues/2589)
- jnius can't find class "org.kivy.android.PythonActivity" with webview [\#2533](https://github.com/kivy/python-for-android/issues/2533)
- \[MACOS\] Android app crashes on start when using macos to build [\#2519](https://github.com/kivy/python-for-android/issues/2519)
- Pillow-SIMD recipe? [\#2420](https://github.com/kivy/python-for-android/issues/2420)
- --asset & directories [\#2413](https://github.com/kivy/python-for-android/issues/2413)
- dlopen failed: cannot locate symbol "\_\_register\_atfork" on Android 5.0 [\#2410](https://github.com/kivy/python-for-android/issues/2410)
- dlib module not found error [\#2395](https://github.com/kivy/python-for-android/issues/2395)
- lxml build failed for x86 arch [\#2369](https://github.com/kivy/python-for-android/issues/2369)
- Android 10 storage permission denied [\#2364](https://github.com/kivy/python-for-android/issues/2364)
- for pytorch [\#2353](https://github.com/kivy/python-for-android/issues/2353)
- Problem with ffmpeg on Android [\#2345](https://github.com/kivy/python-for-android/issues/2345)
- NLTK recipe for python for android [\#2320](https://github.com/kivy/python-for-android/issues/2320)
- build\_tools\_versions comparison code fails for 'Android Rebuilds' SDKs because of different folder naming conventions [\#2318](https://github.com/kivy/python-for-android/issues/2318)
- verify downloads using sha256? [\#2294](https://github.com/kivy/python-for-android/issues/2294)
- outdated recipes [\#2277](https://github.com/kivy/python-for-android/issues/2277)
- Custom recipe for scipy fails with permission issue [\#2267](https://github.com/kivy/python-for-android/issues/2267)
- Kivy application generated crashes instantly with dlopen failed [\#2266](https://github.com/kivy/python-for-android/issues/2266)
- EGLlib: validate\_display: 92 error 3008 \(EGL\_BAD\_DISPLAY\) : App crashes immediately \(kivymd\) \(Buildozer\) [\#2258](https://github.com/kivy/python-for-android/issues/2258)
- libEGL : EGLNativeWindowType disconnect failed [\#2253](https://github.com/kivy/python-for-android/issues/2253)
- Hao to support multiprocess Queue in Android [\#2249](https://github.com/kivy/python-for-android/issues/2249)
- autoclass: Class only found when called in specific places? [\#2242](https://github.com/kivy/python-for-android/issues/2242)
- the app crash in time of import psycopg2 [\#2240](https://github.com/kivy/python-for-android/issues/2240)
- env must be a dict [\#2170](https://github.com/kivy/python-for-android/issues/2170)
- Pandas doesn't work [\#2157](https://github.com/kivy/python-for-android/issues/2157)
- Webview bootstrap can't find 'org.jnius.NativeInvocationHandler'. [\#2140](https://github.com/kivy/python-for-android/issues/2140)
- clang++: error: linker command failed with exit code 1 [\#2082](https://github.com/kivy/python-for-android/issues/2082)
- ModuleNotFoundError: No module named 'setuptools' [\#2078](https://github.com/kivy/python-for-android/issues/2078)
- Scraping web pages with javascript [\#2052](https://github.com/kivy/python-for-android/issues/2052)
- open webbrowser register\(\) error [\#2047](https://github.com/kivy/python-for-android/issues/2047)
- Missing javaclass when using able with previously working recipe [\#2041](https://github.com/kivy/python-for-android/issues/2041)
- :Class not found b'org/kivy/android/PythonActivity$ActivityResultListener' [\#2039](https://github.com/kivy/python-for-android/issues/2039)
- App\(using socket and opencv\) crash on opening [\#2038](https://github.com/kivy/python-for-android/issues/2038)
- android apk is crashing after displaying splash screen on phone [\#2030](https://github.com/kivy/python-for-android/issues/2030)
- Leverage Docker image caching [\#2009](https://github.com/kivy/python-for-android/issues/2009)
- entrypoint confusion with python3 [\#1999](https://github.com/kivy/python-for-android/issues/1999)
- Android app crash on opening - Python Initialize [\#1987](https://github.com/kivy/python-for-android/issues/1987)
- Error building APK: "Missing 'name' key attribute on element activity at AndroidManifest.xml" [\#1979](https://github.com/kivy/python-for-android/issues/1979)
- Ugent issues on Webview \(Android Back Button to main App\) [\#1961](https://github.com/kivy/python-for-android/issues/1961)
- JavaException: JVM exception occurred: Fail to connect to camera service [\#1943](https://github.com/kivy/python-for-android/issues/1943)
- Python version number must have subversion? cannot find Python-3.7.tgz [\#1941](https://github.com/kivy/python-for-android/issues/1941)
- dlopen failed: jnius.so is for EM\_ARM \(40\) instead of EM\_386 \(3\) [\#1927](https://github.com/kivy/python-for-android/issues/1927)
- Matplotlib recipe depends on local environment [\#1900](https://github.com/kivy/python-for-android/issues/1900)
- main window jumps up and down [\#1876](https://github.com/kivy/python-for-android/issues/1876)
- ctypes.pythonapi issues; getting AttributeError: undefined symbol [\#1866](https://github.com/kivy/python-for-android/issues/1866)
- \[enhancement\] do not rebuild already built packages [\#1860](https://github.com/kivy/python-for-android/issues/1860)
- Matplotlib recipe fails sometimes [\#1859](https://github.com/kivy/python-for-android/issues/1859)
- p4a build with NDK r18b: clang: error: unknown argument: '-mandroid' [\#1853](https://github.com/kivy/python-for-android/issues/1853)
- Activity lifecycle issues. after onDestroy, application will become unusable [\#1844](https://github.com/kivy/python-for-android/issues/1844)
- Service AutoRestart did not work [\#1823](https://github.com/kivy/python-for-android/issues/1823)
- Android debug results in error involving clang++ and linker. [\#1796](https://github.com/kivy/python-for-android/issues/1796)
- seek\(\) method on a file object doesn't use right arguments [\#1768](https://github.com/kivy/python-for-android/issues/1768)
- Same issue w/ -lpython2.7 not found, workaround [\#1753](https://github.com/kivy/python-for-android/issues/1753)
- Several issues when installing packages via pip [\#1745](https://github.com/kivy/python-for-android/issues/1745)
- Publish a new Kivy Launcher for Python 3 [\#1638](https://github.com/kivy/python-for-android/issues/1638)
- Travis conditional bootstrap build support [\#1588](https://github.com/kivy/python-for-android/issues/1588)
- Error when execute APK only on device: ImportError: cannot import name \_htmlparser [\#1523](https://github.com/kivy/python-for-android/issues/1523)
- onSensorChanged continuously called during app execution [\#1498](https://github.com/kivy/python-for-android/issues/1498)
- GC deadlock on subprocess [\#1461](https://github.com/kivy/python-for-android/issues/1461)
- Code runs on old pygame backend but not on SDL2 [\#1411](https://github.com/kivy/python-for-android/issues/1411)
- build-tools below 25 will not add jars [\#1345](https://github.com/kivy/python-for-android/issues/1345)
- Flaky continuous integration [\#1306](https://github.com/kivy/python-for-android/issues/1306)
- Icon/Logo Proposal [\#1264](https://github.com/kivy/python-for-android/issues/1264)
- Unable to write the config [\#1151](https://github.com/kivy/python-for-android/issues/1151)
- p4a does not yet work with clang [\#1097](https://github.com/kivy/python-for-android/issues/1097)
- android module seems to eat up a character from java properties [\#945](https://github.com/kivy/python-for-android/issues/945)
- TypeError: a bytes-like object is required, not 'str' [\#856](https://github.com/kivy/python-for-android/issues/856)
- Feature request: access to all permissions [\#843](https://github.com/kivy/python-for-android/issues/843)
- Extending the launcher [\#565](https://github.com/kivy/python-for-android/issues/565)
**Merged pull requests:**
- Update OpenSSL version to `1.1.1w` [\#2958](https://github.com/kivy/python-for-android/pull/2958) ([prolenodev](https://github.com/prolenodev))
- Bump Kivy version to `2.3.0` [\#2952](https://github.com/kivy/python-for-android/pull/2952) ([misl6](https://github.com/misl6))
- `sourceCompatibility` 1.7 and `targetCompatibility` 1.7 are obsolete, use 1.8 by default [\#2942](https://github.com/kivy/python-for-android/pull/2942) ([misl6](https://github.com/misl6))
- Remove redundant append into WHITELIST\_PATTERNS [\#2935](https://github.com/kivy/python-for-android/pull/2935) ([shyamnathp](https://github.com/shyamnathp))
- Update sdl2 deps to reflect the same targeted in kivy/kivy [\#2927](https://github.com/kivy/python-for-android/pull/2927) ([misl6](https://github.com/misl6))
- Update `python-for-android` prerequisites \(`Dockerfile`, `prerequisites.py`, docs\) [\#2923](https://github.com/kivy/python-for-android/pull/2923) ([misl6](https://github.com/misl6))
- Update Contributing Guidelines and Readme [\#2922](https://github.com/kivy/python-for-android/pull/2922) ([Julian-O](https://github.com/Julian-O))
- Initial support for PySide6 and Qt [\#2918](https://github.com/kivy/python-for-android/pull/2918) ([shyamnathp](https://github.com/shyamnathp))
- Introduce FAQ [\#2917](https://github.com/kivy/python-for-android/pull/2917) ([Julian-O](https://github.com/Julian-O))
- Add \(now mandatory\) `.readthedocs.yaml` file, add docs `requirements.txt` and update sphinx conf [\#2916](https://github.com/kivy/python-for-android/pull/2916) ([misl6](https://github.com/misl6))
- enable json1 extension in sqlite3 [\#2915](https://github.com/kivy/python-for-android/pull/2915) ([HyTurtle](https://github.com/HyTurtle))
- Bump `pyjnius` version to `1.6.1` [\#2914](https://github.com/kivy/python-for-android/pull/2914) ([misl6](https://github.com/misl6))
- Remove `distutils` usage, as is not available anymore on Python `3.12` [\#2912](https://github.com/kivy/python-for-android/pull/2912) ([misl6](https://github.com/misl6))
- Update Lottie player version [\#2900](https://github.com/kivy/python-for-android/pull/2900) ([HugoDaniel](https://github.com/HugoDaniel))
- Merge master into develop [\#2892](https://github.com/kivy/python-for-android/pull/2892) ([misl6](https://github.com/misl6))
- Add doc tests, make them pass. [\#2890](https://github.com/kivy/python-for-android/pull/2890) ([Julian-O](https://github.com/Julian-O))
- Update Android gradle plugin to `8.1.1` and gradle to `8.0.2` [\#2887](https://github.com/kivy/python-for-android/pull/2887) ([misl6](https://github.com/misl6))
- Add support for Python `3.11` and make it the default while building `hostpython3` and `python3` [\#2850](https://github.com/kivy/python-for-android/pull/2850) ([T-Dynamos](https://github.com/T-Dynamos))
## [v2023.09.16](https://github.com/kivy/python-for-android/tree/v2023.09.16)
[Full Changelog](https://github.com/kivy/python-for-android/compare/v2023.05.21...v2023.09.16)
**Closed issues:**
- Microphone And Audio permissions doesn't work [\#2889](https://github.com/kivy/python-for-android/issues/2889)
- Error with Scipy [\#2883](https://github.com/kivy/python-for-android/issues/2883)
- Download failed \( Downloading sqlite3 from https://www.sqlite.org/2021/sqlite-amalgamation-3350500.zip \) during buildozer -v android debug [\#2881](https://github.com/kivy/python-for-android/issues/2881)
- ONNXruntime lib open failed due to 64-bit [\#2880](https://github.com/kivy/python-for-android/issues/2880)
- Question: how to write a recipe to download and install\(coz build fail\) a wheel package directly? [\#2878](https://github.com/kivy/python-for-android/issues/2878)
- Impossible to install python for android [\#2867](https://github.com/kivy/python-for-android/issues/2867)
- scipy with kivy [\#2861](https://github.com/kivy/python-for-android/issues/2861)
- False positive parser warning. [\#2856](https://github.com/kivy/python-for-android/issues/2856)
- After successfully building app, its crashes with this error, using firebase-admin [\#2854](https://github.com/kivy/python-for-android/issues/2854)
- Kivy [\#2837](https://github.com/kivy/python-for-android/issues/2837)
- not installing on windows 10 [\#2836](https://github.com/kivy/python-for-android/issues/2836)
- Could not find com.android.tools.build:gradle:7.2.0. in android studio [\#2834](https://github.com/kivy/python-for-android/issues/2834)
- vlc recipe build fail [\#2822](https://github.com/kivy/python-for-android/issues/2822)
- mysqldb recipe build fail [\#2813](https://github.com/kivy/python-for-android/issues/2813)
- babel recipe build fail [\#2803](https://github.com/kivy/python-for-android/issues/2803)
- Python 3.10 cffi build fails [\#2799](https://github.com/kivy/python-for-android/issues/2799)
- \[Recipe request\] OpenColorIO & rawpy \(libraw\) [\#2789](https://github.com/kivy/python-for-android/issues/2789)
- Longer app load time, bigger apk size and unnecessary logs [\#2704](https://github.com/kivy/python-for-android/issues/2704)
- -fp-model argument not found, directory strict not found [\#2329](https://github.com/kivy/python-for-android/issues/2329)
- Kivy crashes on Android: ImportError: dlopen failed: library "libpython3.7m.so" not found [\#2237](https://github.com/kivy/python-for-android/issues/2237)
- pyconfig.h issue [\#2074](https://github.com/kivy/python-for-android/issues/2074)
**Merged pull requests:**
- Use Python's touch\(\) rather than shelling out. [\#2886](https://github.com/kivy/python-for-android/pull/2886) ([Julian-O](https://github.com/Julian-O))
- Standardise on move [\#2884](https://github.com/kivy/python-for-android/pull/2884) ([Julian-O](https://github.com/Julian-O))
- Remove deprecated FlatDir in Gradle template [\#2876](https://github.com/kivy/python-for-android/pull/2876) ([Julian-O](https://github.com/Julian-O))
- :rotating\_light: linter fixes [\#2874](https://github.com/kivy/python-for-android/pull/2874) ([AndreMiras](https://github.com/AndreMiras))
- Standardise ensure\_dir and rmdir [\#2871](https://github.com/kivy/python-for-android/pull/2871) ([Julian-O](https://github.com/Julian-O))
- Correct check for --sdk option [\#2870](https://github.com/kivy/python-for-android/pull/2870) ([Julian-O](https://github.com/Julian-O))
- Python versions: Update documentation & CI testing [\#2869](https://github.com/kivy/python-for-android/pull/2869) ([Julian-O](https://github.com/Julian-O))
- Patching cleanup [\#2868](https://github.com/kivy/python-for-android/pull/2868) ([Julian-O](https://github.com/Julian-O))
- Factor out dependency checking. Use modern version handling [\#2866](https://github.com/kivy/python-for-android/pull/2866) ([Julian-O](https://github.com/Julian-O))
- `build_platform` should be all-lowercase [\#2864](https://github.com/kivy/python-for-android/pull/2864) ([misl6](https://github.com/misl6))
- Fix simple typos in comments [\#2863](https://github.com/kivy/python-for-android/pull/2863) ([Julian-O](https://github.com/Julian-O))
- Use a pinned version of `Cython` for now, as most of the recipes are incompatible with `Cython==3.x.x` [\#2862](https://github.com/kivy/python-for-android/pull/2862) ([misl6](https://github.com/misl6))
- Docs: Fix typos and updated command to build apk - README [\#2860](https://github.com/kivy/python-for-android/pull/2860) ([kulothunganug](https://github.com/kulothunganug))
- Docs: Fix code string - quickstart.rst [\#2859](https://github.com/kivy/python-for-android/pull/2859) ([kulothunganug](https://github.com/kulothunganug))
- Automatically generate required pre-requisites [\#2858](https://github.com/kivy/python-for-android/pull/2858) ([Julian-O](https://github.com/Julian-O))
- Use platform.uname instead of os.uname [\#2857](https://github.com/kivy/python-for-android/pull/2857) ([Julian-O](https://github.com/Julian-O))
- Bump `kivy` version to `2.2.1` [\#2855](https://github.com/kivy/python-for-android/pull/2855) ([misl6](https://github.com/misl6))
- Correct sys\_platform [\#2852](https://github.com/kivy/python-for-android/pull/2852) ([Julian-O](https://github.com/Julian-O))
- Changed the url to use https as http fails [\#2846](https://github.com/kivy/python-for-android/pull/2846) ([kuzeyron](https://github.com/kuzeyron))
- vlc: fix build [\#2841](https://github.com/kivy/python-for-android/pull/2841) ([T-Dynamos](https://github.com/T-Dynamos))
- Optimize CI runs, by avoiding unnecessary rebuilds [\#2833](https://github.com/kivy/python-for-android/pull/2833) ([misl6](https://github.com/misl6))
- Remove `pytz` recipe, as it's not needed anymore [\#2830](https://github.com/kivy/python-for-android/pull/2830) ([misl6](https://github.com/misl6))
- Remove `dateutil` recipe, as it's not needed anymore [\#2829](https://github.com/kivy/python-for-android/pull/2829) ([misl6](https://github.com/misl6))
- Removes `mysqldb` recipe as does not support Python 3 [\#2828](https://github.com/kivy/python-for-android/pull/2828) ([misl6](https://github.com/misl6))
- Bump `actions/setup-python` and `actions/checkout` versions, as old ones are deprecated [\#2827](https://github.com/kivy/python-for-android/pull/2827) ([misl6](https://github.com/misl6))
- Removes `Babel` recipe as it's not needed anymore. [\#2826](https://github.com/kivy/python-for-android/pull/2826) ([misl6](https://github.com/misl6))
- Cffi update [\#2800](https://github.com/kivy/python-for-android/pull/2800) ([HyTurtle](https://github.com/HyTurtle))
- Merge master into develop [\#2797](https://github.com/kivy/python-for-android/pull/2797) ([misl6](https://github.com/misl6))
- Use build rather than pep517 for building [\#2784](https://github.com/kivy/python-for-android/pull/2784) ([s-t-e-v-e-n-k](https://github.com/s-t-e-v-e-n-k))
## [v2023.05.21](https://github.com/kivy/python-for-android/tree/v2023.05.21)
[Full Changelog](https://github.com/kivy/python-for-android/compare/v2023.02.10...v2023.05.21)
**Closed issues:**
- python [\#2795](https://github.com/kivy/python-for-android/issues/2795)
- Create APK from PyQt app [\#2794](https://github.com/kivy/python-for-android/issues/2794)
- psutil/\_psutil\_linux.so" is 64-bit instead of 32-bit [\#2785](https://github.com/kivy/python-for-android/issues/2785)
- pythonforandroid.toolchain.py: error: unrecognized arguments: --dir [\#2775](https://github.com/kivy/python-for-android/issues/2775)
- App [\#2774](https://github.com/kivy/python-for-android/issues/2774)
- org.kivy.android.PythonActivity$NewIntentListener is not visible from class loader java.lang.IllegalArgumentException [\#2770](https://github.com/kivy/python-for-android/issues/2770)
- Service don t start anymore, as smallIconName extra is now mandatory [\#2768](https://github.com/kivy/python-for-android/issues/2768)
- Start a background sticky service that auto-restart. [\#2767](https://github.com/kivy/python-for-android/issues/2767)
- Fail installation [\#2764](https://github.com/kivy/python-for-android/issues/2764)
- Python exception when using colorlog due to incomplete IO implementation in sys.stderr [\#2762](https://github.com/kivy/python-for-android/issues/2762)
- AttributeError: 'org.kivy.android.PythonService' object has no attribute 'getComponentName' [\#2760](https://github.com/kivy/python-for-android/issues/2760)
- https://code.videolan.org not available [\#2758](https://github.com/kivy/python-for-android/issues/2758)
- Cannot install Python-for-Android [\#2754](https://github.com/kivy/python-for-android/issues/2754)
- c/\_cffi\_backend.c:407:23: error: expression is not assignable [\#2753](https://github.com/kivy/python-for-android/issues/2753)
- not install [\#2749](https://github.com/kivy/python-for-android/issues/2749)
- APK crashes upon launch. logcat error: null pointer dereference \(occurs with imported modules\) [\#2358](https://github.com/kivy/python-for-android/issues/2358)
- Error occurred while building the application using buildozer [\#2104](https://github.com/kivy/python-for-android/issues/2104)
- "Could Not Extract Public Data" Needs very explicit instructions or feedback to the user [\#260](https://github.com/kivy/python-for-android/issues/260)
**Merged pull requests:**
- Update Kivy recipe for 2.2.0 [\#2793](https://github.com/kivy/python-for-android/pull/2793) ([misl6](https://github.com/misl6))
- Update `pyjnius` version to `1.5.0` [\#2791](https://github.com/kivy/python-for-android/pull/2791) ([misl6](https://github.com/misl6))
- fix tools/liblink: syntax error [\#2771](https://github.com/kivy/python-for-android/pull/2771) ([SomberNight](https://github.com/SomberNight))
- fix \#2768 smallIconName null can t be compared to String [\#2769](https://github.com/kivy/python-for-android/pull/2769) ([brvier](https://github.com/brvier))
- android\_api to integer [\#2765](https://github.com/kivy/python-for-android/pull/2765) ([kuzeyron](https://github.com/kuzeyron))
- Use io.IOBase for LogFile [\#2763](https://github.com/kivy/python-for-android/pull/2763) ([dylanmccall](https://github.com/dylanmccall))
- Home app functionality [\#2761](https://github.com/kivy/python-for-android/pull/2761) ([kuzeyron](https://github.com/kuzeyron))
- Add debug loggings for identifying a matching dist [\#2751](https://github.com/kivy/python-for-android/pull/2751) ([BitcoinWukong](https://github.com/BitcoinWukong))
- Add PyAV recipe [\#2750](https://github.com/kivy/python-for-android/pull/2750) ([DexerBR](https://github.com/DexerBR))
- Merge master into develop [\#2748](https://github.com/kivy/python-for-android/pull/2748) ([misl6](https://github.com/misl6))
- Add support for Python 3.10 and make it the default while building hostpython3 and python3 [\#2577](https://github.com/kivy/python-for-android/pull/2577) ([misl6](https://github.com/misl6))
## [v2023.02.10](https://github.com/kivy/python-for-android/tree/v2023.02.10) (2023-02-10)
[Full Changelog](https://github.com/kivy/python-for-android/compare/v2023.01.28...v2023.02.10)
**Closed issues:**
- AttributeError: 'str' object has no attribute 'stdout' [\#2745](https://github.com/kivy/python-for-android/issues/2745)
- Android app crash on starting up by accessing texture. Error:No module named 'typing\_extensions' [\#2743](https://github.com/kivy/python-for-android/issues/2743)
**Merged pull requests:**
- restrict sh version [\#2746](https://github.com/kivy/python-for-android/pull/2746) ([HyTurtle](https://github.com/HyTurtle))
- 🐛 fix: Update `pydantic` recipe [\#2742](https://github.com/kivy/python-for-android/pull/2742) ([FilipeMarch](https://github.com/FilipeMarch))
- Merge master into develop [\#2741](https://github.com/kivy/python-for-android/pull/2741) ([misl6](https://github.com/misl6))
## [v2023.01.28](https://github.com/kivy/python-for-android/tree/v2023.01.28) (2023-01-28)
[Full Changelog](https://github.com/kivy/python-for-android/compare/v2022.12.20...v2023.01.28)
**Closed issues:**
- Python
[\#2737](https://github.com/kivy/python-for-android/issues/2737)
- AndroidX Issue [\#2736](https://github.com/kivy/python-for-android/issues/2736)
- Kivy build failed [\#2735](https://github.com/kivy/python-for-android/issues/2735)
- Can't build apk using READ\_EXTERNAL\_STORAGE, WRITE\_EXTERNAL\_STORAGE in buildozer.spec [\#2732](https://github.com/kivy/python-for-android/issues/2732)
- BUILD FAILURE: No main.py\(o\) found in your app directory. [\#2731](https://github.com/kivy/python-for-android/issues/2731)
- Your app currently targets API level 30 and must target at least API level 31 to ensure that it is built on the latest APIs optimised for security and performance. Change your app's target API level to at least 31 [\#2729](https://github.com/kivy/python-for-android/issues/2729)
- Your app currently targets API level 30 and must target at least API level 31 to ensure that it is built on the latest APIs optimised for security and performance. Change your app's target API level to at least 31 [\#2727](https://github.com/kivy/python-for-android/issues/2727)
- `sh.CommandNotFound: ./download.sh` [\#2726](https://github.com/kivy/python-for-android/issues/2726)
- Setting `android:screenOrientation` via `--orientation` has no effect when targeting API 31 [\#2724](https://github.com/kivy/python-for-android/issues/2724)
- \[Question\]: How to set 'compileSdkVersion' to 31 or higher. [\#2722](https://github.com/kivy/python-for-android/issues/2722)
- Bug in the keyboard event listener [\#2423](https://github.com/kivy/python-for-android/issues/2423)
**Merged pull requests:**
- Implements `--manifest-orientation` and changes how `--orientation` works so we can now pass the setting to the SDL orientation hint [\#2739](https://github.com/kivy/python-for-android/pull/2739) ([misl6](https://github.com/misl6))
- Update \_\_init\_\_.py from `scrypt` recipe [\#2738](https://github.com/kivy/python-for-android/pull/2738) ([FilipeMarch](https://github.com/FilipeMarch))
- Apply a patch from SDL upstream that fixes orientation settings [\#2730](https://github.com/kivy/python-for-android/pull/2730) ([misl6](https://github.com/misl6))
- Support permission properties \(`maxSdkVersion` and `usesPermissionFlags`\) + remove `WRITE_EXTERNAL_STORAGE` permission, which has been previously declared by default [\#2725](https://github.com/kivy/python-for-android/pull/2725) ([misl6](https://github.com/misl6))
- Merge master in develop [\#2721](https://github.com/kivy/python-for-android/pull/2721) ([misl6](https://github.com/misl6))
## [v2022.12.20](https://github.com/kivy/python-for-android/tree/v2022.12.20) (2022-12-20)
[Full Changelog](https://github.com/kivy/python-for-android/compare/v2022.09.04...v2022.12.20)
**Fixed bugs:**
- `liblzma` fails to build on macOS \(sh.ErrorReturnCode\_2. when running buildozer android debug\) [\#2343](https://github.com/kivy/python-for-android/issues/2343)
**Closed issues:**
- SDL\_ttf 2.0.15 download missing \(deprecated\) related to \#2698 [\#2710](https://github.com/kivy/python-for-android/issues/2710)
- Update kivy app that's already published on google play store. [\#2709](https://github.com/kivy/python-for-android/issues/2709)
- Installing deepspeech [\#2702](https://github.com/kivy/python-for-android/issues/2702)
- ImportError: dlopen failed: library "libc++\_shared.so" not found [\#2699](https://github.com/kivy/python-for-android/issues/2699)
- ffpyplayer recipe broken after SDL2 upgrade [\#2698](https://github.com/kivy/python-for-android/issues/2698)
- ModuleNotFoundError: No module named 'android' [\#2697](https://github.com/kivy/python-for-android/issues/2697)
- Error When I set android.api = 31 [\#2696](https://github.com/kivy/python-for-android/issues/2696)
- Is there any way to protect .py code [\#2695](https://github.com/kivy/python-for-android/issues/2695)
- args.service\_class\_name results in link error [\#2679](https://github.com/kivy/python-for-android/issues/2679)
- Remove `x86_64` suffix from ndk download link [\#2676](https://github.com/kivy/python-for-android/issues/2676)
- Pillow 9.2.0 recipe? [\#2671](https://github.com/kivy/python-for-android/issues/2671)
- `ffmpeg`: unable to find library -lvpx [\#2665](https://github.com/kivy/python-for-android/issues/2665)
- Buildozer fails while build numpy recipe 'UnixCCompiler' object has no attribute 'cxx\_compiler' [\#2664](https://github.com/kivy/python-for-android/issues/2664)
- \[PEP 517\] Relax installation-time "pep517\<0.7.0" requirement [\#2573](https://github.com/kivy/python-for-android/issues/2573)
- Add support for custom resources [\#2298](https://github.com/kivy/python-for-android/issues/2298)
- Auto-correct / word suggestion does not work with Swiftkey/Samsung keyboard [\#2010](https://github.com/kivy/python-for-android/issues/2010)
**Merged pull requests:**
- `InputType.TYPE_TEXT_FLAG_MULTI_LINE` forces `InputType.TYPE_TEXT` even if `SDLActivity.keyboardInputType` is `NULL` [\#2716](https://github.com/kivy/python-for-android/pull/2716) ([misl6](https://github.com/misl6))
- secp256k1 Update "--host=" [\#2714](https://github.com/kivy/python-for-android/pull/2714) ([RobertFlatt](https://github.com/RobertFlatt))
- Delete pythonforandroid/recipes/cdecimal directory [\#2713](https://github.com/kivy/python-for-android/pull/2713) ([RobertFlatt](https://github.com/RobertFlatt))
- Bump `sdl2` version to `2.26.1` [\#2712](https://github.com/kivy/python-for-android/pull/2712) ([misl6](https://github.com/misl6))
- Flake8 does not support inline comments for any of the keys. [\#2708](https://github.com/kivy/python-for-android/pull/2708) ([misl6](https://github.com/misl6))
- Gradle: Run the clean task before anything else to make sure nothing is cached. [\#2705](https://github.com/kivy/python-for-android/pull/2705) ([misl6](https://github.com/misl6))
- Custom Service notification [\#2703](https://github.com/kivy/python-for-android/pull/2703) ([RobertFlatt](https://github.com/RobertFlatt))
- Include paths for sdl2\_mixer have changed. Added a method to return the right one. [\#2700](https://github.com/kivy/python-for-android/pull/2700) ([misl6](https://github.com/misl6))
- WRITE\_EXTERNAL\_STORAGE maxSdk [\#2694](https://github.com/kivy/python-for-android/pull/2694) ([RobertFlatt](https://github.com/RobertFlatt))
- Fixes an issue regarding blacklist and bytecode compile + some cleanup [\#2693](https://github.com/kivy/python-for-android/pull/2693) ([misl6](https://github.com/misl6))
- Bump to a version of `SDL` with patches for the TextInput / TextEditing \(SDL `2.26.0`\) [\#2692](https://github.com/kivy/python-for-android/pull/2692) ([misl6](https://github.com/misl6))
- Make CI compile aiohttp again. [\#2690](https://github.com/kivy/python-for-android/pull/2690) ([xavierfiechter](https://github.com/xavierfiechter))
- Add resources [\#2684](https://github.com/kivy/python-for-android/pull/2684) ([RobertFlatt](https://github.com/RobertFlatt))
- Update `MIN_TARGET_API` to `30` and `RECOMMENDED_TARGET_API` to `33` [\#2683](https://github.com/kivy/python-for-android/pull/2683) ([misl6](https://github.com/misl6))
- recipe.download\_file: implement shallow git cloning [\#2682](https://github.com/kivy/python-for-android/pull/2682) ([SomberNight](https://github.com/SomberNight))
- requirements: relax version bound on "pep517" [\#2680](https://github.com/kivy/python-for-android/pull/2680) ([SomberNight](https://github.com/SomberNight))
- Add new Android permissions [\#2677](https://github.com/kivy/python-for-android/pull/2677) ([RobertFlatt](https://github.com/RobertFlatt))
- Resize webview when keyboard is shown [\#2674](https://github.com/kivy/python-for-android/pull/2674) ([dbnicholson](https://github.com/dbnicholson))
- Update `SDL2`, `SDL2_ttf`, `SDL2_mixer`, `SDL2_image` to latest releases [\#2673](https://github.com/kivy/python-for-android/pull/2673) ([misl6](https://github.com/misl6))
- Fixes libvpx build [\#2672](https://github.com/kivy/python-for-android/pull/2672) ([misl6](https://github.com/misl6))
- `toml` may not be available on systemwide python [\#2670](https://github.com/kivy/python-for-android/pull/2670) ([misl6](https://github.com/misl6))
- android/activity: Add Application.ActivityLifecycleCallbacks helpers [\#2669](https://github.com/kivy/python-for-android/pull/2669) ([dbnicholson](https://github.com/dbnicholson))
- Bump minimal and recommended Android NDK version to 25b [\#2668](https://github.com/kivy/python-for-android/pull/2668) ([misl6](https://github.com/misl6))
- Include HOME in build environment [\#2582](https://github.com/kivy/python-for-android/pull/2582) ([dbnicholson](https://github.com/dbnicholson))
## [v2022.09.04](https://github.com/kivy/python-for-android/tree/v2022.09.04) (2022-09-04)
[Full Changelog](https://github.com/kivy/python-for-android/compare/v2022.07.20...v2022.09.04)
**Fixed bugs:**
- Matplotlib failed to import properly on an APK from Buildozer and Kivy [\#2643](https://github.com/kivy/python-for-android/issues/2643)
**Closed issues:**
- KeyError: Matplotlib with kivy android [\#2658](https://github.com/kivy/python-for-android/issues/2658)
- KeyError: Matplotlib [\#2659](https://github.com/kivy/python-for-android/issues/2659)
- Upgrade from NDK 19b to 23b causes problems with Pandas library [\#2654](https://github.com/kivy/python-for-android/issues/2654)
- Update Dockerfile for ARM [\#2653](https://github.com/kivy/python-for-android/issues/2653)
- Apple M2 chip doesn't generate apk: compiling error on liblzma [\#2652](https://github.com/kivy/python-for-android/issues/2652)
- aiohttp/\_http\_parser.pyx:46:0: '\_headers.pxi' not found [\#2651](https://github.com/kivy/python-for-android/issues/2651)
- \[Question\] Pip SSL ? [\#2649](https://github.com/kivy/python-for-android/issues/2649)
- Colab gives me as error "No module named 'typing\_extensions' ", even if before with the same compilation it worked [\#2648](https://github.com/kivy/python-for-android/issues/2648)
- \[Question\] Java Files [\#2646](https://github.com/kivy/python-for-android/issues/2646)
- Using foreground services will cause wired behaviour on Android 8 [\#2641](https://github.com/kivy/python-for-android/issues/2641)
- Can't apply patches with relative paths for local recipe [\#2623](https://github.com/kivy/python-for-android/issues/2623)
- Compile for x86 on MacOS [\#2215](https://github.com/kivy/python-for-android/issues/2215)
- splash always loading [\#1907](https://github.com/kivy/python-for-android/issues/1907)
- python-for-android.readthedocs.io has problems updating, apparently [\#1709](https://github.com/kivy/python-for-android/issues/1709)
- Webview apps not working on Android [\#1644](https://github.com/kivy/python-for-android/issues/1644)
**Merged pull requests:**
- `liblzma`: Use `p4a_install` instead of `install`, as a file named `INSTALL` is already present. [\#2663](https://github.com/kivy/python-for-android/pull/2663) ([misl6](https://github.com/misl6))
- Force `--platform=linux/amd64` in Dockerfile [\#2660](https://github.com/kivy/python-for-android/pull/2660) ([misl6](https://github.com/misl6))
- Remove six and enum34 dependency [\#2657](https://github.com/kivy/python-for-android/pull/2657) ([misl6](https://github.com/misl6))
- Update supported Python versions [\#2656](https://github.com/kivy/python-for-android/pull/2656) ([misl6](https://github.com/misl6))
- Fixes some E275 - assert is a keyword. [\#2647](https://github.com/kivy/python-for-android/pull/2647) ([misl6](https://github.com/misl6))
- Updates matplotlib, fixes an issue related to shared libc++ [\#2645](https://github.com/kivy/python-for-android/pull/2645) ([misl6](https://github.com/misl6))
- RTSP support for ffmpeg [\#2644](https://github.com/kivy/python-for-android/pull/2644) ([alicakici1234](https://github.com/alicakici1234))
- Fixes TypeError: str.join\(\) takes exactly one argument \(2 given\) in hostpython3/\_\_init\_\_.py", line 69 [\#2642](https://github.com/kivy/python-for-android/pull/2642) ([Furtif](https://github.com/Furtif))
- Resolve absolute path to local recipes [\#2640](https://github.com/kivy/python-for-android/pull/2640) ([dbnicholson](https://github.com/dbnicholson))
- Merges master into develop after release 2022.07.20 [\#2639](https://github.com/kivy/python-for-android/pull/2639) ([misl6](https://github.com/misl6))
- Fix webview Back button behaviour [\#2636](https://github.com/kivy/python-for-android/pull/2636) ([interlark](https://github.com/interlark))
- Add icon-bg and icon-fg to fix\_args [\#2633](https://github.com/kivy/python-for-android/pull/2633) ([danigm](https://github.com/danigm))
- Remove stray - in output file name [\#2581](https://github.com/kivy/python-for-android/pull/2581) ([dbnicholson](https://github.com/dbnicholson))
- Add option for adding files to res/xml without touching manifest [\#2330](https://github.com/kivy/python-for-android/pull/2330) ([rambo](https://github.com/rambo))
## [v2022.07.20](https://github.com/kivy/python-for-android/tree/v2022.07.20) (2022-07-20)
[Full Changelog](https://github.com/kivy/python-for-android/compare/v2022.03.13...v2022.07.20)
**Fixed bugs:**
- Current default Python version \(3.8.9\) is failing to build on latest macOS releases [\#2568](https://github.com/kivy/python-for-android/issues/2568)
- Build failed for Pillow recipe when targeting x86\_64 arch [\#2259](https://github.com/kivy/python-for-android/issues/2259)
- UnboundLocalError: local variable 'toolchain\_version' referenced before assignment [\#2190](https://github.com/kivy/python-for-android/issues/2190)
- Numpy on MacOsX fails in our `CI` tests [\#2087](https://github.com/kivy/python-for-android/issues/2087)
**Closed issues:**
- pyzbar android building error [\#2635](https://github.com/kivy/python-for-android/issues/2635)
- `tflite-runtime` build every time [\#2630](https://github.com/kivy/python-for-android/issues/2630)
- Failed to build `matplotlib` because `kiwisolver` [\#2629](https://github.com/kivy/python-for-android/issues/2629)
- Trying to build pandas with buildozer results in missing headers errors [\#2626](https://github.com/kivy/python-for-android/issues/2626)
- https://github.com/kivy/python-for-android.git [\#2625](https://github.com/kivy/python-for-android/issues/2625)
- \[SSL : CERTIFICATE\_VERIFY\_FAILED \] in Android [\#2620](https://github.com/kivy/python-for-android/issues/2620)
- How to run Python script in background in android? [\#2618](https://github.com/kivy/python-for-android/issues/2618)
- USB permission [\#2611](https://github.com/kivy/python-for-android/issues/2611)
- ffmpeg recipe for 23b build fails [\#2608](https://github.com/kivy/python-for-android/issues/2608)
- Broken jpeg recipe for NDK 23b? [\#2603](https://github.com/kivy/python-for-android/issues/2603)
- Need a help [\#2595](https://github.com/kivy/python-for-android/issues/2595)
- Termux build fails [\#2585](https://github.com/kivy/python-for-android/issues/2585)
- lapack build error [\#2584](https://github.com/kivy/python-for-android/issues/2584)
- still this issue is happening [\#2572](https://github.com/kivy/python-for-android/issues/2572)
- "Unit test apk" + "Unit test aab" + "Test updated recipes" test jobs should be run also on macOS \(both Intel and Apple Silicon\) [\#2569](https://github.com/kivy/python-for-android/issues/2569)
- unpackPyBundle\(\) on startup crashes already running service [\#2564](https://github.com/kivy/python-for-android/issues/2564)
- Webview app fail to startup. [\#2559](https://github.com/kivy/python-for-android/issues/2559)
- GenericNDKBuildRecipe Not compiling with android api \> 28 [\#2555](https://github.com/kivy/python-for-android/issues/2555)
- Is there a way to build smaller apks? [\#2553](https://github.com/kivy/python-for-android/issues/2553)
- Webview, icon [\#2552](https://github.com/kivy/python-for-android/issues/2552)
- SONAME header not present in libpython3.8.so [\#2548](https://github.com/kivy/python-for-android/issues/2548)
- How to mention Python modules in Kivy buildozer.spec file? [\#2547](https://github.com/kivy/python-for-android/issues/2547)
- Issue with pyaudio and portaudio [\#2535](https://github.com/kivy/python-for-android/issues/2535)
- \[Temporary Resolved\] Python 4 android in mac os with Apple Silicon via Roseta [\#2528](https://github.com/kivy/python-for-android/issues/2528)
- Scipy is not installed due to "Error: 'numpy' must be installed before running the build." [\#2509](https://github.com/kivy/python-for-android/issues/2509)
- Lapack depends on arm-linux-androideabi-gfortran [\#2508](https://github.com/kivy/python-for-android/issues/2508)
- Apk file built by buildozer is large in comparison to other apks [\#2473](https://github.com/kivy/python-for-android/issues/2473)
- p4a is not compatible with ndk \>= 22 [\#2391](https://github.com/kivy/python-for-android/issues/2391)
- Sympy module. Error in buildozer: no module named sympy.testing [\#2381](https://github.com/kivy/python-for-android/issues/2381)
- build.gradle 'compile' depreciated [\#2362](https://github.com/kivy/python-for-android/issues/2362)
- API 29 support [\#2360](https://github.com/kivy/python-for-android/issues/2360)
- python for android [\#2307](https://github.com/kivy/python-for-android/issues/2307)
- application is not working in android made with buildozer kivy [\#2260](https://github.com/kivy/python-for-android/issues/2260)
- hostpython3 unpack error [\#2247](https://github.com/kivy/python-for-android/issues/2247)
- no recipe for pyaudio \_portaudio. [\#2223](https://github.com/kivy/python-for-android/issues/2223)
- How to add a native Python package for kivy? [\#2089](https://github.com/kivy/python-for-android/issues/2089)
- scipy module fails loading for 32 bit and 64 bit APK builds. [\#2061](https://github.com/kivy/python-for-android/issues/2061)
- Support for androidx [\#2020](https://github.com/kivy/python-for-android/issues/2020)
- Cannot build apk using buidozer [\#2005](https://github.com/kivy/python-for-android/issues/2005)
- Android NDK - "$NDK/platforms/android-25" missing? [\#1992](https://github.com/kivy/python-for-android/issues/1992)
- Tidy up NDK 19+ support [\#1962](https://github.com/kivy/python-for-android/issues/1962)
- Support for NDK 19 [\#1613](https://github.com/kivy/python-for-android/issues/1613)
- Android NDK 18b issues [\#1525](https://github.com/kivy/python-for-android/issues/1525)
- Google requiring 64 bits binary in August 2019 [\#1519](https://github.com/kivy/python-for-android/issues/1519)
- Investigate Azure Pipelines [\#1400](https://github.com/kivy/python-for-android/issues/1400)
**Merged pull requests:**
- Use `shutil.which` instead of `sh.which` [\#2637](https://github.com/kivy/python-for-android/pull/2637) ([misl6](https://github.com/misl6))
- add service\_lib and aar to the docs [\#2634](https://github.com/kivy/python-for-android/pull/2634) ([mzakharo](https://github.com/mzakharo))
- Fix issue \#2630 [\#2631](https://github.com/kivy/python-for-android/pull/2631) ([Neizvestnyj](https://github.com/Neizvestnyj))
- lapack/scipy: support NDK r21e, x86/64 archs [\#2619](https://github.com/kivy/python-for-android/pull/2619) ([mzakharo](https://github.com/mzakharo))
- add scipy/lapack CI tests [\#2617](https://github.com/kivy/python-for-android/pull/2617) ([mzakharo](https://github.com/mzakharo))
- use LEGACY\_NDK option to build lapack/scipy with a separate NDK [\#2615](https://github.com/kivy/python-for-android/pull/2615) ([mzakharo](https://github.com/mzakharo))
- Fixing service\_library bootstrap + .aar build. [\#2612](https://github.com/kivy/python-for-android/pull/2612) ([mzakharo](https://github.com/mzakharo))
- Bump groestlcoin\_hash to 1.0.3 [\#2607](https://github.com/kivy/python-for-android/pull/2607) ([gruve-p](https://github.com/gruve-p))
- removed `usr` and `lib` from ndk library path in `librt` recipe [\#2606](https://github.com/kivy/python-for-android/pull/2606) ([kengoon](https://github.com/kengoon))
- changed arch.ndk\_platform to arch.ndk\_lib\_dir in `librt` recipe [\#2605](https://github.com/kivy/python-for-android/pull/2605) ([kengoon](https://github.com/kengoon))
- Our self-hosted Apple Silicon runner now has been migrated to actions/runner v2.292.0 which now supports arm64 natively [\#2602](https://github.com/kivy/python-for-android/pull/2602) ([misl6](https://github.com/misl6))
- Introduces pkg\_config\_location in Prerequisite and use OpenSSLPrerequisite\(\).pkg\_config\_location in hostpython3, so we can support ssl on hostpython3 just out of the box also on macOS [\#2599](https://github.com/kivy/python-for-android/pull/2599) ([misl6](https://github.com/misl6))
- Add service to webview test app [\#2598](https://github.com/kivy/python-for-android/pull/2598) ([dbnicholson](https://github.com/dbnicholson))
- Fix webview testapp jnius usage [\#2597](https://github.com/kivy/python-for-android/pull/2597) ([dbnicholson](https://github.com/dbnicholson))
- Support multiarch in webview bootstrap [\#2596](https://github.com/kivy/python-for-android/pull/2596) ([dbnicholson](https://github.com/dbnicholson))
- Handle all the macOS prerequisites \(except NDK/SDK\) via prerequisites.py [\#2594](https://github.com/kivy/python-for-android/pull/2594) ([misl6](https://github.com/misl6))
- Prefer avdmanager from cmdline-tools [\#2593](https://github.com/kivy/python-for-android/pull/2593) ([dbnicholson](https://github.com/dbnicholson))
- \*\_rebuild\_updated\_recipes CI jobs now test the updated recipe along all the supported Android archs \(arm64-v8a, armeabi-v7a, x86\_64, x86\) [\#2592](https://github.com/kivy/python-for-android/pull/2592) ([misl6](https://github.com/misl6))
- Introduces pythonforandroid/prerequisites.py \(Experimental\). This allows a more granular check and install process for dependencies on both CI jobs and users installation. [\#2591](https://github.com/kivy/python-for-android/pull/2591) ([misl6](https://github.com/misl6))
- Added py3dns recipe [\#2590](https://github.com/kivy/python-for-android/pull/2590) ([Neizvestnyj](https://github.com/Neizvestnyj))
- Upload artifacts produced from every build platform, not only ubuntu-latest [\#2588](https://github.com/kivy/python-for-android/pull/2588) ([misl6](https://github.com/misl6))
- Fixes a typo in macos\_rebuild\_updated\_recipes [\#2587](https://github.com/kivy/python-for-android/pull/2587) ([misl6](https://github.com/misl6))
- Added pythonforandroid.androidndk.AndroidNDK + some changes needed in order to support build on Apple Silicon macs. [\#2586](https://github.com/kivy/python-for-android/pull/2586) ([misl6](https://github.com/misl6))
- Set PATH using real SDK and NDK directories [\#2583](https://github.com/kivy/python-for-android/pull/2583) ([dbnicholson](https://github.com/dbnicholson))
- Add missing fetch-depth: 0 on macos\_rebuild\_updated\_recipes [\#2579](https://github.com/kivy/python-for-android/pull/2579) ([misl6](https://github.com/misl6))
- Bumps libffi to v3.4.2 + adds -fPIC on i686-linux-android [\#2578](https://github.com/kivy/python-for-android/pull/2578) ([misl6](https://github.com/misl6))
- Bumps numpy version to 1.22.3, cython version to 0.29.28 and fixes numpy build on macOS [\#2575](https://github.com/kivy/python-for-android/pull/2575) ([misl6](https://github.com/misl6))
- macOS CI: ADD APK, AAB & Updated Recipes build [\#2574](https://github.com/kivy/python-for-android/pull/2574) ([misl6](https://github.com/misl6))
- add version check to unpackPyBundle [\#2565](https://github.com/kivy/python-for-android/pull/2565) ([mzakharo](https://github.com/mzakharo))
- Merges master into develop after release 2022.03.13 [\#2562](https://github.com/kivy/python-for-android/pull/2562) ([misl6](https://github.com/misl6))
- Fixes App Icon and Presplash\_Screen For Webview bootstrap [\#2556](https://github.com/kivy/python-for-android/pull/2556) ([kengoon](https://github.com/kengoon))
- NDK 23 + Gradle 7 support [\#2550](https://github.com/kivy/python-for-android/pull/2550) ([misl6](https://github.com/misl6))
## [v2022.03.13](https://github.com/kivy/python-for-android/tree/v2022.03.13) (2022-03-13)
[Full Changelog](https://github.com/kivy/python-for-android/compare/v2021.09.05...v2022.03.13)
**Closed issues:**
- ModuleNotFoundError: No module named 'msvcrt' [\#2536](https://github.com/kivy/python-for-android/issues/2536)
- Pyarrow module do not working [\#2531](https://github.com/kivy/python-for-android/issues/2531)
- Error when building Android Application with Google modules [\#2530](https://github.com/kivy/python-for-android/issues/2530)
- arm64-v8a \(apk and aab lib\) crashes [\#2524](https://github.com/kivy/python-for-android/issues/2524)
- Python for android [\#2521](https://github.com/kivy/python-for-android/issues/2521)
- ValueError: name is too long [\#2517](https://github.com/kivy/python-for-android/issues/2517)
- With the target API 31, I got an error on Android 12 phone and cannot install it. [\#2511](https://github.com/kivy/python-for-android/issues/2511)
- How to get libnumpy.so & numpy py libs [\#2510](https://github.com/kivy/python-for-android/issues/2510)
- pydantic compiling in Buildozer with 'crypt.h' file not found [\#2507](https://github.com/kivy/python-for-android/issues/2507)
- p4a built x86\_64 library\(psutil, "ELF 64-bit LSB shared object, x86-64"\) for ARM [\#2506](https://github.com/kivy/python-for-android/issues/2506)
- matplotlib's recipe problem [\#2502](https://github.com/kivy/python-for-android/issues/2502)
- cffi's recipe problem in aab generation [\#2501](https://github.com/kivy/python-for-android/issues/2501)
- Pillow's recipe problem in aab generation [\#2497](https://github.com/kivy/python-for-android/issues/2497)
- Python compilation error: LXMLRecipe' object has no attribute 'ndk\_include\_dir' [\#2493](https://github.com/kivy/python-for-android/issues/2493)
- Android App crashing at launch - SDL seems crashing [\#2491](https://github.com/kivy/python-for-android/issues/2491)
- build an android app with ffpyplayer [\#2453](https://github.com/kivy/python-for-android/issues/2453)
- How to change "PythonActivity.java" to load mp4 file on presplash [\#2439](https://github.com/kivy/python-for-android/issues/2439)
- Kivy app krashes on android 10 [\#2434](https://github.com/kivy/python-for-android/issues/2434)
- Kivy app crashing on android after installation, what is the issue here? [\#2433](https://github.com/kivy/python-for-android/issues/2433)
- Build failed [\#2366](https://github.com/kivy/python-for-android/issues/2366)
- Reportlab bitbucket link is not working anymore [\#2310](https://github.com/kivy/python-for-android/issues/2310)
- Need to be able to create App Bundles \(.aab\) files in addition to APK files [\#2084](https://github.com/kivy/python-for-android/issues/2084)
- What exactly is mangling p4a's output with `[lots of missing output]... (and X more)`? [\#1939](https://github.com/kivy/python-for-android/issues/1939)
- Unable to compile. [\#1710](https://github.com/kivy/python-for-android/issues/1710)
**Merged pull requests:**
- Upgrading the flask version to avoid exception at the start of webview application [\#2560](https://github.com/kivy/python-for-android/pull/2560) ([Prashanth-BC](https://github.com/Prashanth-BC))
- add recipe for freetype-py to not include the prebuilt .so for the wr… [\#2558](https://github.com/kivy/python-for-android/pull/2558) ([domedave](https://github.com/domedave))
- Update to Kivy 2.1.0 [\#2557](https://github.com/kivy/python-for-android/pull/2557) ([RobertFlatt](https://github.com/RobertFlatt))
- tflite-runtime recipe [\#2554](https://github.com/kivy/python-for-android/pull/2554) ([RobertFlatt](https://github.com/RobertFlatt))
- Update AndroidManifest.tmpl.xml [\#2551](https://github.com/kivy/python-for-android/pull/2551) ([drahba](https://github.com/drahba))
- Update recipe.py \(\#2544\) [\#2546](https://github.com/kivy/python-for-android/pull/2546) ([misl6](https://github.com/misl6))
- Update python versions matrix on CI [\#2534](https://github.com/kivy/python-for-android/pull/2534) ([misl6](https://github.com/misl6))
- Add ifaddr recipe [\#2527](https://github.com/kivy/python-for-android/pull/2527) ([syrykh](https://github.com/syrykh))
- Remove websocket-client recipe [\#2526](https://github.com/kivy/python-for-android/pull/2526) ([syrykh](https://github.com/syrykh))
- Fix build [\#2525](https://github.com/kivy/python-for-android/pull/2525) ([correa](https://github.com/correa))
- Add aaptOptions noCompress [\#2523](https://github.com/kivy/python-for-android/pull/2523) ([RobertFlatt](https://github.com/RobertFlatt))
- Updated version of pygame from 2.0.1 to 2.1.0 [\#2520](https://github.com/kivy/python-for-android/pull/2520) ([CAPTAIN1947](https://github.com/CAPTAIN1947))
- Bump Pillow version to 8.4.0 [\#2516](https://github.com/kivy/python-for-android/pull/2516) ([misl6](https://github.com/misl6))
- Moved support-request to v2. v1 has been shut down. [\#2515](https://github.com/kivy/python-for-android/pull/2515) ([misl6](https://github.com/misl6))
- Add support-requests configuration. [\#2514](https://github.com/kivy/python-for-android/pull/2514) ([misl6](https://github.com/misl6))
- proper --host for libsecp256k1, libogg, libvorbis, libcurl [\#2512](https://github.com/kivy/python-for-android/pull/2512) ([accumulator](https://github.com/accumulator))
- Fix broken Contribute link [\#2505](https://github.com/kivy/python-for-android/pull/2505) ([daMatz](https://github.com/daMatz))
- Makes pep8 happy on sdl2 recipe [\#2504](https://github.com/kivy/python-for-android/pull/2504) ([misl6](https://github.com/misl6))
- Fix broken recipes with missing arch.arch in get\_site\_packages\_dir [\#2503](https://github.com/kivy/python-for-android/pull/2503) ([misl6](https://github.com/misl6))
- added android permission ACCESS\_BACKGROUND\_LOCATION [\#2500](https://github.com/kivy/python-for-android/pull/2500) ([xloem](https://github.com/xloem))
- GitHub Actions: Fixes wrong actions/checkout@v2 usage [\#2496](https://github.com/kivy/python-for-android/pull/2496) ([misl6](https://github.com/misl6))
- Fixes ndk\_include\_dir on lxml recipe. [\#2495](https://github.com/kivy/python-for-android/pull/2495) ([misl6](https://github.com/misl6))
- Move coveralls to github actions [\#2490](https://github.com/kivy/python-for-android/pull/2490) ([misl6](https://github.com/misl6))
- Master [\#2489](https://github.com/kivy/python-for-android/pull/2489) ([misl6](https://github.com/misl6))
- Add should\_build method to sdl2 recipe [\#2482](https://github.com/kivy/python-for-android/pull/2482) ([AndyRusso](https://github.com/AndyRusso))
- AAB support related changes [\#2467](https://github.com/kivy/python-for-android/pull/2467) ([misl6](https://github.com/misl6))
- services: fix START\_STICKY [\#2401](https://github.com/kivy/python-for-android/pull/2401) ([mzakharo](https://github.com/mzakharo))
## [v2021.09.05](https://github.com/kivy/python-for-android/tree/v2021.09.05) (2021-09-05)
[Full Changelog](https://github.com/kivy/python-for-android/compare/v2020.06.02...v2021.09.05)
**Fixed bugs:**
- Execution failed for task ':compileDebugJavaWithJavac'. "DialogInterface", "AlertDialog" and "KeyEvent" not found. [\#2228](https://github.com/kivy/python-for-android/issues/2228)
**Closed issues:**
- Global variable/objetct isn't being shared between multiple files on Android, while the same code works normally under Windows. [\#2485](https://github.com/kivy/python-for-android/issues/2485)
- audiostream recipe does not copy .java files, leading to a crash when trying to open mic on android [\#2483](https://github.com/kivy/python-for-android/issues/2483)
- Applying patches for hostpython3 fails [\#2476](https://github.com/kivy/python-for-android/issues/2476)
- p4a failing to build webapp [\#2475](https://github.com/kivy/python-for-android/issues/2475)
- Failed to build with recipe MySQLdb \(setuptools,libmysqlclient\) [\#2474](https://github.com/kivy/python-for-android/issues/2474)
- ctypes.util.find\_library 64-bit error [\#2468](https://github.com/kivy/python-for-android/issues/2468)
- Android x86\_64 instant crash with hello world app, missing zlib [\#2460](https://github.com/kivy/python-for-android/issues/2460)
- pycrypto recipe is arm7 only [\#2457](https://github.com/kivy/python-for-android/issues/2457)
- lazy loading of recycleview and wa [\#2454](https://github.com/kivy/python-for-android/issues/2454)
- a kivy app can not send request to any website in phone [\#2450](https://github.com/kivy/python-for-android/issues/2450)
- Android permissions not working on Android 10 [\#2444](https://github.com/kivy/python-for-android/issues/2444)
- Feature request for upcoming fushia OS [\#2442](https://github.com/kivy/python-for-android/issues/2442)
- where is 'main.py' ? [\#2441](https://github.com/kivy/python-for-android/issues/2441)
- "diff" files are ignored during "pip install ." [\#2435](https://github.com/kivy/python-for-android/issues/2435)
- Travis CI misconfigured? [\#2428](https://github.com/kivy/python-for-android/issues/2428)
- NumPy | ImportError: dlopen failed: cannot locate symbol "log10f" referenced by "\_multiarray\_tests.so" [\#2426](https://github.com/kivy/python-for-android/issues/2426)
- Pandas recipe doesn't work [\#2425](https://github.com/kivy/python-for-android/issues/2425)
- Error \(Downloading matplotlib from https://jqueryui.com/resources/download/jquery-ui-1.12.1.zip\) [\#2418](https://github.com/kivy/python-for-android/issues/2418)
- buildozer failed -\_- [\#2417](https://github.com/kivy/python-for-android/issues/2417)
- "Python for android ended." When printing \x00 [\#2415](https://github.com/kivy/python-for-android/issues/2415)
- Does Kivy supports SDK 30? [\#2411](https://github.com/kivy/python-for-android/issues/2411)
- Pymunk,kivy apk crashing on Android 5.1 [\#2388](https://github.com/kivy/python-for-android/issues/2388)
- Select specific version of python [\#2373](https://github.com/kivy/python-for-android/issues/2373)
- MDRaisedButton doesn't work on android [\#2371](https://github.com/kivy/python-for-android/issues/2371)
- Add Python 3.9 support as it builds fine [\#2365](https://github.com/kivy/python-for-android/issues/2365)
- Gradle Problem [\#2352](https://github.com/kivy/python-for-android/issues/2352)
- service\_library lacks mActivity support [\#2350](https://github.com/kivy/python-for-android/issues/2350)
- Possible bug in the "opencv\_extras" recipe [\#2349](https://github.com/kivy/python-for-android/issues/2349)
- Pygame recipe \(sdl confusion\) [\#2342](https://github.com/kivy/python-for-android/issues/2342)
- Youtube-dl [\#2336](https://github.com/kivy/python-for-android/issues/2336)
- building apk using pygame [\#2333](https://github.com/kivy/python-for-android/issues/2333)
- Buildozer ValueError: specify a path with --storage-dir [\#2331](https://github.com/kivy/python-for-android/issues/2331)
- Webview app crashes when trying to request permissions [\#2325](https://github.com/kivy/python-for-android/issues/2325)
- ffmpeg requirement causes apk crash on android [\#2324](https://github.com/kivy/python-for-android/issues/2324)
- ModuleNotFoundError: No module named 'fcntl' [\#2321](https://github.com/kivy/python-for-android/issues/2321)
- error python-for-android: git clone [\#2319](https://github.com/kivy/python-for-android/issues/2319)
- Pillow with kivy and kivymd error ImportError: dlopen failed: cannot locate symbol "log" referenced by "\_imaging.so"... [\#2317](https://github.com/kivy/python-for-android/issues/2317)
- pyconfig\_detection.patch breaks \(at least\) --use-setup-py [\#2313](https://github.com/kivy/python-for-android/issues/2313)
- Cython is called in incompatible way, not all options are supported \(especially -I\) [\#2311](https://github.com/kivy/python-for-android/issues/2311)
- PR 2285 breaks requestPermissions [\#2304](https://github.com/kivy/python-for-android/issues/2304)
- Python services [\#2297](https://github.com/kivy/python-for-android/issues/2297)
- Integrating ads in P4A [\#2295](https://github.com/kivy/python-for-android/issues/2295)
- How to hiding Android keyboard in kivy? [\#2268](https://github.com/kivy/python-for-android/issues/2268)
- KivyMD \#257 Bug vs MatPlotLib, one or the other??? [\#2262](https://github.com/kivy/python-for-android/issues/2262)
- MatPlotLib not building with Buildozer \(but it did 2 months ago\) [\#2261](https://github.com/kivy/python-for-android/issues/2261)
- How to add webp support to pillow? [\#2254](https://github.com/kivy/python-for-android/issues/2254)
- Unable to run executable on Android [\#2251](https://github.com/kivy/python-for-android/issues/2251)
- Provide a native service option [\#2243](https://github.com/kivy/python-for-android/issues/2243)
- the kivy app crash in time of import psycopg2 [\#2241](https://github.com/kivy/python-for-android/issues/2241)
- How can we make a camera App with zoom by Kivy [\#2238](https://github.com/kivy/python-for-android/issues/2238)
- Building pycrypto for arm64-v8a fails [\#2230](https://github.com/kivy/python-for-android/issues/2230)
- buildozer error Building pycrypto for arm64-v8a and x86\_64 [\#2216](https://github.com/kivy/python-for-android/issues/2216)
- Does the opencv recipe for buildozer not include the extra face class? [\#2166](https://github.com/kivy/python-for-android/issues/2166)
- Crash at relaunch in pythonlib in SDL2Thread [\#1787](https://github.com/kivy/python-for-android/issues/1787)
- Background Service is killed when app is swiped \(close by user\) [\#1783](https://github.com/kivy/python-for-android/issues/1783)
- tarfile failure with long user ID [\#1013](https://github.com/kivy/python-for-android/issues/1013)
- Apps are too big \(in size\) [\#202](https://github.com/kivy/python-for-android/issues/202)
**Merged pull requests:**
- Drop travis-ci.org and use github-actions for pypi release [\#2487](https://github.com/kivy/python-for-android/pull/2487) ([misl6](https://github.com/misl6))
- Upgrade grunt version re: CVE-2020-7729 [\#2484](https://github.com/kivy/python-for-android/pull/2484) ([Zen-CODE](https://github.com/Zen-CODE))
- Recipe for pydantic [\#2480](https://github.com/kivy/python-for-android/pull/2480) ([FilipeMarch](https://github.com/FilipeMarch))
- fix pandas recipe [\#2478](https://github.com/kivy/python-for-android/pull/2478) ([mzakharo](https://github.com/mzakharo))
- Add \*.diff to manifest and package\_data [\#2471](https://github.com/kivy/python-for-android/pull/2471) ([viblo](https://github.com/viblo))
- Fix bad library found by ctypes for 64-bit arch \(\#2468\) [\#2469](https://github.com/kivy/python-for-android/pull/2469) ([macdems](https://github.com/macdems))
- Updated version of pygame from 2.0.0-dev7 to 2.0.1 [\#2466](https://github.com/kivy/python-for-android/pull/2466) ([ljnath](https://github.com/ljnath))
- Adds libm to Pillow recipe [\#2465](https://github.com/kivy/python-for-android/pull/2465) ([Sahil-pixel](https://github.com/Sahil-pixel))
- Add missing mipmap directories to bootstraps. [\#2463](https://github.com/kivy/python-for-android/pull/2463) ([rnixx](https://github.com/rnixx))
- Move PythonActivityUtil.unpackData to PythonUtil.unpackData [\#2462](https://github.com/kivy/python-for-android/pull/2462) ([rnixx](https://github.com/rnixx))
- Websocket-client updated to 1.0.1 from 0.40.0 [\#2458](https://github.com/kivy/python-for-android/pull/2458) ([akshayaurora](https://github.com/akshayaurora))
- fixed redirection for download liblzma [\#2452](https://github.com/kivy/python-for-android/pull/2452) ([td1803](https://github.com/td1803))
- update \(host\)python3 to 3.8.9 [\#2451](https://github.com/kivy/python-for-android/pull/2451) ([obfusk](https://github.com/obfusk))
- update sqlite3 [\#2449](https://github.com/kivy/python-for-android/pull/2449) ([obfusk](https://github.com/obfusk))
- build.py: also clean\(\) tarfile directory entries [\#2447](https://github.com/kivy/python-for-android/pull/2447) ([obfusk](https://github.com/obfusk))
- android: add support for adaptive icon/launcher [\#2446](https://github.com/kivy/python-for-android/pull/2446) ([SomberNight](https://github.com/SomberNight))
- Fix ImportError bug: cannot locate symbol "modf" [\#2445](https://github.com/kivy/python-for-android/pull/2445) ([Neizvestnyj](https://github.com/Neizvestnyj))
- update openssl [\#2443](https://github.com/kivy/python-for-android/pull/2443) ([obfusk](https://github.com/obfusk))
- Add libvpx recipe, reference it in ffpyplayer\_codecs and ffmpeg [\#2440](https://github.com/kivy/python-for-android/pull/2440) ([Cheaterman](https://github.com/Cheaterman))
- Add setuptools dependency for Groestlcoin\_hash recipe [\#2438](https://github.com/kivy/python-for-android/pull/2438) ([gruve-p](https://github.com/gruve-p))
- set urllib user-agent [\#2437](https://github.com/kivy/python-for-android/pull/2437) ([obfusk](https://github.com/obfusk))
- setup.py: add \*.diff to package\_data [\#2436](https://github.com/kivy/python-for-android/pull/2436) ([obfusk](https://github.com/obfusk))
- Reintroduce documentation of android module [\#2432](https://github.com/kivy/python-for-android/pull/2432) ([tito](https://github.com/tito))
- Update \_\_init\_\_.py [\#2429](https://github.com/kivy/python-for-android/pull/2429) ([Neizvestnyj](https://github.com/Neizvestnyj))
- webview: flush cookies & improve shouldOverrideUrlLoading [\#2424](https://github.com/kivy/python-for-android/pull/2424) ([obfusk](https://github.com/obfusk))
- travis: update pip \(fixes CI\) [\#2422](https://github.com/kivy/python-for-android/pull/2422) ([obfusk](https://github.com/obfusk))
- update openssl [\#2421](https://github.com/kivy/python-for-android/pull/2421) ([obfusk](https://github.com/obfusk))
- Avoids build error for opencv and bumps version to 4.5.1 [\#2419](https://github.com/kivy/python-for-android/pull/2419) ([thescheff](https://github.com/thescheff))
- strip null bytes in call to androidembed.log\(\) [\#2416](https://github.com/kivy/python-for-android/pull/2416) ([obfusk](https://github.com/obfusk))
- webview: put webview\_includes in assets dir [\#2412](https://github.com/kivy/python-for-android/pull/2412) ([obfusk](https://github.com/obfusk))
- update setuptools [\#2409](https://github.com/kivy/python-for-android/pull/2409) ([obfusk](https://github.com/obfusk))
- update sqlite3 [\#2408](https://github.com/kivy/python-for-android/pull/2408) ([obfusk](https://github.com/obfusk))
- Update quickstart.rst macOS brew cask command [\#2407](https://github.com/kivy/python-for-android/pull/2407) ([yestoday-tv](https://github.com/yestoday-tv))
- Added ability to set input type on android [\#2405](https://github.com/kivy/python-for-android/pull/2405) ([dwmoffatt](https://github.com/dwmoffatt))
- PyZQM recipe needs setuptools, list it explicitly in deps [\#2404](https://github.com/kivy/python-for-android/pull/2404) ([rambo](https://github.com/rambo))
- recipes: print recipe ENV on failure [\#2403](https://github.com/kivy/python-for-android/pull/2403) ([mzakharo](https://github.com/mzakharo))
- recipes: scipy - fix build for armeabi-v7a [\#2402](https://github.com/kivy/python-for-android/pull/2402) ([mzakharo](https://github.com/mzakharo))
- don't run git pull when not on a branch [\#2400](https://github.com/kivy/python-for-android/pull/2400) ([obfusk](https://github.com/obfusk))
- Fix Pymunk crash on older versions of Android [\#2399](https://github.com/kivy/python-for-android/pull/2399) ([viblo](https://github.com/viblo))
- Recipe for argon2-cffi [\#2398](https://github.com/kivy/python-for-android/pull/2398) ([Arjun-Somvanshi](https://github.com/Arjun-Somvanshi))
- update sqlite3 to 3.34.0 [\#2397](https://github.com/kivy/python-for-android/pull/2397) ([obfusk](https://github.com/obfusk))
- update openssl to 1.1.1i [\#2396](https://github.com/kivy/python-for-android/pull/2396) ([obfusk](https://github.com/obfusk))
- support Python 3.9 [\#2394](https://github.com/kivy/python-for-android/pull/2394) ([obfusk](https://github.com/obfusk))
- reproducible builds [\#2390](https://github.com/kivy/python-for-android/pull/2390) ([obfusk](https://github.com/obfusk))
- Update Pymunk recipe to 6.0.0 [\#2389](https://github.com/kivy/python-for-android/pull/2389) ([viblo](https://github.com/viblo))
- webview: add mOpenExternalLinksInBrowser field [\#2387](https://github.com/kivy/python-for-android/pull/2387) ([obfusk](https://github.com/obfusk))
- webview: add enableZoom\(\) method [\#2386](https://github.com/kivy/python-for-android/pull/2386) ([obfusk](https://github.com/obfusk))
- Enable AndroidX [\#2385](https://github.com/kivy/python-for-android/pull/2385) ([RobertFlatt](https://github.com/RobertFlatt))
- :arrow\_up: Updates to Kivy2 [\#2384](https://github.com/kivy/python-for-android/pull/2384) ([kuzeyron](https://github.com/kuzeyron))
- fix travis [\#2383](https://github.com/kivy/python-for-android/pull/2383) ([obfusk](https://github.com/obfusk))
- :bug: Fixes pip command on Travis and bumps actions/setup-python [\#2382](https://github.com/kivy/python-for-android/pull/2382) ([AndreMiras](https://github.com/AndreMiras))
- docs: fix simple typo, packaged -\> packaged [\#2377](https://github.com/kivy/python-for-android/pull/2377) ([timgates42](https://github.com/timgates42))
- Fix master only merges [\#2376](https://github.com/kivy/python-for-android/pull/2376) ([inclement](https://github.com/inclement))
- Audiostream Fix [\#2375](https://github.com/kivy/python-for-android/pull/2375) ([xloem](https://github.com/xloem))
- Add service information for buildozer.spec [\#2372](https://github.com/kivy/python-for-android/pull/2372) ([xloem](https://github.com/xloem))
- recipes: add scipy support [\#2370](https://github.com/kivy/python-for-android/pull/2370) ([mzakharo](https://github.com/mzakharo))
- fix CI [\#2368](https://github.com/kivy/python-for-android/pull/2368) ([obfusk](https://github.com/obfusk))
- support activity\_launch\_mode in webview bootstrap [\#2367](https://github.com/kivy/python-for-android/pull/2367) ([obfusk](https://github.com/obfusk))
- Support running tests on any arch [\#2355](https://github.com/kivy/python-for-android/pull/2355) ([jayvdb](https://github.com/jayvdb))
- setup.py: Fix dependency syntax [\#2354](https://github.com/kivy/python-for-android/pull/2354) ([jayvdb](https://github.com/jayvdb))
- added missing digest support to recipes [\#2351](https://github.com/kivy/python-for-android/pull/2351) ([fuzzyTew](https://github.com/fuzzyTew))
- android: call non-static methods on .mActivity [\#2341](https://github.com/kivy/python-for-android/pull/2341) ([obfusk](https://github.com/obfusk))
- fix webview jni [\#2340](https://github.com/kivy/python-for-android/pull/2340) ([obfusk](https://github.com/obfusk))
- missing mActivity [\#2339](https://github.com/kivy/python-for-android/pull/2339) ([zworkb](https://github.com/zworkb))
- added few input parameters to make possible to use custom java classes and tweak AndroidManifest.xml [\#2338](https://github.com/kivy/python-for-android/pull/2338) ([vesellov](https://github.com/vesellov))
- ffmpeg and ffpyplayer improvements [\#2335](https://github.com/kivy/python-for-android/pull/2335) ([rnixx](https://github.com/rnixx))
- Add recipe for https://docs.aiohttp.org/en/stable/ [\#2332](https://github.com/kivy/python-for-android/pull/2332) ([rambo](https://github.com/rambo))
- Update \_\_init\_\_.py for Report Lab recipe [\#2323](https://github.com/kivy/python-for-android/pull/2323) ([marcets](https://github.com/marcets))
- Print patched message to stderr [\#2314](https://github.com/kivy/python-for-android/pull/2314) ([rambo](https://github.com/rambo))
- Call cython via the setuptools entrypoint, fixes \#2311 [\#2312](https://github.com/kivy/python-for-android/pull/2312) ([rambo](https://github.com/rambo))
- Allow using background color with lottie splashscreen [\#2305](https://github.com/kivy/python-for-android/pull/2305) ([tshirtman](https://github.com/tshirtman))
- Add manifestPlaceholders [\#2301](https://github.com/kivy/python-for-android/pull/2301) ([misl6](https://github.com/misl6))
- Allow using lottie files for splashscreen \(SDL2 bootstrap\) [\#2296](https://github.com/kivy/python-for-android/pull/2296) ([tshirtman](https://github.com/tshirtman))
- use https download for boost & zope [\#2293](https://github.com/kivy/python-for-android/pull/2293) ([obfusk](https://github.com/obfusk))
- \(host\)python3: rm version check for pyconfig patch [\#2292](https://github.com/kivy/python-for-android/pull/2292) ([obfusk](https://github.com/obfusk))
- download\_file: show error + exponential sleep [\#2291](https://github.com/kivy/python-for-android/pull/2291) ([obfusk](https://github.com/obfusk))
- remove cruft from webview\_includes/\_load.html [\#2289](https://github.com/kivy/python-for-android/pull/2289) ([obfusk](https://github.com/obfusk))
- tiny whitespace fix in buildoptions.rst [\#2288](https://github.com/kivy/python-for-android/pull/2288) ([obfusk](https://github.com/obfusk))
- update libffi to 3.3 [\#2287](https://github.com/kivy/python-for-android/pull/2287) ([obfusk](https://github.com/obfusk))
- update openssl to 1.1.1g [\#2286](https://github.com/kivy/python-for-android/pull/2286) ([obfusk](https://github.com/obfusk))
- update pyjnius to 1.3.0 [\#2285](https://github.com/kivy/python-for-android/pull/2285) ([obfusk](https://github.com/obfusk))
- update setuptools to 49.2.1 [\#2284](https://github.com/kivy/python-for-android/pull/2284) ([obfusk](https://github.com/obfusk))
- update six to 1.15.0 [\#2283](https://github.com/kivy/python-for-android/pull/2283) ([obfusk](https://github.com/obfusk))
- update flask to 1.1.2 [\#2282](https://github.com/kivy/python-for-android/pull/2282) ([obfusk](https://github.com/obfusk))
- update python3 & hostpython3 to 3.8.5 [\#2281](https://github.com/kivy/python-for-android/pull/2281) ([obfusk](https://github.com/obfusk))
- update sqlite3 to 3.32.3 [\#2280](https://github.com/kivy/python-for-android/pull/2280) ([obfusk](https://github.com/obfusk))
- fix travis [\#2279](https://github.com/kivy/python-for-android/pull/2279) ([obfusk](https://github.com/obfusk))
- `libpython3.8m.so` should not have `m` suffix [\#2278](https://github.com/kivy/python-for-android/pull/2278) ([davidhewitt](https://github.com/davidhewitt))
- add recipe for libpcre [\#2276](https://github.com/kivy/python-for-android/pull/2276) ([obfusk](https://github.com/obfusk))
- build python3 with loadable-sqlite-extensions [\#2275](https://github.com/kivy/python-for-android/pull/2275) ([obfusk](https://github.com/obfusk))
- fix indentation [\#2273](https://github.com/kivy/python-for-android/pull/2273) ([obfusk](https://github.com/obfusk))
- LogFile: rename .buffer \(to fix newer flask/click\) [\#2264](https://github.com/kivy/python-for-android/pull/2264) ([obfusk](https://github.com/obfusk))
- Add Recipe for Kivy3 module [\#2263](https://github.com/kivy/python-for-android/pull/2263) ([excepterror](https://github.com/excepterror))
- :sparkles: Rework of Pillow recipe adding WebP support [\#2256](https://github.com/kivy/python-for-android/pull/2256) ([opacam](https://github.com/opacam))
- :sparkles: Add libwebp recipe [\#2255](https://github.com/kivy/python-for-android/pull/2255) ([opacam](https://github.com/opacam))
- added --activity-class-name and --activity-package parameters [\#2248](https://github.com/kivy/python-for-android/pull/2248) ([vesellov](https://github.com/vesellov))
- Fix runtime psycopg2 error [\#2246](https://github.com/kivy/python-for-android/pull/2246) ([Progdrasil](https://github.com/Progdrasil))
- Bump libpq version [\#2245](https://github.com/kivy/python-for-android/pull/2245) ([Progdrasil](https://github.com/Progdrasil))
- Support for native services [\#2244](https://github.com/kivy/python-for-android/pull/2244) ([lerela](https://github.com/lerela))
- Added missing semicolon on service-only bootstrap [\#2236](https://github.com/kivy/python-for-android/pull/2236) ([Swpolo](https://github.com/Swpolo))
- :green\_heart: Fixes Travis build post OpenJDK bump [\#2235](https://github.com/kivy/python-for-android/pull/2235) ([AndreMiras](https://github.com/AndreMiras))
- Updated gradle plugin version [\#2234](https://github.com/kivy/python-for-android/pull/2234) ([shashi278](https://github.com/shashi278))
- :bug: Fixes service\_only and webview symbol errors, closes \#2228 [\#2233](https://github.com/kivy/python-for-android/pull/2233) ([AndreMiras](https://github.com/AndreMiras))
- :bento: Add CHANGELOG.md [\#2232](https://github.com/kivy/python-for-android/pull/2232) ([opacam](https://github.com/opacam))
- :arrow\_up: Bumps to OpenJDK 13 [\#2231](https://github.com/kivy/python-for-android/pull/2231) ([AndreMiras](https://github.com/AndreMiras))
- Fixed KeyError not found [\#2229](https://github.com/kivy/python-for-android/pull/2229) ([sak96](https://github.com/sak96))
- :rotating\_light: Depreciation warning fixes [\#2227](https://github.com/kivy/python-for-android/pull/2227) ([AndreMiras](https://github.com/AndreMiras))
- Master [\#2226](https://github.com/kivy/python-for-android/pull/2226) ([AndreMiras](https://github.com/AndreMiras))
- Add possibility to add a backup rules xml file [\#2208](https://github.com/kivy/python-for-android/pull/2208) ([tcdude](https://github.com/tcdude))
## [v2020.06.02](https://github.com/kivy/python-for-android/tree/v2020.06.02) (2020-06-02)
[Full Changelog](https://github.com/kivy/python-for-android/compare/v2020.04.29...v2020.06.02)
**Fixed bugs:**
- Issues introduced by PR \#2113 \(SDL2\) [\#2169](https://github.com/kivy/python-for-android/issues/2169)
- App exists immediately when importing kivy.core.window.Window [\#2167](https://github.com/kivy/python-for-android/issues/2167)
**Closed issues:**
- Python [\#2214](https://github.com/kivy/python-for-android/issues/2214)
- build failed. [\#2212](https://github.com/kivy/python-for-android/issues/2212)
- apk size growing [\#2207](https://github.com/kivy/python-for-android/issues/2207)
- My despair at trying to simply import the opencv face class \(python-for-android\) [\#2206](https://github.com/kivy/python-for-android/issues/2206)
- running python 3.6 [\#2204](https://github.com/kivy/python-for-android/issues/2204)
- specify python version [\#2203](https://github.com/kivy/python-for-android/issues/2203)
- p4a gets stuck at downloading setuptools [\#2199](https://github.com/kivy/python-for-android/issues/2199)
- Kivy app crashes after asking for permission [\#2054](https://github.com/kivy/python-for-android/issues/2054)
**Merged pull requests:**
- Release 2020.06.02 [\#2225](https://github.com/kivy/python-for-android/pull/2225) ([AndreMiras](https://github.com/AndreMiras))
- :arrow_up: Bumps to Gradle 6.4.1 [\#2222](https://github.com/kivy/python-for-android/pull/2222) ([AndreMiras](https://github.com/AndreMiras))
- :bug: Adds missing requests sub dependencies [\#2221](https://github.com/kivy/python-for-android/pull/2221) ([AndreMiras](https://github.com/AndreMiras))
- :arrow_up: Bumps to Cython==0.29.19 [\#2220](https://github.com/kivy/python-for-android/pull/2220) ([AndreMiras](https://github.com/AndreMiras))
- :pencil: Updates install and troubleshooting docs [\#2219](https://github.com/kivy/python-for-android/pull/2219) ([AndreMiras](https://github.com/AndreMiras))
- :arrow_up: Bumps to Ubuntu 20.04 [\#2218](https://github.com/kivy/python-for-android/pull/2218) ([AndreMiras](https://github.com/AndreMiras))
- :pencil: Attempt to improve the issue template [\#2217](https://github.com/kivy/python-for-android/pull/2217) ([AndreMiras](https://github.com/AndreMiras))
- :package: Split logic for build modes & debug symbols [\#2213](https://github.com/kivy/python-for-android/pull/2213) ([opacam](https://github.com/opacam))
- :sparkles: Add `opencv_extras` recipe [\#2209](https://github.com/kivy/python-for-android/pull/2209) ([opacam](https://github.com/opacam))
- :books: Troubleshoot SSL error [\#2205](https://github.com/kivy/python-for-android/pull/2205) ([AndreMiras](https://github.com/AndreMiras))
- Remove superfluous recipes fixes \#1387 [\#2202](https://github.com/kivy/python-for-android/pull/2202) ([AndreMiras](https://github.com/AndreMiras))
- :white_check_mark: Add tests for hostpython3 recipe [\#2196](https://github.com/kivy/python-for-android/pull/2196) ([opacam](https://github.com/opacam))
- Fix for 'ImportError: No module named setuptools', encountered when building with buildozer [\#2195](https://github.com/kivy/python-for-android/pull/2195) ([atom2626](https://github.com/atom2626))
- :pencil2: Rename `Hostpython3Recipe` class to camel case [\#2194](https://github.com/kivy/python-for-android/pull/2194) ([opacam](https://github.com/opacam))
- :ambulance: Fix `test_should_build` [\#2193](https://github.com/kivy/python-for-android/pull/2193) ([opacam](https://github.com/opacam))
- :white_check_mark: Add initial tests for python3 recipe [\#2192](https://github.com/kivy/python-for-android/pull/2192) ([opacam](https://github.com/opacam))
- :bug: Fixes flake8 errors post update [\#2191](https://github.com/kivy/python-for-android/pull/2191) ([AndreMiras](https://github.com/AndreMiras))
- PythonActivityUtil helper for unpacking data [\#2189](https://github.com/kivy/python-for-android/pull/2189) ([AndreMiras](https://github.com/AndreMiras))
- Share PythonUtil.java between bootstraps [\#2188](https://github.com/kivy/python-for-android/pull/2188) ([AndreMiras](https://github.com/AndreMiras))
- Java code linting using PMD 6.23.0 [\#2187](https://github.com/kivy/python-for-android/pull/2187) ([AndreMiras](https://github.com/AndreMiras))
- Deletes deprecated renpy Python{Activity,Service}.java [\#2186](https://github.com/kivy/python-for-android/pull/2186) ([AndreMiras](https://github.com/AndreMiras))
- Removes java concurrency/ folder [\#2185](https://github.com/kivy/python-for-android/pull/2185) ([AndreMiras](https://github.com/AndreMiras))
- Moves kamranzafar/ java directory to common/ [\#2184](https://github.com/kivy/python-for-android/pull/2184) ([AndreMiras](https://github.com/AndreMiras))
- Use common Hardware.java [\#2183](https://github.com/kivy/python-for-android/pull/2183) ([AndreMiras](https://github.com/AndreMiras))
- Reuse common AssetExtract.java [\#2182](https://github.com/kivy/python-for-android/pull/2182) ([AndreMiras](https://github.com/AndreMiras))
- Fixes service only unittest loading [\#2181](https://github.com/kivy/python-for-android/pull/2181) ([AndreMiras](https://github.com/AndreMiras))
- Downgrades to SDL2 2.0.9 [\#2180](https://github.com/kivy/python-for-android/pull/2180) ([AndreMiras](https://github.com/AndreMiras))
- Narrows some context manager scopes [\#2179](https://github.com/kivy/python-for-android/pull/2179) ([AndreMiras](https://github.com/AndreMiras))
- Updates release documentation [\#2177](https://github.com/kivy/python-for-android/pull/2177) ([AndreMiras](https://github.com/AndreMiras))
- Post release version bump 2020.04.29.dev0 [\#2176](https://github.com/kivy/python-for-android/pull/2176) ([AndreMiras](https://github.com/AndreMiras))
- Updates version number to 2020.04.29 [\#2175](https://github.com/kivy/python-for-android/pull/2175) ([AndreMiras](https://github.com/AndreMiras))
- Adds macOS install instructions [\#2165](https://github.com/kivy/python-for-android/pull/2165) ([AndreMiras](https://github.com/AndreMiras))
- Adds pygame recipe [\#2164](https://github.com/kivy/python-for-android/pull/2164) ([AndreMiras](https://github.com/AndreMiras))
- Removed python2 support mention from README [\#2162](https://github.com/kivy/python-for-android/pull/2162) ([inclement](https://github.com/inclement))
- Fixes hostpython build with macOS venv [\#2159](https://github.com/kivy/python-for-android/pull/2159) ([AndreMiras](https://github.com/AndreMiras))
- Get --add-source working for dirs in Gradle builds [\#2156](https://github.com/kivy/python-for-android/pull/2156) ([kollivier](https://github.com/kollivier))
- Adding more assets [\#2132](https://github.com/kivy/python-for-android/pull/2132) ([robertpfeiffer](https://github.com/robertpfeiffer))
- Bump to SDL2 2.0.10 & extract .java from SDL2 tarball: merge conflicts fixed [\#2113](https://github.com/kivy/python-for-android/pull/2113) ([inclement](https://github.com/inclement))
## [v2020.04.29](https://github.com/kivy/python-for-android/tree/v2020.04.29) (2020-05-07)
[Full Changelog](https://github.com/kivy/python-for-android/compare/v2020.03.30...v2020.04.29)
**Closed issues:**
- BUILD FAILURE: No main.py\(o\) found in your app directory. [\#2171](https://github.com/kivy/python-for-android/issues/2171)
- \[ERROR\] Building cffi for armeabi-v7a [\#2161](https://github.com/kivy/python-for-android/issues/2161)
- Setting p4a.source_dir in buildozer causes AttributeError: module 'build' has no attribute 'parse\_args\_and\_make\_package' [\#2149](https://github.com/kivy/python-for-android/issues/2149)
- Full screen apps have significantly degraded performance [\#2148](https://github.com/kivy/python-for-android/issues/2148)
- Build failed: Couldn't find executable for CC [\#2146](https://github.com/kivy/python-for-android/issues/2146)
- Sign in apk is not working [\#2139](https://github.com/kivy/python-for-android/issues/2139)
- openssl 1.1.1 has moved, recipe fails [\#2119](https://github.com/kivy/python-for-android/issues/2119)
- App not asking for permission [\#2086](https://github.com/kivy/python-for-android/issues/2086)
- app on android 6.0.1 does not work, but on android 8.0 if [\#1801](https://github.com/kivy/python-for-android/issues/1801)
**Merged pull requests:**
- Release 2020.04.29 [\#2174](https://github.com/kivy/python-for-android/pull/2174) ([AndreMiras](https://github.com/AndreMiras))
- Fixes sh `_env` should be a dictionary [\#2160](https://github.com/kivy/python-for-android/pull/2160) ([AndreMiras](https://github.com/AndreMiras))
- :rotating light: Fix linting for setup.py [\#2158](https://github.com/kivy/python-for-android/pull/2158) ([opacam](https://github.com/opacam))
- When bootstraps were unified, sources moved from src to src/main/java… [\#2154](https://github.com/kivy/python-for-android/pull/2154) ([kollivier](https://github.com/kollivier))
- Show loading screen while unpacking for webview bootstrap [\#2153](https://github.com/kivy/python-for-android/pull/2153) ([kollivier](https://github.com/kollivier))
- Use python3's venv instead of virtualenv [\#2152](https://github.com/kivy/python-for-android/pull/2152) ([opacam](https://github.com/opacam))
- Update setup.py: add classifiers & python\_requires [\#2151](https://github.com/kivy/python-for-android/pull/2151) ([opacam](https://github.com/opacam))
- Twisted recipe [\#2147](https://github.com/kivy/python-for-android/pull/2147) ([pavelsof](https://github.com/pavelsof))
- Update AndroidManifest.tmpl.xml to support HTTP [\#2143](https://github.com/kivy/python-for-android/pull/2143) ([yingshaoxo](https://github.com/yingshaoxo))
- Simplifies Dockerfile and fix GitHub runner space [\#2142](https://github.com/kivy/python-for-android/pull/2142) ([AndreMiras](https://github.com/AndreMiras))
- Fix some code quality and bug-risk issues [\#2141](https://github.com/kivy/python-for-android/pull/2141) ([pnijhara](https://github.com/pnijhara))
- Update bootstrap.py [\#2137](https://github.com/kivy/python-for-android/pull/2137) ([yingshaoxo](https://github.com/yingshaoxo))
- :lock: Bump twisted version to `20.3.0` [\#2135](https://github.com/kivy/python-for-android/pull/2135) ([opacam](https://github.com/opacam))
- release-2020.03.30 to develop [\#2134](https://github.com/kivy/python-for-android/pull/2134) ([AndreMiras](https://github.com/AndreMiras))
- Bumps cffi==1.13.2 fixes under Python 3.8 [\#2131](https://github.com/kivy/python-for-android/pull/2131) ([AndreMiras](https://github.com/AndreMiras))
- recipe: update 'cryptography' and rm unnecessary dependencies [\#2130](https://github.com/kivy/python-for-android/pull/2130) ([SomberNight](https://github.com/SomberNight))
- Fix coveralls error on GitHub Actions [\#2129](https://github.com/kivy/python-for-android/pull/2129) ([AndreMiras](https://github.com/AndreMiras))
- bump zeroconf version to 0.24.5, fix depends [\#2128](https://github.com/kivy/python-for-android/pull/2128) ([mikevlz](https://github.com/mikevlz))
- Install already compiled libraries [\#2127](https://github.com/kivy/python-for-android/pull/2127) ([robertpfeiffer](https://github.com/robertpfeiffer))
- Fixes code block directives [\#2126](https://github.com/kivy/python-for-android/pull/2126) ([AndreMiras](https://github.com/AndreMiras))
- Merge master into develop [\#2125](https://github.com/kivy/python-for-android/pull/2125) ([inclement](https://github.com/inclement))
- Merge master into develop [\#2123](https://github.com/kivy/python-for-android/pull/2123) ([inclement](https://github.com/inclement))
- Auto deploys to PyPI using Travis on tags [\#2122](https://github.com/kivy/python-for-android/pull/2122) ([AndreMiras](https://github.com/AndreMiras))
- Update recommended NDK version to 19c [\#2116](https://github.com/kivy/python-for-android/pull/2116) ([inclement](https://github.com/inclement))
- Minor fixes and cleanup [\#2115](https://github.com/kivy/python-for-android/pull/2115) ([AndreMiras](https://github.com/AndreMiras))
- Fixes linting errors in runnable.py [\#2114](https://github.com/kivy/python-for-android/pull/2114) ([AndreMiras](https://github.com/AndreMiras))
- :package: Refactor python module into hostpython3/python3 recipes [\#2108](https://github.com/kivy/python-for-android/pull/2108) ([opacam](https://github.com/opacam))
- :fire: Move to python3 `super` calls [\#2106](https://github.com/kivy/python-for-android/pull/2106) ([opacam](https://github.com/opacam))
- :fire: Drop Python 2 support [\#2105](https://github.com/kivy/python-for-android/pull/2105) ([opacam](https://github.com/opacam))
- Android library [\#2092](https://github.com/kivy/python-for-android/pull/2092) ([zworkb](https://github.com/zworkb))
- \[recipes\] Update harfbuzz to v2.6.4 [\#2069](https://github.com/kivy/python-for-android/pull/2069) ([opacam](https://github.com/opacam))
- \[recipes\] Update freetype & add zlib support [\#2068](https://github.com/kivy/python-for-android/pull/2068) ([opacam](https://github.com/opacam))
- Unify most of the test apps into `on device unit test app` [\#2046](https://github.com/kivy/python-for-android/pull/2046) ([opacam](https://github.com/opacam))
- Fix debug build not resulting in gdb-debuggable build [\#1867](https://github.com/kivy/python-for-android/pull/1867) ([etc0de](https://github.com/etc0de))
- fix for the problem with decorator run\_on\_ui\_thread and the local ref… [\#1830](https://github.com/kivy/python-for-android/pull/1830) ([oukiar](https://github.com/oukiar))
## [v2020.03.30](https://github.com/kivy/python-for-android/tree/v2020.03.30) (2020-04-04)
[Full Changelog](https://github.com/kivy/python-for-android/compare/v2019.10.06...v2020.03.30)
**Fixed bugs:**
- Remove `--sysroot` from LDFLAGS for cffi and pymunk [\#1965](https://github.com/kivy/python-for-android/pull/1965) ([opacam](https://github.com/opacam))
- Fix build for case-insensitive FS and add CI test for OSX [\#1951](https://github.com/kivy/python-for-android/pull/1951) ([opacam](https://github.com/opacam))
- Also copy the service/main.py when building with setup.py [\#1936](https://github.com/kivy/python-for-android/pull/1936) ([etc0de](https://github.com/etc0de))
**Closed issues:**
- Version bump for zeroconf to 0.25.4 [\#2107](https://github.com/kivy/python-for-android/issues/2107)
- ValueError: read of closed file after download of psycopg2 [\#2098](https://github.com/kivy/python-for-android/issues/2098)
- Why advise us to use Python2??? [\#2090](https://github.com/kivy/python-for-android/issues/2090)
- KiwiSolver error led build fail when require matplotlib [\#2080](https://github.com/kivy/python-for-android/issues/2080)
- Is it possible to run matplotlib script in android? [\#2079](https://github.com/kivy/python-for-android/issues/2079)
- How to create my app name automatically on usb connect [\#2071](https://github.com/kivy/python-for-android/issues/2071)
- Default buildozer.spec fails to build - fails on openssl [\#2060](https://github.com/kivy/python-for-android/issues/2060)
- ImportError: dlopen failed: cannot locate symbol - Matplotlib module [\#2059](https://github.com/kivy/python-for-android/issues/2059)
- ft2font build error with Matplotlib [\#2058](https://github.com/kivy/python-for-android/issues/2058)
- SDL Error: Error Could not load any libpythonXXX.so [\#2056](https://github.com/kivy/python-for-android/issues/2056)
- Crashing on phone. SDL Error Could not load any libpythonXXX.so [\#2051](https://github.com/kivy/python-for-android/issues/2051)
- Hadi [\#2048](https://github.com/kivy/python-for-android/issues/2048)
- p4a \(2019.10.6\) project build file management [\#2045](https://github.com/kivy/python-for-android/issues/2045)
- listdir of primary\_external\_storage\_path\(\) fails [\#2032](https://github.com/kivy/python-for-android/issues/2032)
- Can't use AsyncImage with HTTPS URL \(or any HTTPS url with any request\): fix is to manually load certifi [\#1827](https://github.com/kivy/python-for-android/issues/1827)
**Merged pull requests:**
- Bumps openssl to 1.1.1f [\#2118](https://github.com/kivy/python-for-android/pull/2118) ([AndreMiras](https://github.com/AndreMiras))
- Release 2020.03.30 [\#2111](https://github.com/kivy/python-for-android/pull/2111) ([inclement](https://github.com/inclement))
- Updates quickstart.rst "Installing Dependencies" [\#2109](https://github.com/kivy/python-for-android/pull/2109) ([AndreMiras](https://github.com/AndreMiras))
- :alien: Remove deprecated key `sudo` from `travis.yml` [\#2102](https://github.com/kivy/python-for-android/pull/2102) ([opacam](https://github.com/opacam))
- :arrow_up: Update `pytz` to version `2019.3` [\#2101](https://github.com/kivy/python-for-android/pull/2101) ([opacam](https://github.com/opacam))
- :sparkles: Add `pandas` recipe [\#2100](https://github.com/kivy/python-for-android/pull/2100) ([opacam](https://github.com/opacam))
- Fixes psycopg2 URL, closes \#2098 [\#2099](https://github.com/kivy/python-for-android/pull/2099) ([AndreMiras](https://github.com/AndreMiras))
- :sparkles: Compression libraries - episode III: add support for libbz2 & liblzma to python3 [\#2097](https://github.com/kivy/python-for-android/pull/2097) ([opacam](https://github.com/opacam))
- :sparkles: Compression libraries - episode II: liblzma [\#2096](https://github.com/kivy/python-for-android/pull/2096) ([opacam](https://github.com/opacam))
- :sparkles: Compression libraries - episode I: libbz2 [\#2095](https://github.com/kivy/python-for-android/pull/2095) ([opacam](https://github.com/opacam))
- Update quickstart.rst [\#2094](https://github.com/kivy/python-for-android/pull/2094) ([BornForFever](https://github.com/BornForFever))
- Fixes gevent recipe on arm64-v8a arch [\#2093](https://github.com/kivy/python-for-android/pull/2093) ([AndreMiras](https://github.com/AndreMiras))
- :bug: Add `-fPIC` to `CFLAGS` for Arch `x86_64` [\#2085](https://github.com/kivy/python-for-android/pull/2085) ([opacam](https://github.com/opacam))
- Fix Python 3.8.1 patch naming and content [\#2083](https://github.com/kivy/python-for-android/pull/2083) ([opacam](https://github.com/opacam))
- Update PythonService.java [\#2081](https://github.com/kivy/python-for-android/pull/2081) ([erikhu](https://github.com/erikhu))
- Update `numpy` to v1.18.1 \(add `cython` recipe\) [\#2077](https://github.com/kivy/python-for-android/pull/2077) ([opacam](https://github.com/opacam))
- Fix `matplotlib` and update to `v3.1.3` [\#2076](https://github.com/kivy/python-for-android/pull/2076) ([opacam](https://github.com/opacam))
- Fix recipe `kiwisolver` \(add `cppy` recipe\) [\#2075](https://github.com/kivy/python-for-android/pull/2075) ([opacam](https://github.com/opacam))
- \[gh-actions\] Move to actions/checkout@v2 [\#2070](https://github.com/kivy/python-for-android/pull/2070) ([opacam](https://github.com/opacam))
- \[recipes\] Update Pillow to v7.0.0 [\#2067](https://github.com/kivy/python-for-android/pull/2067) ([opacam](https://github.com/opacam))
- Fix missing renames of Bootstrap.list\_bootstraps -\> Bootstrap.all\_bootstraps [\#2066](https://github.com/kivy/python-for-android/pull/2066) ([touilleMan](https://github.com/touilleMan))
- fixed patch's name to apply correctly [\#2064](https://github.com/kivy/python-for-android/pull/2064) ([HirotsuguMINOWA](https://github.com/HirotsuguMINOWA))
- virtualenv 20 breaks the osx build [\#2063](https://github.com/kivy/python-for-android/pull/2063) ([AndreMiras](https://github.com/AndreMiras))
- automatically load/enable certifi in kivy [\#2055](https://github.com/kivy/python-for-android/pull/2055) ([tshirtman](https://github.com/tshirtman))
- \[protobuf\_cpp\] fixed python binding installation [\#2050](https://github.com/kivy/python-for-android/pull/2050) ([goffi-contrib](https://github.com/goffi-contrib))
- \[omemo\] updated to 0.11.0 + updated omemo-backend-signal to 0.2.5 [\#2049](https://github.com/kivy/python-for-android/pull/2049) ([goffi-contrib](https://github.com/goffi-contrib))
- Python 3.8 support on Android [\#2044](https://github.com/kivy/python-for-android/pull/2044) ([inclement](https://github.com/inclement))
- Updated version after 2019.10.06 release [\#2043](https://github.com/kivy/python-for-android/pull/2043) ([inclement](https://github.com/inclement))
- Updated version to 2019.10.06 [\#2042](https://github.com/kivy/python-for-android/pull/2042) ([inclement](https://github.com/inclement))
- Added a build.py argument to add arbitrary xml to the AndroidManifest.xml [\#2040](https://github.com/kivy/python-for-android/pull/2040) ([inclement](https://github.com/inclement))
- update pyjnius recipe [\#2036](https://github.com/kivy/python-for-android/pull/2036) ([tshirtman](https://github.com/tshirtman))
- added a recipe for bcrypt library [\#2035](https://github.com/kivy/python-for-android/pull/2035) ([tomgold182](https://github.com/tomgold182))
- Fix vibration for testapps [\#2034](https://github.com/kivy/python-for-android/pull/2034) ([opacam](https://github.com/opacam))
- \[gh-actions\] Add new testapp and upload artifacts... [\#2033](https://github.com/kivy/python-for-android/pull/2033) ([opacam](https://github.com/opacam))
- from kivy.base import runTouchApp for line 75 [\#2028](https://github.com/kivy/python-for-android/pull/2028) ([cclauss](https://github.com/cclauss))
- Fix libshine and re-enable it for ffmpeg & ffpyplayer\_codecs [\#2027](https://github.com/kivy/python-for-android/pull/2027) ([opacam](https://github.com/opacam))
- Introduce github-actions \(push & pull\_requests\) [\#2025](https://github.com/kivy/python-for-android/pull/2025) ([opacam](https://github.com/opacam))
- Fix rebuild updated recipes, refs \#2011 [\#2024](https://github.com/kivy/python-for-android/pull/2024) ([opacam](https://github.com/opacam))
- Exposes ANDROID\_SDK\_HOME to rebuild\_updated\_recipes [\#2018](https://github.com/kivy/python-for-android/pull/2018) ([AndreMiras](https://github.com/AndreMiras))
- update pyproj recipe [\#2017](https://github.com/kivy/python-for-android/pull/2017) ([joergbrech](https://github.com/joergbrech))
- Documentation: android hide loading screen [\#2014](https://github.com/kivy/python-for-android/pull/2014) ([adityabhawsingka](https://github.com/adityabhawsingka))
- Travis CI revamp part 1, refs \#2008 [\#2011](https://github.com/kivy/python-for-android/pull/2011) ([AndreMiras](https://github.com/AndreMiras))
- twisted: updated to 19.7.0 + removed inceremental.path [\#2006](https://github.com/kivy/python-for-android/pull/2006) ([goffi-contrib](https://github.com/goffi-contrib))
- Fix error on py2 when `import numpy` [\#2003](https://github.com/kivy/python-for-android/pull/2003) ([opacam](https://github.com/opacam))
- Fix libcurl with openssl [\#2000](https://github.com/kivy/python-for-android/pull/2000) ([tito](https://github.com/tito))
- Fixes ffmpeg build on ndk 19 [\#1997](https://github.com/kivy/python-for-android/pull/1997) ([misl6](https://github.com/misl6))
- Fixes test\_virtualenv and test\_venv failing, closes \#1994 [\#1995](https://github.com/kivy/python-for-android/pull/1995) ([AndreMiras](https://github.com/AndreMiras))
- Fixes libiconv & libzbar configure host [\#1993](https://github.com/kivy/python-for-android/pull/1993) ([AndreMiras](https://github.com/AndreMiras))
- Updates Java version troubleshooting [\#1991](https://github.com/kivy/python-for-android/pull/1991) ([AndreMiras](https://github.com/AndreMiras))
- Made p4a use per-arch dist build dirs [\#1986](https://github.com/kivy/python-for-android/pull/1986) ([inclement](https://github.com/inclement))
- Made on-device unit tests app use the develop branch by default [\#1985](https://github.com/kivy/python-for-android/pull/1985) ([inclement](https://github.com/inclement))
- Recipes tests enhancements [\#1984](https://github.com/kivy/python-for-android/pull/1984) ([opacam](https://github.com/opacam))
- Proof of concept - A bunch of tests for library recipes [\#1982](https://github.com/kivy/python-for-android/pull/1982) ([opacam](https://github.com/opacam))
- Updated README.md to clarify NDK versions [\#1981](https://github.com/kivy/python-for-android/pull/1981) ([Zen-CODE](https://github.com/Zen-CODE))
- Fix CI's test for `arm64-v8a` [\#1977](https://github.com/kivy/python-for-android/pull/1977) ([opacam](https://github.com/opacam))
- Added missing recommendations command and cleaned up code [\#1975](https://github.com/kivy/python-for-android/pull/1975) ([inclement](https://github.com/inclement))
- Added libffi headers troubleshooting note to doc [\#1972](https://github.com/kivy/python-for-android/pull/1972) ([inclement](https://github.com/inclement))
- \[WIP\]\[LIBS - PART VII\] Rework of libtorrent and boost [\#1971](https://github.com/kivy/python-for-android/pull/1971) ([opacam](https://github.com/opacam))
- \[WIP\]\[LIBS - PART VI\] Rework of protobuf\_cpp [\#1969](https://github.com/kivy/python-for-android/pull/1969) ([opacam](https://github.com/opacam))
- \[WIP\]\[LIBS - PART V\] Rework of libzmq [\#1968](https://github.com/kivy/python-for-android/pull/1968) ([opacam](https://github.com/opacam))
- \[WIP\]\[LIBS - PART IV\] Rework of shapely and libgeos [\#1967](https://github.com/kivy/python-for-android/pull/1967) ([opacam](https://github.com/opacam))
- \[WIP\]\[LIBS - PART III\] Rework of pyleveldb, leveldb and snappy [\#1966](https://github.com/kivy/python-for-android/pull/1966) ([opacam](https://github.com/opacam))
- Updated version number for develop branch following 2019.08.09 release [\#1960](https://github.com/kivy/python-for-android/pull/1960) ([inclement](https://github.com/inclement))
- Merge release-2019.08.09 branch into develop [\#1959](https://github.com/kivy/python-for-android/pull/1959) ([inclement](https://github.com/inclement))
- Fix and update regex's recipe [\#1958](https://github.com/kivy/python-for-android/pull/1958) ([opacam](https://github.com/opacam))
- Fix/doc quotes [\#1956](https://github.com/kivy/python-for-android/pull/1956) ([tshirtman](https://github.com/tshirtman))
- \[LIBS - PART II\] Part II of NDK r19 migration - Initial STL lib migration [\#1947](https://github.com/kivy/python-for-android/pull/1947) ([opacam](https://github.com/opacam))
- \[LIBS - PART I\] Initial refactor of library recipes [\#1944](https://github.com/kivy/python-for-android/pull/1944) ([opacam](https://github.com/opacam))
- customizability [\#1869](https://github.com/kivy/python-for-android/pull/1869) ([zworkb](https://github.com/zworkb))
- Initial migration to NDK r19 \(Part I - The core\) [\#1722](https://github.com/kivy/python-for-android/pull/1722) ([opacam](https://github.com/opacam))
## [v2019.10.06](https://github.com/kivy/python-for-android/tree/v2019.10.06) (2019-12-22)
[Full Changelog](https://github.com/kivy/python-for-android/compare/v2019.08.09...v2019.10.06)
**Fixed bugs:**
- TestGetSystemPythonExecutable.test\_virtualenv test fail [\#1994](https://github.com/kivy/python-for-android/issues/1994)
**Closed issues:**
- Presplash is removed prematurely. [\#2029](https://github.com/kivy/python-for-android/issues/2029)
- Sorry posted in the wrong repository. Closing this issue [\#2022](https://github.com/kivy/python-for-android/issues/2022)
- p4a building apk error on Mac OS [\#2016](https://github.com/kivy/python-for-android/issues/2016)
- Revamp .travis.yml file [\#2008](https://github.com/kivy/python-for-android/issues/2008)
- Possible SDL2 issues introduced with P4A 2019.06.06 [\#2002](https://github.com/kivy/python-for-android/issues/2002)
- Error message about python2 [\#2001](https://github.com/kivy/python-for-android/issues/2001)
- ffmpeg recipe is broken on ndk19 [\#1996](https://github.com/kivy/python-for-android/issues/1996)
- Error while running ".buildozer.../native-build/python -OO -m compileall -b -f /.../app [\#1990](https://github.com/kivy/python-for-android/issues/1990)
- The mpl\_android\_fixes.patch didn't work [\#1989](https://github.com/kivy/python-for-android/issues/1989)
- Importing numpy yields: TypeError: add\_docstring\(\) argument 2 must be str, not None [\#1988](https://github.com/kivy/python-for-android/issues/1988)
- p4a apk :compileDebugJavaWithJavac error [\#1980](https://github.com/kivy/python-for-android/issues/1980)
- \[question\]Python for android no longer supports Error ! [\#1978](https://github.com/kivy/python-for-android/issues/1978)
- Can not Find on Google Play or Buy Premium [\#1974](https://github.com/kivy/python-for-android/issues/1974)
- Build failed [\#1970](https://github.com/kivy/python-for-android/issues/1970)
- Can't build a package with bcrypt as requirement [\#1910](https://github.com/kivy/python-for-android/issues/1910)
- import wxpy module fail [\#1897](https://github.com/kivy/python-for-android/issues/1897)
- Cannot build APK with buildozer [\#1817](https://github.com/kivy/python-for-android/issues/1817)
- Kivy crashes on Android: ImportError: dlopen failed. [\#1810](https://github.com/kivy/python-for-android/issues/1810)
- App build failing on MacOS [\#1647](https://github.com/kivy/python-for-android/issues/1647)
- Remove superfluous recipes [\#1387](https://github.com/kivy/python-for-android/issues/1387)
**Merged pull requests:**
- Release 2019.10.06 [\#1998](https://github.com/kivy/python-for-android/pull/1998) ([inclement](https://github.com/inclement))
## [v2019.08.09](https://github.com/kivy/python-for-android/tree/v2019.08.09) (2019-08-19)
[Full Changelog](https://github.com/kivy/python-for-android/compare/v2019.07.08...v2019.08.09)
**Fixed bugs:**
- Call Cython via `python -m Cython` rather than system-wide binary [\#1937](https://github.com/kivy/python-for-android/pull/1937) ([etc0de](https://github.com/etc0de))
**Closed issues:**
- Building an Android Library [\#1957](https://github.com/kivy/python-for-android/issues/1957)
- dlopen failed: library "../../../../src/main/jniLibs/armeabi-v7a/libpython3.7m.so" not found [\#1954](https://github.com/kivy/python-for-android/issues/1954)
- App crashing on startup - Import Error: dlopen failed: \_portaudio.so is 64 bit instead of 32 bit [\#1953](https://github.com/kivy/python-for-android/issues/1953)
- How to overcome:? \#error "LONG\_BIT definition appears wrong for platform \(bad gcc/glibc config?\)." [\#1949](https://github.com/kivy/python-for-android/issues/1949)
- copy paste option is not working in mobile client \(android \)after cloning from updated p4a [\#1942](https://github.com/kivy/python-for-android/issues/1942)
- It seems kivy has no support for tkinter, os, sys, random modules [\#1934](https://github.com/kivy/python-for-android/issues/1934)
- Mxnet recipe for running kivy app on android [\#1929](https://github.com/kivy/python-for-android/issues/1929)
- java.lang.UnsatisfiedLinkError: dlopen failed: library "libffi.so.7" not found [\#1924](https://github.com/kivy/python-for-android/issues/1924)
- Ndk19c compiled numpy problems [\#1923](https://github.com/kivy/python-for-android/issues/1923)
- run\_on\_ui\_thread crash [\#1908](https://github.com/kivy/python-for-android/issues/1908)
- please provide recipes for libraries dlib, easygui, Colormath , keras ,imutils [\#1906](https://github.com/kivy/python-for-android/issues/1906)
- About TextInput, I can't type korean character. I only can type english. [\#1904](https://github.com/kivy/python-for-android/issues/1904)
- app crash when bootstrap=webview [\#1894](https://github.com/kivy/python-for-android/issues/1894)
- apk file crash on app launch generated using kivy, buildozer [\#1891](https://github.com/kivy/python-for-android/issues/1891)
- StartService in Android Oreo and More should use startForegroundService [\#1785](https://github.com/kivy/python-for-android/issues/1785)
- Remove WRITE\_EXTERNAL\_STORAGE default permission [\#1081](https://github.com/kivy/python-for-android/issues/1081)
**Merged pull requests:**
- Release 2019.08.09 [\#1955](https://github.com/kivy/python-for-android/pull/1955) ([inclement](https://github.com/inclement))
- Unit tests Recipe.download\_file\(\) partly [\#1952](https://github.com/kivy/python-for-android/pull/1952) ([AndreMiras](https://github.com/AndreMiras))
- Unit tests Recipe download feature [\#1946](https://github.com/kivy/python-for-android/pull/1946) ([AndreMiras](https://github.com/AndreMiras))
- Added setuptools to Kivy recipe requirements [\#1938](https://github.com/kivy/python-for-android/pull/1938) ([inclement](https://github.com/inclement))
- Bumps to Kivy==1.11.1 [\#1935](https://github.com/kivy/python-for-android/pull/1935) ([AndreMiras](https://github.com/AndreMiras))
- Increases toolchain.py test coverage [\#1933](https://github.com/kivy/python-for-android/pull/1933) ([AndreMiras](https://github.com/AndreMiras))
- Add a document describing how p4a interacts with pip & python packages [\#1931](https://github.com/kivy/python-for-android/pull/1931) ([etc0de](https://github.com/etc0de))
- Fix pyzmq \(libunwind and arm64-v8a\) [\#1930](https://github.com/kivy/python-for-android/pull/1930) ([tito](https://github.com/tito))
- Basic toolchain.py unit tests [\#1928](https://github.com/kivy/python-for-android/pull/1928) ([AndreMiras](https://github.com/AndreMiras))
- Merge 2019.07.08 release branch to develop [\#1921](https://github.com/kivy/python-for-android/pull/1921) ([inclement](https://github.com/inclement))
- Drop Python 2 support [\#1918](https://github.com/kivy/python-for-android/pull/1918) ([inclement](https://github.com/inclement))
- Remove `nosetests.xml` from gitignore [\#1915](https://github.com/kivy/python-for-android/pull/1915) ([opacam](https://github.com/opacam))
- Drop CrystaX support and code base [\#1913](https://github.com/kivy/python-for-android/pull/1913) ([opacam](https://github.com/opacam))
- Release 2019.07.08 [\#1909](https://github.com/kivy/python-for-android/pull/1909) ([inclement](https://github.com/inclement))
- Add documentation: testing a pull request [\#1901](https://github.com/kivy/python-for-android/pull/1901) ([opacam](https://github.com/opacam))
- Fix foreground notification being mandatory and more \(attempt 2\) [\#1888](https://github.com/kivy/python-for-android/pull/1888) ([etc0de](https://github.com/etc0de))
- Make it raise an error if an old ndk is used [\#1883](https://github.com/kivy/python-for-android/pull/1883) ([opacam](https://github.com/opacam))
- Hotfix 2019.06.06.post0: added long\_description\_content\_type to setup.py [\#1850](https://github.com/kivy/python-for-android/pull/1850) ([inclement](https://github.com/inclement))
- feat: Allows registering the onRequestPermissionsResult callback. [\#1818](https://github.com/kivy/python-for-android/pull/1818) ([gbm001](https://github.com/gbm001))
- Add functions for obtaining the default storage paths [\#1598](https://github.com/kivy/python-for-android/pull/1598) ([etc0de](https://github.com/etc0de))
## [v2019.07.08](https://github.com/kivy/python-for-android/tree/v2019.07.08) (2019-07-11)
[Full Changelog](https://github.com/kivy/python-for-android/compare/v2019.06.06...v2019.07.08)
**Fixed bugs:**
- Fix crash when guessing Bootstrap \(expand\_dependencies\) [\#1914](https://github.com/kivy/python-for-android/pull/1914) ([opacam](https://github.com/opacam))
- Fix `run_pymodules_install` when `project_dir` isn't supplied [\#1898](https://github.com/kivy/python-for-android/pull/1898) ([opacam](https://github.com/opacam))
- Fix Bootstrap.get\_bootstrap\_from\_recipes\(\) so it's smarter and deterministic, fixes \#1875 [\#1887](https://github.com/kivy/python-for-android/pull/1887) ([etc0de](https://github.com/etc0de))
- Typo [\#1880](https://github.com/kivy/python-for-android/pull/1880) ([JensGe](https://github.com/JensGe))
- Fix wrong env variable for `hostpython build path` in `archs.py` [\#1871](https://github.com/kivy/python-for-android/pull/1871) ([opacam](https://github.com/opacam))
- Fix various setup.py processing bugs [\#1862](https://github.com/kivy/python-for-android/pull/1862) ([etc0de](https://github.com/etc0de))
- Add `--without-bzip2` to freetype's configure args [\#1857](https://github.com/kivy/python-for-android/pull/1857) ([opacam](https://github.com/opacam))
- pythonpackage can't return build requirements for wheels, make it return an error if attempted [\#1852](https://github.com/kivy/python-for-android/pull/1852) ([etc0de](https://github.com/etc0de))
**Closed issues:**
- Proposal: drop CrystaX support and code base [\#1905](https://github.com/kivy/python-for-android/issues/1905)
- android hardware back button does not work in kivy [\#1903](https://github.com/kivy/python-for-android/issues/1903)
- import wxpy module fail:python for android ended [\#1896](https://github.com/kivy/python-for-android/issues/1896)
- error compile with cristax-ndk [\#1895](https://github.com/kivy/python-for-android/issues/1895)
- is recipe for the library "kivymd" available in p4a? [\#1893](https://github.com/kivy/python-for-android/issues/1893)
- deleted [\#1889](https://github.com/kivy/python-for-android/issues/1889)
- p4a isn't finding directories in apk on launch \(ModuleNotFoundError\) [\#1881](https://github.com/kivy/python-for-android/issues/1881)
- Little but essential Typo [\#1879](https://github.com/kivy/python-for-android/issues/1879)
- clang crashes with an unclear error if ncurses5 isn't available \(specifically libtinfo.so.5\) [\#1878](https://github.com/kivy/python-for-android/issues/1878)
- get\_bootstrap\_from\_recipes\(\) result consistency [\#1875](https://github.com/kivy/python-for-android/issues/1875)
- install recursive dependencies of pure python packages [\#1874](https://github.com/kivy/python-for-android/issues/1874)
- numpy recipe bug arm64-v8a [\#1873](https://github.com/kivy/python-for-android/issues/1873)
- how do i support numba\(a python module\) [\#1865](https://github.com/kivy/python-for-android/issues/1865)
- apk build error: bzlib.h: No such file or directory [\#1854](https://github.com/kivy/python-for-android/issues/1854)
- Compilation error, previously worked [\#1846](https://github.com/kivy/python-for-android/issues/1846)
- Keep track of coverage testing [\#1788](https://github.com/kivy/python-for-android/issues/1788)
- p4a's overtaking of dependency order in place of --no-deps is problematic and IMHO should go [\#1490](https://github.com/kivy/python-for-android/issues/1490)
**Merged pull requests:**
- Fixes ffmpeg and libx264 recipes for arm64-v8 [\#1916](https://github.com/kivy/python-for-android/pull/1916) ([misl6](https://github.com/misl6))
- Docker - Update android's sdk tools to `28.0.2` [\#1912](https://github.com/kivy/python-for-android/pull/1912) ([opacam](https://github.com/opacam))
- Feature gitignore additions [\#1911](https://github.com/kivy/python-for-android/pull/1911) ([opacam](https://github.com/opacam))
- Simple run\_pymodules\_install test, refs \#1898 [\#1899](https://github.com/kivy/python-for-android/pull/1899) ([AndreMiras](https://github.com/AndreMiras))
- Updated numpy recipe to version 1.16.4 [\#1892](https://github.com/kivy/python-for-android/pull/1892) ([inclement](https://github.com/inclement))
- fix ctypes-util-find-library issue for python2 [\#1877](https://github.com/kivy/python-for-android/pull/1877) ([surbhicis](https://github.com/surbhicis))
- Add unittest for module `pythonforandroid.bootstrap` [\#1872](https://github.com/kivy/python-for-android/pull/1872) ([opacam](https://github.com/opacam))
- Remove legacy version of openssl [\#1870](https://github.com/kivy/python-for-android/pull/1870) ([opacam](https://github.com/opacam))
- Make the tox jobs run in parallel &... [\#1864](https://github.com/kivy/python-for-android/pull/1864) ([opacam](https://github.com/opacam))
- Try to be more clear in README about api levels & quickstart [\#1863](https://github.com/kivy/python-for-android/pull/1863) ([etc0de](https://github.com/etc0de))
- Fix locating system python when it's not in $PATH \(weird but happens, apparently\) [\#1856](https://github.com/kivy/python-for-android/pull/1856) ([etc0de](https://github.com/etc0de))
- Add unittest for `pythonforandroid.util` and... [\#1855](https://github.com/kivy/python-for-android/pull/1855) ([opacam](https://github.com/opacam))
- Merge 2019.06.06.post0 hotfix: set long\_description\_content\_type in setup.py [\#1851](https://github.com/kivy/python-for-android/pull/1851) ([inclement](https://github.com/inclement))
- Improved release model documentation [\#1849](https://github.com/kivy/python-for-android/pull/1849) ([inclement](https://github.com/inclement))
- Merge release-2019.06.06 to develop [\#1848](https://github.com/kivy/python-for-android/pull/1848) ([inclement](https://github.com/inclement))
- Add unittest for module `pythonforandroid.distribution` [\#1847](https://github.com/kivy/python-for-android/pull/1847) ([opacam](https://github.com/opacam))
- bugfix: unpack for nonzip archives also needs to compare basename\(dir\) [\#1845](https://github.com/kivy/python-for-android/pull/1845) ([sfoerster](https://github.com/sfoerster))
- Add unittest for module `pythonforandroid.archs` [\#1842](https://github.com/kivy/python-for-android/pull/1842) ([opacam](https://github.com/opacam))
- Replaced one of the python2 travis builds with python3 arm64-v8a [\#1840](https://github.com/kivy/python-for-android/pull/1840) ([inclement](https://github.com/inclement))
## [v2019.06.06](https://github.com/kivy/python-for-android/tree/v2019.06.06) (2019-06-08)
[Full Changelog](https://github.com/kivy/python-for-android/compare/0.7.0...v2019.06.06)
**Fixed bugs:**
- AttributeError: 'Namespace' object has no attribute 'ignore\_setup\_py' [\#1808](https://github.com/kivy/python-for-android/issues/1808)
- libzmq recipe compiling error [\#1802](https://github.com/kivy/python-for-android/issues/1802)
- Cannot build APK - IndexError: List index out of range [\#1774](https://github.com/kivy/python-for-android/issues/1774)
- ctypes.util.find\_library\(\) doesn't work on arch arm64-v8a [\#1770](https://github.com/kivy/python-for-android/issues/1770)
- error building compiled components in netifaces [\#1539](https://github.com/kivy/python-for-android/issues/1539)
- \[WIP\] Fix crashes when using other commands than 'apk' [\#1809](https://github.com/kivy/python-for-android/pull/1809) ([etc0de](https://github.com/etc0de))
**Closed issues:**
- Create a release checklist [\#1836](https://github.com/kivy/python-for-android/issues/1836)
- Sorting out python-for-android releases [\#1833](https://github.com/kivy/python-for-android/issues/1833)
- Error - Runtime permissions - object 'Permission' has no attribute 'ACCESS\_FINE\_LOCATION' [\#1824](https://github.com/kivy/python-for-android/issues/1824)
- buildozer android debug deploy run -\> sh.CommandNotFound: ./gradlew [\#1804](https://github.com/kivy/python-for-android/issues/1804)
- buildozer failed clang++: error: linker command failed with exit code 1 [\#1800](https://github.com/kivy/python-for-android/issues/1800)
- Crash on "--orientation sensor" when rotate [\#1797](https://github.com/kivy/python-for-android/issues/1797)
- error when compiling with flask\_sqlalmechy and sqlamechy [\#1793](https://github.com/kivy/python-for-android/issues/1793)
- Some links are broken in the docs [\#1780](https://github.com/kivy/python-for-android/issues/1780)
- packaged python is built with IPv6 disabled [\#1771](https://github.com/kivy/python-for-android/issues/1771)
- `p4a recipes` terminates with error [\#1769](https://github.com/kivy/python-for-android/issues/1769)
- the application does not work with scipy package [\#1767](https://github.com/kivy/python-for-android/issues/1767)
- openssl not in the build order when compiling cryptography [\#1764](https://github.com/kivy/python-for-android/issues/1764)
- "--orientation fullUser" is not working [\#1763](https://github.com/kivy/python-for-android/issues/1763)
- pydub problem [\#1759](https://github.com/kivy/python-for-android/issues/1759)
- App crashes using python3 and android's run\_on\_ui\_thread [\#1755](https://github.com/kivy/python-for-android/issues/1755)
- str.decode\(\) issue again for Python 3 [\#1749](https://github.com/kivy/python-for-android/issues/1749)
- Error while in gradlew [\#1740](https://github.com/kivy/python-for-android/issues/1740)
- Buildozer [\#1736](https://github.com/kivy/python-for-android/issues/1736)
- C compiler cannot create executables [\#1735](https://github.com/kivy/python-for-android/issues/1735)
- Gevent reciepe problem [\#1732](https://github.com/kivy/python-for-android/issues/1732)
- Permission RECORD\_AUDIO not working [\#1730](https://github.com/kivy/python-for-android/issues/1730)
- Unable to build with flask, conflicting with genericndkbuild [\#1728](https://github.com/kivy/python-for-android/issues/1728)
- Android setup.py not working for windows [\#1726](https://github.com/kivy/python-for-android/issues/1726)
- Fullscreen mode does not work [\#1724](https://github.com/kivy/python-for-android/issues/1724)
- ImportError: sh 1.12.14 is currently only supported on linux and osx. please install pbs 0.110 \(http://pypi.python.org/pypi/pbs\) for windows support. [\#1721](https://github.com/kivy/python-for-android/issues/1721)
- App crashing following successful build [\#1719](https://github.com/kivy/python-for-android/issues/1719)
- Null pointer when finding libraries [\#1717](https://github.com/kivy/python-for-android/issues/1717)
- Psycopg2 error after the apk installation. [\#1711](https://github.com/kivy/python-for-android/issues/1711)
- Match official requestPermissions interface [\#1704](https://github.com/kivy/python-for-android/issues/1704)
- Webview build can't find `SDL_setenv`. [\#1702](https://github.com/kivy/python-for-android/issues/1702)
- lxml and requests recipe: build interrupted, "\_ctype" error [\#1700](https://github.com/kivy/python-for-android/issues/1700)
- weird orientation behavior [\#1698](https://github.com/kivy/python-for-android/issues/1698)
- SDLActivity.java\:1948\: error: cannot find symbol case MotionEvent.ACTION\_BUTTON\_PRESS: [\#1697](https://github.com/kivy/python-for-android/issues/1697)
- ImportError [\#1694](https://github.com/kivy/python-for-android/issues/1694)
- unicode error during startup \(python3, numpy, opencv\) - patch included [\#1691](https://github.com/kivy/python-for-android/issues/1691)
- "--orientation sensor" no longer works [\#1688](https://github.com/kivy/python-for-android/issues/1688)
- kivy==master Window undefined [\#1687](https://github.com/kivy/python-for-android/issues/1687)
- Pillow Python 3 compile error [\#1679](https://github.com/kivy/python-for-android/issues/1679)
- numpy/opencv fails with latest p4a at runtime \(import\) [\#1678](https://github.com/kivy/python-for-android/issues/1678)
- Remove pygame bootstrap [\#1668](https://github.com/kivy/python-for-android/issues/1668)
- TODO: bring the kivy.org p4a documentation up to date [\#1657](https://github.com/kivy/python-for-android/issues/1657)
- Discussion: should the default recipe set for python3 unconditionally include libffi to build ctypes? What about sqlite3 and other core modules? [\#1576](https://github.com/kivy/python-for-android/issues/1576)
- Project's setup.py is not run, it should be \(at least as an option\) [\#1488](https://github.com/kivy/python-for-android/issues/1488)
- Destroying SDL\_Renderer in app background event with the intention to restore it in foreground event leads to crash [\#1424](https://github.com/kivy/python-for-android/issues/1424)
- Broken libglob recipe [\#1399](https://github.com/kivy/python-for-android/issues/1399)
- Crash when my Python program starts to load [\#1299](https://github.com/kivy/python-for-android/issues/1299)
- Calendar.getTimeInMillis\(\) returns a negative value [\#942](https://github.com/kivy/python-for-android/issues/942)
- plyer requirement does not work with ==master version [\#879](https://github.com/kivy/python-for-android/issues/879)
- ImportError: No module named pysqlite2 [\#860](https://github.com/kivy/python-for-android/issues/860)
- Local recipe dir is not returned by get\_recipe\_dir\(\) [\#613](https://github.com/kivy/python-for-android/issues/613)
- SQLite gets compiled without Full Text Search \(FTS3\) support [\#431](https://github.com/kivy/python-for-android/issues/431)
- BroadcastReceiver broken in service [\#278](https://github.com/kivy/python-for-android/issues/278)
**Merged pull requests:**
- Release 2019.06.06 [\#1839](https://github.com/kivy/python-for-android/pull/1839) ([inclement](https://github.com/inclement))
- Documented the development and release models [\#1838](https://github.com/kivy/python-for-android/pull/1838) ([inclement](https://github.com/inclement))
- Added readme for on device unit tests [\#1837](https://github.com/kivy/python-for-android/pull/1837) ([inclement](https://github.com/inclement))
- Add coverage with coveralls and make use of travis stages [\#1835](https://github.com/kivy/python-for-android/pull/1835) ([opacam](https://github.com/opacam))
- Update Kivy version to 1.11.0 [\#1832](https://github.com/kivy/python-for-android/pull/1832) ([inclement](https://github.com/inclement))
- \[R.I.P.\] Remove `python2legacy` and `hospython2legacy` [\#1831](https://github.com/kivy/python-for-android/pull/1831) ([opacam](https://github.com/opacam))
- Update permissions.py [\#1828](https://github.com/kivy/python-for-android/pull/1828) ([tamano123](https://github.com/tamano123))
- Add a Pillow test app [\#1826](https://github.com/kivy/python-for-android/pull/1826) ([opacam](https://github.com/opacam))
- Rework of freetype/harfbuzz recipes [\#1825](https://github.com/kivy/python-for-android/pull/1825) ([opacam](https://github.com/opacam))
- Added a matplotlib recipe [\#1822](https://github.com/kivy/python-for-android/pull/1822) ([inclement](https://github.com/inclement))
- Fix travis log doesn't produce any output for more than 10 minutes [\#1821](https://github.com/kivy/python-for-android/pull/1821) ([opacam](https://github.com/opacam))
- Fix `CI` errors with latest tox [\#1820](https://github.com/kivy/python-for-android/pull/1820) ([opacam](https://github.com/opacam))
- Fixed build file for service\_only bootstrap [\#1819](https://github.com/kivy/python-for-android/pull/1819) ([devos50](https://github.com/devos50))
- enable IPv6 for packaged python3 [\#1815](https://github.com/kivy/python-for-android/pull/1815) ([SomberNight](https://github.com/SomberNight))
- Update pymunk to v5.5.0 [\#1814](https://github.com/kivy/python-for-android/pull/1814) ([viblo](https://github.com/viblo))
- Fixes ffpyplayer build [\#1813](https://github.com/kivy/python-for-android/pull/1813) ([misl6](https://github.com/misl6))
- Fix corner case of pip hack workaround we should get rid of anyway [\#1807](https://github.com/kivy/python-for-android/pull/1807) ([etc0de](https://github.com/etc0de))
- Fixed doc links to plyer and pyjnius [\#1806](https://github.com/kivy/python-for-android/pull/1806) ([inclement](https://github.com/inclement))
- Fixed libzqm recipe linking issues [\#1803](https://github.com/kivy/python-for-android/pull/1803) ([hpsaturn](https://github.com/hpsaturn))
- Update recipes.rst [\#1799](https://github.com/kivy/python-for-android/pull/1799) ([FunmiKesa](https://github.com/FunmiKesa))
- Update recipes.rst [\#1798](https://github.com/kivy/python-for-android/pull/1798) ([FunmiKesa](https://github.com/FunmiKesa))
- Bumps to setuptools==40.9.0 [\#1795](https://github.com/kivy/python-for-android/pull/1795) ([AndreMiras](https://github.com/AndreMiras))
- Fix sqlalchemy recipe [\#1794](https://github.com/kivy/python-for-android/pull/1794) ([sduenasg](https://github.com/sduenasg))
- Move ffmpeg download url to github repo [\#1791](https://github.com/kivy/python-for-android/pull/1791) ([misl6](https://github.com/misl6))
- Ignores Python 2 import\_recipe\(\) warnings [\#1789](https://github.com/kivy/python-for-android/pull/1789) ([AndreMiras](https://github.com/AndreMiras))
- \[kivy\] updated to 44a8a6f [\#1777](https://github.com/kivy/python-for-android/pull/1777) ([goffi-contrib](https://github.com/goffi-contrib))
- Fix outdated PySDL2 version and non-PyPI install source [\#1775](https://github.com/kivy/python-for-android/pull/1775) ([etc0de](https://github.com/etc0de))
- Properly search native lib dir in ctypes, fixes \#1770 [\#1772](https://github.com/kivy/python-for-android/pull/1772) ([etc0de](https://github.com/etc0de))
- \[kivy\] updated recipe to c4d6894 revision [\#1766](https://github.com/kivy/python-for-android/pull/1766) ([goffi-contrib](https://github.com/goffi-contrib))
- Fixes libglob recipe, closes \#1399 [\#1765](https://github.com/kivy/python-for-android/pull/1765) ([AndreMiras](https://github.com/AndreMiras))
- \[doubleratchet\] removed this recipe [\#1762](https://github.com/kivy/python-for-android/pull/1762) ([goffi-contrib](https://github.com/goffi-contrib))
- \[cryptography\] updated to 2.6.1 [\#1761](https://github.com/kivy/python-for-android/pull/1761) ([goffi-contrib](https://github.com/goffi-contrib))
- \[omemo-backend-signal\] updated to 0.2.3 [\#1760](https://github.com/kivy/python-for-android/pull/1760) ([goffi-contrib](https://github.com/goffi-contrib))
- \[omemo\] updated to v0.10.4 [\#1758](https://github.com/kivy/python-for-android/pull/1758) ([goffi-contrib](https://github.com/goffi-contrib))
- \[protobuf\_cpp\] fixed runtime issues [\#1757](https://github.com/kivy/python-for-android/pull/1757) ([goffi-contrib](https://github.com/goffi-contrib))
- \[xeddsa\] fixed shared library copying [\#1756](https://github.com/kivy/python-for-android/pull/1756) ([goffi-contrib](https://github.com/goffi-contrib))
- remove call to decode on str in \_android.pyx [\#1752](https://github.com/kivy/python-for-android/pull/1752) ([tshirtman](https://github.com/tshirtman))
- \[libxml2\] fixed crash on missing lzma.h [\#1751](https://github.com/kivy/python-for-android/pull/1751) ([goffi-contrib](https://github.com/goffi-contrib))
- Remove string decoding in \_android.pyx for Python3 compatibility [\#1748](https://github.com/kivy/python-for-android/pull/1748) ([darosior](https://github.com/darosior))
- decode JAVA\_NAMESPACE in \_android.pyx [\#1747](https://github.com/kivy/python-for-android/pull/1747) ([tshirtman](https://github.com/tshirtman))
- fix: "cwd is" log message was printed directly, not via debug\(\) [\#1746](https://github.com/kivy/python-for-android/pull/1746) ([mkg20001](https://github.com/mkg20001))
- Fix libffi recipe, and build + runtime linker errors when compiling on WSL [\#1744](https://github.com/kivy/python-for-android/pull/1744) ([Aralox](https://github.com/Aralox))
- Updated sdl2\_mixer version to 2.0.4 [\#1742](https://github.com/kivy/python-for-android/pull/1742) ([misl6](https://github.com/misl6))
- Requests runtime permissions list, fixes \#1704 [\#1741](https://github.com/kivy/python-for-android/pull/1741) ([AndreMiras](https://github.com/AndreMiras))
- fix groestlcoin\_hash recipe [\#1738](https://github.com/kivy/python-for-android/pull/1738) ([tshirtman](https://github.com/tshirtman))
- Fixes object is not subscriptable error, refs \#1733 [\#1734](https://github.com/kivy/python-for-android/pull/1734) ([AndreMiras](https://github.com/AndreMiras))
- Add missing arch to version code generator. [\#1733](https://github.com/kivy/python-for-android/pull/1733) ([OptimusGREEN](https://github.com/OptimusGREEN))
- Fix import in 'Using a PythonRecipe' doc [\#1731](https://github.com/kivy/python-for-android/pull/1731) ([b3b](https://github.com/b3b))
- Removed unnecessary genericndkbuild dependency from the flask recipe [\#1729](https://github.com/kivy/python-for-android/pull/1729) ([inclement](https://github.com/inclement))
- Add ci\_mode to disable download progress [\#1727](https://github.com/kivy/python-for-android/pull/1727) ([mkg20001](https://github.com/mkg20001))
- Zworkb services [\#1725](https://github.com/kivy/python-for-android/pull/1725) ([zworkb](https://github.com/zworkb))
- Fixes psycopg2 lib install dir, closes \#1711 [\#1723](https://github.com/kivy/python-for-android/pull/1723) ([AndreMiras](https://github.com/AndreMiras))
- Generate android version code accounting for arch and min sdk [\#1720](https://github.com/kivy/python-for-android/pull/1720) ([OptimusGREEN](https://github.com/OptimusGREEN))
- Fix sdl2\_image compile error when arch is x86 [\#1718](https://github.com/kivy/python-for-android/pull/1718) ([j-devel](https://github.com/j-devel))
- Fix compile error of recipe "android" for non-sdl bootstrap build [\#1715](https://github.com/kivy/python-for-android/pull/1715) ([j-devel](https://github.com/j-devel))
- Fix setenv\(\) of non-SDL2 bootstrap [\#1714](https://github.com/kivy/python-for-android/pull/1714) ([j-devel](https://github.com/j-devel))
- Update enum34, pyasn1and pyopenssl versions. [\#1713](https://github.com/kivy/python-for-android/pull/1713) ([rnixx](https://github.com/rnixx))
- Added warning for arguments containing carriage returns. This happens… [\#1712](https://github.com/kivy/python-for-android/pull/1712) ([Aralox](https://github.com/Aralox))
- Fix loadLibraries\(\) failing for 64bit arch [\#1701](https://github.com/kivy/python-for-android/pull/1701) ([j-devel](https://github.com/j-devel))
- Fixes pyleveldb recipe [\#1699](https://github.com/kivy/python-for-android/pull/1699) ([AndreMiras](https://github.com/AndreMiras))
- Make testapps use python3 per default and adapt to `blacklist-requirements` [\#1696](https://github.com/kivy/python-for-android/pull/1696) ([opacam](https://github.com/opacam))
- change dependency from jdk7 to jdk8 [\#1695](https://github.com/kivy/python-for-android/pull/1695) ([Meteorix](https://github.com/Meteorix))
- FIX: copy additional jar files into the correct libs directory [\#1693](https://github.com/kivy/python-for-android/pull/1693) ([OptimusGREEN](https://github.com/OptimusGREEN))
- SDL2\_image update to 2.0.4 and set kivy's version to master [\#1692](https://github.com/kivy/python-for-android/pull/1692) ([opacam](https://github.com/opacam))
- Use nativeSetenv\(\) provided by SDL2 and cleanups [\#1690](https://github.com/kivy/python-for-android/pull/1690) ([j-devel](https://github.com/j-devel))
- Rename misguided shadowing --blacklist to --blacklist-requirements [\#1689](https://github.com/kivy/python-for-android/pull/1689) ([etc0de](https://github.com/etc0de))
- Deleted kivent recipes from constants.py [\#1686](https://github.com/kivy/python-for-android/pull/1686) ([inclement](https://github.com/inclement))
- Downgrade to pycryptodome==3.6.3 [\#1685](https://github.com/kivy/python-for-android/pull/1685) ([AndreMiras](https://github.com/AndreMiras))
- Added option to support custom shared libraries with \<uses-library\> tag [\#1684](https://github.com/kivy/python-for-android/pull/1684) ([pax0r](https://github.com/pax0r))
- Implement --blacklist option and include more modules/recipes by default [\#1683](https://github.com/kivy/python-for-android/pull/1683) ([etc0de](https://github.com/etc0de))
- Origin [\#1681](https://github.com/kivy/python-for-android/pull/1681) ([strubbi77](https://github.com/strubbi77))
- Delete kivent recipes [\#1680](https://github.com/kivy/python-for-android/pull/1680) ([inclement](https://github.com/inclement))
- Fix zope\_interface and add python3 compatibility [\#1677](https://github.com/kivy/python-for-android/pull/1677) ([opacam](https://github.com/opacam))
- Recipe class unit tests [\#1676](https://github.com/kivy/python-for-android/pull/1676) ([AndreMiras](https://github.com/AndreMiras))
- Bumps netiffaces version & removes from broken list, refs \#1539 [\#1675](https://github.com/kivy/python-for-android/pull/1675) ([AndreMiras](https://github.com/AndreMiras))
- tox update and linter fixes [\#1674](https://github.com/kivy/python-for-android/pull/1674) ([AndreMiras](https://github.com/AndreMiras))
- tox update and linter fixes [\#1673](https://github.com/kivy/python-for-android/pull/1673) ([AndreMiras](https://github.com/AndreMiras))
- Delete the pygame bootstrap [\#1670](https://github.com/kivy/python-for-android/pull/1670) ([inclement](https://github.com/inclement))
- Fix various issues with graphs and recipes [\#1669](https://github.com/kivy/python-for-android/pull/1669) ([etc0de](https://github.com/etc0de))
- Fix setup.py install breaking due to unicode characters in README.md on Python 3 [\#1667](https://github.com/kivy/python-for-android/pull/1667) ([etc0de](https://github.com/etc0de))
- s/README.rst/README.md/ refs \#1664 [\#1666](https://github.com/kivy/python-for-android/pull/1666) ([AndreMiras](https://github.com/AndreMiras))
- Update and rename README.rst to README.md [\#1664](https://github.com/kivy/python-for-android/pull/1664) ([tito](https://github.com/tito))
- Defaults to post kivy==1.10.1 commit for SDL 2.0.9 fixes [\#1663](https://github.com/kivy/python-for-android/pull/1663) ([AndreMiras](https://github.com/AndreMiras))
- Rework opencv's recipe \(enable cv2.so and the extra opencv libraries\) [\#1661](https://github.com/kivy/python-for-android/pull/1661) ([opacam](https://github.com/opacam))
- Updated version to 0.7.1 [\#1660](https://github.com/kivy/python-for-android/pull/1660) ([inclement](https://github.com/inclement))
- \[WIP\] Run project's setup.py if present, unless --ignore-setup-py was set [\#1625](https://github.com/kivy/python-for-android/pull/1625) ([etc0de](https://github.com/etc0de))
## [0.7.0](https://github.com/kivy/python-for-android/tree/0.7.0) (2019-02-01)
[Full Changelog](https://github.com/kivy/python-for-android/compare/0.6.0...0.7.0)
**Fixed bugs:**
- python3 + openssl compilation fail [\#1590](https://github.com/kivy/python-for-android/issues/1590)
- Update conditional build to python3 [\#1485](https://github.com/kivy/python-for-android/issues/1485)
- building apk fails \( python 3 \) [\#746](https://github.com/kivy/python-for-android/issues/746)
**Closed issues:**
- 'Orientation' and 'Fullscreen' settings in spec file: Possible issue. [\#1655](https://github.com/kivy/python-for-android/issues/1655)
- cffi UnicodeEncodeError: 'ascii' codec can't encode character '\u2018' [\#1654](https://github.com/kivy/python-for-android/issues/1654)
- Create an app for testing p4a builds on the device [\#1630](https://github.com/kivy/python-for-android/issues/1630)
- Build crashes if NDK is installed system-wide without write permissions [\#1621](https://github.com/kivy/python-for-android/issues/1621)
- libFFI recipe doesn't work with clang [\#1612](https://github.com/kivy/python-for-android/issues/1612)
- How do I use this software? [\#1606](https://github.com/kivy/python-for-android/issues/1606)
- no work [\#1599](https://github.com/kivy/python-for-android/issues/1599)
- python2legacy - various warnings then no valid dependency graphs [\#1582](https://github.com/kivy/python-for-android/issues/1582)
- pyjnius import crash / TypeError [\#1578](https://github.com/kivy/python-for-android/issues/1578)
- reportlab broken, possibly using wrong python header or compiler flags with python 3? [\#1575](https://github.com/kivy/python-for-android/issues/1575)
- p4a apk crash "IndexError: list index out of range" [\#1570](https://github.com/kivy/python-for-android/issues/1570)
- Libffi build fail on Mac [\#1569](https://github.com/kivy/python-for-android/issues/1569)
- All the python functions can run on kivy [\#1567](https://github.com/kivy/python-for-android/issues/1567)
- --force-build is --force\_build in the docs [\#1565](https://github.com/kivy/python-for-android/issues/1565)
- apk with sqlite3 python3 kivy No module named '\_sqlite3' [\#1564](https://github.com/kivy/python-for-android/issues/1564)
- Android crash on run, Fatal signal 6 \(SIGABRT\), code -6 in tid 10265 \(SDLThread\), avc: denied { search } [\#1562](https://github.com/kivy/python-for-android/issues/1562)
- Minor exclude extensions code simplification [\#1560](https://github.com/kivy/python-for-android/issues/1560)
- SSLError python 3.7.1 [\#1559](https://github.com/kivy/python-for-android/issues/1559)
- Error message claiming conflicting dependencies when requesting a recipe \(here, `python3`\) that was not \(yet\) available [\#1557](https://github.com/kivy/python-for-android/issues/1557)
- The virtual machine \(VM 0.5\) does not collect packages with dependencies, except Python and Kivy [\#1542](https://github.com/kivy/python-for-android/issues/1542)
- raise exc [\#1540](https://github.com/kivy/python-for-android/issues/1540)
- raise exc sh.ErrorReturnCode\_2: [\#1538](https://github.com/kivy/python-for-android/issues/1538)
- How to build other ABI versions of "libcrypto.so" and "libssl.so"? [\#1536](https://github.com/kivy/python-for-android/issues/1536)
- How to build other versions of ABI? [\#1535](https://github.com/kivy/python-for-android/issues/1535)
- No module named sh [\#1531](https://github.com/kivy/python-for-android/issues/1531)
- p4a crash "Couldn't find the built APK" [\#1530](https://github.com/kivy/python-for-android/issues/1530)
- UnicodeEncodeError in logger.py [\#1529](https://github.com/kivy/python-for-android/issues/1529)
- Hello, is there a Chinese document? It is still very difficult for me to read the document after using Google Translate. [\#1527](https://github.com/kivy/python-for-android/issues/1527)
- ValueError: storage dir path cannot contain spaces, please specify a path with --storage-dir [\#1526](https://github.com/kivy/python-for-android/issues/1526)
- Build fails: Could not find com.android.tools.lint:lint-gradle:26.1.4 [\#1520](https://github.com/kivy/python-for-android/issues/1520)
- App doesn't support pause mode' when using on\_pause method [\#1518](https://github.com/kivy/python-for-android/issues/1518)
- Comprehensive list of broken python3 recipes [\#1514](https://github.com/kivy/python-for-android/issues/1514)
- BUILD FAILURE: No main.py\(o\) found in your app directory. [\#1510](https://github.com/kivy/python-for-android/issues/1510)
- testapp\_flask doesn't build with webview bootstrap, final bootstrap compiler options appear to have some sort of issue [\#1509](https://github.com/kivy/python-for-android/issues/1509)
- Bootstrap detection for "service\_only" and "webview" is broken - always picks sdl2 [\#1508](https://github.com/kivy/python-for-android/issues/1508)
- p4a latest master / Python 2.7 / API target 28 / NDK 21 / openjdk8 crashes during gradle step [\#1506](https://github.com/kivy/python-for-android/issues/1506)
- --requirements=android gives crash [\#1504](https://github.com/kivy/python-for-android/issues/1504)
- pyjnius build failure with NDK r17c, NDK 21, SDK 28 [\#1502](https://github.com/kivy/python-for-android/issues/1502)
- Need libpython3.7m.so.1.0 in android phone [\#1501](https://github.com/kivy/python-for-android/issues/1501)
- Tech debt: webview, pygame and service\_only bootstraps are hardwired to Python 2.7 [\#1497](https://github.com/kivy/python-for-android/issues/1497)
- ImportError: No module named android [\#1492](https://github.com/kivy/python-for-android/issues/1492)
- p4a --requirements ignores absolute folder paths [\#1487](https://github.com/kivy/python-for-android/issues/1487)
- Set the api level from 19 to 28 failed [\#1482](https://github.com/kivy/python-for-android/issues/1482)
- libxml2 build broken on latest p4a master with python 3 [\#1479](https://github.com/kivy/python-for-android/issues/1479)
- working: make: \*\*\* \[Makefile\:426\: sharedmods\] Error 139 [\#1474](https://github.com/kivy/python-for-android/issues/1474)
- .pxd files of dependency targeted recipe'd library not found [\#1473](https://github.com/kivy/python-for-android/issues/1473)
- Python 3 recipe follow up issues [\#1455](https://github.com/kivy/python-for-android/issues/1455)
- Python-4-Android NumPy error: 'struct lconv' has no member named 'decimal\_point' [\#1450](https://github.com/kivy/python-for-android/issues/1450)
- Update to latest SDL required for proper key handling [\#1449](https://github.com/kivy/python-for-android/issues/1449)
- socket.getaddrinfo appears to be completely broken, all name resolutions fail [\#1447](https://github.com/kivy/python-for-android/issues/1447)
- lxml recipe doesn't work with Python 3 [\#1445](https://github.com/kivy/python-for-android/issues/1445)
- C Compiler can not create executables [\#1436](https://github.com/kivy/python-for-android/issues/1436)
- Unable to create APK [\#1434](https://github.com/kivy/python-for-android/issues/1434)
- Destroying SDL\_Renderer in SDL\_APP\_DIDENTERBACKGROUND \(with intention of recreating it\) will lead to crash [\#1425](https://github.com/kivy/python-for-android/issues/1425)
- AndroidManifest.xml.tmpl should set screenLayout & smallScreenSize [\#1422](https://github.com/kivy/python-for-android/issues/1422)
- pyjnius really should be version pinned. [\#1415](https://github.com/kivy/python-for-android/issues/1415)
- p4a git master pyjnius build breaks [\#1414](https://github.com/kivy/python-for-android/issues/1414)
- enaml recipe compilation fails [\#1409](https://github.com/kivy/python-for-android/issues/1409)
- Cython projects that don't need any special option should work without a CythonRecipe [\#1406](https://github.com/kivy/python-for-android/issues/1406)
- libpq recipe compilation fails [\#1405](https://github.com/kivy/python-for-android/issues/1405)
- cryptography + python3crystax fails [\#1404](https://github.com/kivy/python-for-android/issues/1404)
- Comprehensive list of broken recipes [\#1402](https://github.com/kivy/python-for-android/issues/1402)
- ifaddrs compilation error [\#1398](https://github.com/kivy/python-for-android/issues/1398)
- Python project build Buildozer issue - Please define SDL\_JAVA\_PACKAGE\_PATH to the path of your Java package with dots replaced with underscores [\#1391](https://github.com/kivy/python-for-android/issues/1391)
- error: kivy/graphics/texture.c: No such file or directory [\#1384](https://github.com/kivy/python-for-android/issues/1384)
- Investigate conditional builds [\#1382](https://github.com/kivy/python-for-android/issues/1382)
- Unit test recipes \(reportlab to begin with\) [\#1380](https://github.com/kivy/python-for-android/issues/1380)
- There is insufficient memory for the Java Runtime Environment to continue [\#1373](https://github.com/kivy/python-for-android/issues/1373)
- SSL/TLS is broken with Python 3: ImportError: missing module \_ssl [\#1372](https://github.com/kivy/python-for-android/issues/1372)
- Buildozer fail to build numpy recipe [\#1369](https://github.com/kivy/python-for-android/issues/1369)
- Buildozer weird error\(Still trying to use Kivy only\) [\#1368](https://github.com/kivy/python-for-android/issues/1368)
- Error when trying to use numpy \(Broken Toolchain\) [\#1367](https://github.com/kivy/python-for-android/issues/1367)
- java.lang.UnsatisfiedLinkError: No implementation found for void org.libsdl.app.SDLActivity.nativeQuit\(\) \(tried Java\_org\_libsdl\_app\_SDLActivity\_nativeQuit and Java\_org\_libsdl\_app\_SDLActivity\_nativeQuit\_\_\) [\#1365](https://github.com/kivy/python-for-android/issues/1365)
- Migrate away from ndk\_build? [\#1362](https://github.com/kivy/python-for-android/issues/1362)
- Fix/clean-up LDSHARED [\#1360](https://github.com/kivy/python-for-android/issues/1360)
- buildozer error: no module named kivy [\#1354](https://github.com/kivy/python-for-android/issues/1354)
- Spurious nullpointer crash on app resume [\#1353](https://github.com/kivy/python-for-android/issues/1353)
- Docs say ANDROIDAPI=19 sets minimum API level, but it sets target API level [\#1352](https://github.com/kivy/python-for-android/issues/1352)
- Bug or support request? [\#1346](https://github.com/kivy/python-for-android/issues/1346)
- Issue with not finding JNI and nativeSetEnv in SDLActivity [\#1344](https://github.com/kivy/python-for-android/issues/1344)
- python-for-android packages wrong manifest for ANDROIDAPI="19", doesn't include configChanges="...|screenSize" which leads to app crash on rotation [\#1342](https://github.com/kivy/python-for-android/issues/1342)
- python2: jpeg recipe broken due to missing libcutils [\#1341](https://github.com/kivy/python-for-android/issues/1341)
- Orientation change causes bogus SDL\_QUIT and SDL\_APP\_TERMINATING events [\#1338](https://github.com/kivy/python-for-android/issues/1338)
- ctypes.util.find\_library doesn't work with python 3 [\#1337](https://github.com/kivy/python-for-android/issues/1337)
- 'import lzma' fails with Python 3 [\#1336](https://github.com/kivy/python-for-android/issues/1336)
- Read & write to entire SD card is an unreasonable default permission for most games and basic UI applications [\#1335](https://github.com/kivy/python-for-android/issues/1335)
- Build failed [\#1333](https://github.com/kivy/python-for-android/issues/1333)
- Auto-close awaiting-reply labeled issues [\#1331](https://github.com/kivy/python-for-android/issues/1331)
- App crashes when sending POST request http [\#1329](https://github.com/kivy/python-for-android/issues/1329)
- kivy build error with python3crystax [\#1328](https://github.com/kivy/python-for-android/issues/1328)
- No "pil" or "pillow" available for Python 3 [\#1326](https://github.com/kivy/python-for-android/issues/1326)
- pillow fails on import [\#1325](https://github.com/kivy/python-for-android/issues/1325)
- Unavoidable PySDL2 crash on app resume [\#1323](https://github.com/kivy/python-for-android/issues/1323)
- Tons of different PySDL2 crashes when tabbing in/out of application during loading or right after it finished [\#1321](https://github.com/kivy/python-for-android/issues/1321)
- Build doesn't pick up gradle even though it is present, tries using ant instead and fails [\#1320](https://github.com/kivy/python-for-android/issues/1320)
- Crystax NDK size is larger than Android Studio + SDK + \(regular\) NDK + ... combined [\#1319](https://github.com/kivy/python-for-android/issues/1319)
- Generated md5sum does not match expected md5sum for sdl2 recipe [\#1318](https://github.com/kivy/python-for-android/issues/1318)
- It doesn't work about "android.activity.bind\(on\_new\_intent=myFunc\)",need help,thanks [\#1317](https://github.com/kivy/python-for-android/issues/1317)
- CMake error with OpenCV [\#1315](https://github.com/kivy/python-for-android/issues/1315)
- libpython2.7.so: is missing DT\_SONAME using buildozer with latest VirtualBox VM for Android Buildozer \(Version 2.0, released the 13 May 2017\). [\#1314](https://github.com/kivy/python-for-android/issues/1314)
- On Virtual Machine, this error arises when openCV is filled in the requirement in the spec file [\#1313](https://github.com/kivy/python-for-android/issues/1313)
- p4a apk command results in: No such file or directory: 'src/main/assets/private.mp3' [\#1312](https://github.com/kivy/python-for-android/issues/1312)
- Build error to import shapely \(libgeos\) [\#1311](https://github.com/kivy/python-for-android/issues/1311)
- "/data/user/0/org.gmail.gmail/files/app/libpymodules.so" not found [\#1309](https://github.com/kivy/python-for-android/issues/1309)
- numpy Python3/Crystax broken toolchain can't link a simple C program [\#1303](https://github.com/kivy/python-for-android/issues/1303)
- Screen Rotation and Re-layout [\#1302](https://github.com/kivy/python-for-android/issues/1302)
- IOError: \[Errno socket error\] \[Errno 104\] Connection reset by peer [\#1301](https://github.com/kivy/python-for-android/issues/1301)
- Python2 Build fails with make: \*\*\* \[Makefile\:426\: sharedmods\] Error 139 [\#1297](https://github.com/kivy/python-for-android/issues/1297)
- ffmpeg breaks buildozer android debug compilation process. [\#1294](https://github.com/kivy/python-for-android/issues/1294)
- Android: python startup complaining about missing hashlib functions [\#1293](https://github.com/kivy/python-for-android/issues/1293)
- sh.CommandNotFound: ndk\_build [\#1292](https://github.com/kivy/python-for-android/issues/1292)
- SDL Error: ... could not load library "libpython2.7.so" ... on Android 4.2.2 [\#1290](https://github.com/kivy/python-for-android/issues/1290)
- Facing issues in making webbrowser.open\(url\) work [\#1287](https://github.com/kivy/python-for-android/issues/1287)
- Travis download caching [\#1280](https://github.com/kivy/python-for-android/issues/1280)
- When you fix the error "error: \[Errno 2\] No such file or directory: 'src/main/assets/private.mp3'" [\#1279](https://github.com/kivy/python-for-android/issues/1279)
- Little typo [\#1275](https://github.com/kivy/python-for-android/issues/1275)
- Fix numpy x86 build using \#1252 [\#1274](https://github.com/kivy/python-for-android/issues/1274)
- Some phones don't allow access to /sdcard [\#1272](https://github.com/kivy/python-for-android/issues/1272)
- Kivy Android app running in background crashes when intent tries to pull it to top [\#1271](https://github.com/kivy/python-for-android/issues/1271)
- Sometimes sdl2 - UnicodeDecodeError: 'utf-8' codec can't decode byte 0x98 [\#1270](https://github.com/kivy/python-for-android/issues/1270)
- App crash when connecting to mysql [\#1269](https://github.com/kivy/python-for-android/issues/1269)
- \[wishlist\] Android launcher: Please build with Python 3 [\#1268](https://github.com/kivy/python-for-android/issues/1268)
- Opencv doesn't work on kivy ImportError: dlopen failed: "/data/data/com.mydomain.myapp/files/\_applibs/cv2/cv2.so" is 64-bit instead of 32-bit [\#1267](https://github.com/kivy/python-for-android/issues/1267)
- Why an error occurs 'python-for-android cannot continue; aborting'? [\#1266](https://github.com/kivy/python-for-android/issues/1266)
- Internet connection impossible with kivy app on android [\#1265](https://github.com/kivy/python-for-android/issues/1265)
- python-for-android recipe tests [\#1263](https://github.com/kivy/python-for-android/issues/1263)
- When the apk is turned on it gives me an error in the hashlib python3.6 [\#1260](https://github.com/kivy/python-for-android/issues/1260)
- fail to build application ERROR 'WindowInfoX11' is not a type identifier [\#1259](https://github.com/kivy/python-for-android/issues/1259)
- Buildozer command failed [\#1258](https://github.com/kivy/python-for-android/issues/1258)
- IOError: \[Errno 2\] No such file or directory: 'src/main/assets/private.mp3' [\#1257](https://github.com/kivy/python-for-android/issues/1257)
- Prebuilt python does not contain binaries for any architecture. [\#1254](https://github.com/kivy/python-for-android/issues/1254)
- Didn't find any valid dependency graphs. - Flask and websocket-client [\#1253](https://github.com/kivy/python-for-android/issues/1253)
- assertion PyBytes\_Check failed [\#1247](https://github.com/kivy/python-for-android/issues/1247)
- Issue of AttributeError [\#1246](https://github.com/kivy/python-for-android/issues/1246)
- Python3 + greenlet install issue [\#1245](https://github.com/kivy/python-for-android/issues/1245)
- Confusing / Outdated Bootstraps [\#1244](https://github.com/kivy/python-for-android/issues/1244)
- openSSL recipe uses system-wide headers; app fails to run: cannot locate symbol EC\_curve\_nist2nid [\#1243](https://github.com/kivy/python-for-android/issues/1243)
- APK Immediately Closes After Opening in Debug, Release, and Zipaligned & Signed Versions [\#1242](https://github.com/kivy/python-for-android/issues/1242)
- Custom Recipes For Pandas, Matplotlib and Statsmodels [\#1241](https://github.com/kivy/python-for-android/issues/1241)
- WebView.setWebContentsDebuggingEnabled [\#1240](https://github.com/kivy/python-for-android/issues/1240)
- amreabi-v7a build cannot find SDL\_GetTicks\(\) [\#1239](https://github.com/kivy/python-for-android/issues/1239)
- x86 inline assembly fails to build [\#1238](https://github.com/kivy/python-for-android/issues/1238)
- Can't compile dependency in 32bit on 64bit system [\#1237](https://github.com/kivy/python-for-android/issues/1237)
- Cannot import name 'uname' on Windows [\#1234](https://github.com/kivy/python-for-android/issues/1234)
- Uses Arm builds for x86, if Arm builds already exist [\#1233](https://github.com/kivy/python-for-android/issues/1233)
- The sh Python module could not be found [\#1232](https://github.com/kivy/python-for-android/issues/1232)
- Issue with Android API 23+ [\#1231](https://github.com/kivy/python-for-android/issues/1231)
- Failed to build application: 'WindowInfoX11' is not a type identifier [\#1230](https://github.com/kivy/python-for-android/issues/1230)
- Missing arm-linux-androideabi-gcc [\#1229](https://github.com/kivy/python-for-android/issues/1229)
- Android build issues: raise CommandNotFound\(path\) [\#1228](https://github.com/kivy/python-for-android/issues/1228)
- TextInput display text only when suggestion validate on Asus ZenPhone3 [\#1227](https://github.com/kivy/python-for-android/issues/1227)
- on\_stop not called on Android [\#1226](https://github.com/kivy/python-for-android/issues/1226)
- The python3crystax recipe can only be built when using the CrystaX NDK. [\#1225](https://github.com/kivy/python-for-android/issues/1225)
- Didn't find any valid dependency graphs. [\#1222](https://github.com/kivy/python-for-android/issues/1222)
- Google requiring API Target 26 in Aug/Nov 2018 [\#1219](https://github.com/kivy/python-for-android/issues/1219)
- p4a can't find android sdk [\#1218](https://github.com/kivy/python-for-android/issues/1218)
- IOError: \[Errno 2\] No such file or directory: u'/Users/gauravgupta/kivy/.buildozer/android/platform/build/dists/myellipse/build/outputs/apk/myellipse-debug.apk' [\#1216](https://github.com/kivy/python-for-android/issues/1216)
- Buildozer android application crashes on android [\#1215](https://github.com/kivy/python-for-android/issues/1215)
- Multiple issues with latest Android SDK [\#1212](https://github.com/kivy/python-for-android/issues/1212)
- sdkmanager doesn't exist [\#1210](https://github.com/kivy/python-for-android/issues/1210)
- add-jar doesn't work [\#1208](https://github.com/kivy/python-for-android/issues/1208)
- Kivy not working on Sony devices [\#1206](https://github.com/kivy/python-for-android/issues/1206)
- sqlite pre-populated database not being found [\#1203](https://github.com/kivy/python-for-android/issues/1203)
- Try python3.7 with Google NDK [\#1202](https://github.com/kivy/python-for-android/issues/1202)
- commit 3534a761 [\#1200](https://github.com/kivy/python-for-android/issues/1200)
- Kivy basic button program doesn't work [\#1199](https://github.com/kivy/python-for-android/issues/1199)
- Error Pythonforandroid.toolchain -m [\#1196](https://github.com/kivy/python-for-android/issues/1196)
- assert keyword do not work [\#1193](https://github.com/kivy/python-for-android/issues/1193)
- macOS High Siera installation issue [\#1192](https://github.com/kivy/python-for-android/issues/1192)
- failed to setup p4a on ubuntu \(multiple issues\) [\#1191](https://github.com/kivy/python-for-android/issues/1191)
- Cryptography woes: Can we freshen up our Python version... [\#1190](https://github.com/kivy/python-for-android/issues/1190)
- Kivy crashes immediately on start, on Sony devices [\#1188](https://github.com/kivy/python-for-android/issues/1188)
- UnicodeDecodeError [\#1187](https://github.com/kivy/python-for-android/issues/1187)
- \[INFO\]: Building with ant, as no gradle executable detected [\#1186](https://github.com/kivy/python-for-android/issues/1186)
- Local recipes can not be patched any longer [\#1185](https://github.com/kivy/python-for-android/issues/1185)
- Cymunk build fail on python3crystax [\#1184](https://github.com/kivy/python-for-android/issues/1184)
- p4a doesn't handle runtime permissions [\#1183](https://github.com/kivy/python-for-android/issues/1183)
- Android app freeze on screen rotation \(again?\) [\#1179](https://github.com/kivy/python-for-android/issues/1179)
- custom java class [\#1177](https://github.com/kivy/python-for-android/issues/1177)
- Dockerfile [\#1175](https://github.com/kivy/python-for-android/issues/1175)
- python2 recipe always builds for armeabi regardless of what arch you tell it to target [\#1174](https://github.com/kivy/python-for-android/issues/1174)
- The webview bootstrap does not support gradle [\#1172](https://github.com/kivy/python-for-android/issues/1172)
- 0.6 release checklist [\#1170](https://github.com/kivy/python-for-android/issues/1170)
- python 2.7 compile with NDK 15c [\#1169](https://github.com/kivy/python-for-android/issues/1169)
- Reopen running instance instead of starting a new one upon tapping app icon [\#1161](https://github.com/kivy/python-for-android/issues/1161)
- python3 incompatibility [\#1154](https://github.com/kivy/python-for-android/issues/1154)
- ffi.h: No such file or directory \(solutions included\) [\#1148](https://github.com/kivy/python-for-android/issues/1148)
- After building FFMpeg recipe, I still am not able to do ffmpeg -v [\#1146](https://github.com/kivy/python-for-android/issues/1146)
- Kivy/Buildozer/Psycopg2 [\#1144](https://github.com/kivy/python-for-android/issues/1144)
- SDL Error: Error Could not load any libpythonXXX.so [\#1142](https://github.com/kivy/python-for-android/issues/1142)
- Can't build numpy with current master, python 2, NDK 15 [\#1141](https://github.com/kivy/python-for-android/issues/1141)
- pyopenssl cryptography dependence [\#1127](https://github.com/kivy/python-for-android/issues/1127)
- Check if SDL2 libraries are up to date [\#1126](https://github.com/kivy/python-for-android/issues/1126)
- bind recipes to well defined versions [\#1115](https://github.com/kivy/python-for-android/issues/1115)
- pil and pillow modules for python3 [\#1114](https://github.com/kivy/python-for-android/issues/1114)
- Kivy python android build issue? [\#1110](https://github.com/kivy/python-for-android/issues/1110)
- simple flask app on android fails to start [\#1108](https://github.com/kivy/python-for-android/issues/1108)
- "crystax\_python does not exist" with python3crystax [\#1105](https://github.com/kivy/python-for-android/issues/1105)
- Running on Android 4.0 doesn't work when building for target api 19 [\#1104](https://github.com/kivy/python-for-android/issues/1104)
- Can't type anything into textinput using new toolchain [\#1102](https://github.com/kivy/python-for-android/issues/1102)
- "android" recipe isn't compatible with Python 3 [\#1093](https://github.com/kivy/python-for-android/issues/1093)
- Recipe does not exist: matplotlib [\#1090](https://github.com/kivy/python-for-android/issues/1090)
- Django App is not running. Web View does not load it [\#1083](https://github.com/kivy/python-for-android/issues/1083)
- Android 7 complains about Kivy 1.10.0 apps: "detected problems with app native libraries" [\#1078](https://github.com/kivy/python-for-android/issues/1078)
- Numpy recipe broken \(atlas, blas, lapack, -lcrystax\) [\#1074](https://github.com/kivy/python-for-android/issues/1074)
- requests module not compiling in buildozer when used with Python3crystax [\#1072](https://github.com/kivy/python-for-android/issues/1072)
- ImportError: No module named audioop [\#1067](https://github.com/kivy/python-for-android/issues/1067)
- sqlite3 not working with android\_new [\#1053](https://github.com/kivy/python-for-android/issues/1053)
- dlopen failed: python2.7/site-packages/grpc/\_cython/cygrpc.so not 32-bit: 2 [\#1052](https://github.com/kivy/python-for-android/issues/1052)
- Can't start service app [\#1049](https://github.com/kivy/python-for-android/issues/1049)
- Cannot build APK with python3crystax and flask - conflicting dependencies [\#1041](https://github.com/kivy/python-for-android/issues/1041)
- Slow build process since sh 1.12.5 [\#1038](https://github.com/kivy/python-for-android/issues/1038)
- Python3 + PyYaml conflict [\#1031](https://github.com/kivy/python-for-android/issues/1031)
- Can't write ti SD-card on Android 6.0.1 [\#1024](https://github.com/kivy/python-for-android/issues/1024)
- pygame\_sdl2 compile failure \# include \<iconv.h\> [\#1023](https://github.com/kivy/python-for-android/issues/1023)
- Build error on Mac: no archive symbol table \(run ranlib\) [\#1012](https://github.com/kivy/python-for-android/issues/1012)
- Shouldn't P4A Raise Exception On User File Having Syntax Error [\#1009](https://github.com/kivy/python-for-android/issues/1009)
- jnius is not working with webview bootstrap [\#1003](https://github.com/kivy/python-for-android/issues/1003)
- Built APK fails with ImportError: dlopen failed on \_clock.so [\#998](https://github.com/kivy/python-for-android/issues/998)
- apk not build using crystax NDK [\#992](https://github.com/kivy/python-for-android/issues/992)
- Create a space for common bootstrap code along with a base class for all bootstraps [\#988](https://github.com/kivy/python-for-android/issues/988)
- Unpacking and copying app contents causes app to appear hung [\#983](https://github.com/kivy/python-for-android/issues/983)
- kivy app crashing on launch [\#982](https://github.com/kivy/python-for-android/issues/982)
- Android Emulator support [\#979](https://github.com/kivy/python-for-android/issues/979)
- Kivy with SDL2 bootstrap crashes on pausing if app doesn't support pause mode [\#978](https://github.com/kivy/python-for-android/issues/978)
- sqlite3 recipe not working with new toolchain [\#977](https://github.com/kivy/python-for-android/issues/977)
- lxml is needed in new toolchain [\#976](https://github.com/kivy/python-for-android/issues/976)
- P4A wants to start "ant" without using full SDK path [\#974](https://github.com/kivy/python-for-android/issues/974)
- API automatic lookup doesn't use available SDK API [\#973](https://github.com/kivy/python-for-android/issues/973)
- JNI ERROR \(app bug\): local reference table overflow \(max=512\) [\#971](https://github.com/kivy/python-for-android/issues/971)
- Kivy with SDL2 bootstrap crushes on resuming in some cases [\#967](https://github.com/kivy/python-for-android/issues/967)
- Could not ping localhost:5000 [\#961](https://github.com/kivy/python-for-android/issues/961)
- Not a valid ELF executable [\#957](https://github.com/kivy/python-for-android/issues/957)
- How to completely remove installed app? [\#953](https://github.com/kivy/python-for-android/issues/953)
- ImportError android [\#943](https://github.com/kivy/python-for-android/issues/943)
- Older android version can't load libraries properly [\#925](https://github.com/kivy/python-for-android/issues/925)
- sed: 1: "Modules/Setup.local": invalid command code M [\#924](https://github.com/kivy/python-for-android/issues/924)
- Python3: armeabi used to copy, but armeabi-v7a chosen [\#913](https://github.com/kivy/python-for-android/issues/913)
- ImportError for sqlite3 [\#910](https://github.com/kivy/python-for-android/issues/910)
- PyGame backend: error while using android.copy\_libs = 1 [\#888](https://github.com/kivy/python-for-android/issues/888)
- pytz installation works, but requires user to make build folder manually [\#884](https://github.com/kivy/python-for-android/issues/884)
- Numpy support w/ python3crystax [\#882](https://github.com/kivy/python-for-android/issues/882)
- Scipy recipe [\#874](https://github.com/kivy/python-for-android/issues/874)
- opencv recipe build error [\#871](https://github.com/kivy/python-for-android/issues/871)
- Flask with Python3 does not seem to work. [\#870](https://github.com/kivy/python-for-android/issues/870)
- p4a generates deprecated code under Android API 23 [\#864](https://github.com/kivy/python-for-android/issues/864)
- Kivy builds failing [\#861](https://github.com/kivy/python-for-android/issues/861)
- error when running an apk compiled with python3crystax [\#859](https://github.com/kivy/python-for-android/issues/859)
- my application using ctypes crashes on Kivy 1.9.2 and not on 1.8 [\#858](https://github.com/kivy/python-for-android/issues/858)
- apk, built with openssl launch error: "libssl1.0.2h.so" not found [\#850](https://github.com/kivy/python-for-android/issues/850)
- Can't install on Windows using pip [\#819](https://github.com/kivy/python-for-android/issues/81
gitextract_039kc1dw/ ├── .coveragerc ├── .deepsource.toml ├── .dockerignore ├── .github/ │ ├── ISSUE_TEMPLATE.md │ └── workflows/ │ ├── custom-build.yml │ ├── docker.yml │ ├── no-response.yml │ ├── push.yml │ ├── pypi-release.yml │ └── support.yml ├── .gitignore ├── .projectile ├── .readthedocs.yaml ├── CHANGELOG.md ├── CODE_OF_CONDUCT.md ├── CONTACT.md ├── CONTRIBUTING.md ├── Dockerfile ├── FAQ.md ├── LICENSE ├── MANIFEST.in ├── Makefile ├── README.md ├── ci/ │ ├── __init__.py │ ├── constants.py │ ├── makefiles/ │ │ ├── android.mk │ │ └── osx.mk │ ├── rebuild_updated_recipes.py │ └── run_emulator_tests.sh ├── distribute.sh ├── doc/ │ ├── Makefile │ ├── make.bat │ ├── requirements.txt │ └── source/ │ ├── _static/ │ │ └── .empty │ ├── apis.rst │ ├── bootstraps.rst │ ├── buildoptions.rst │ ├── commands.rst │ ├── conf.py │ ├── contact.rst │ ├── contribute.rst │ ├── distutils.rst │ ├── docker.rst │ ├── faq.rst │ ├── index.rst │ ├── quickstart.rst │ ├── recipes.rst │ ├── services.rst │ ├── testing_pull_requests.rst │ └── troubleshooting.rst ├── pythonforandroid/ │ ├── __init__.py │ ├── androidndk.py │ ├── archs.py │ ├── bdistapk.py │ ├── bootstrap.py │ ├── bootstraps/ │ │ ├── __init__.py │ │ ├── _sdl_common/ │ │ │ ├── __init__.py │ │ │ └── build/ │ │ │ ├── .gitignore │ │ │ ├── blacklist.txt │ │ │ ├── jni/ │ │ │ │ └── Application.mk │ │ │ ├── src/ │ │ │ │ └── main/ │ │ │ │ ├── assets/ │ │ │ │ │ └── .gitkeep │ │ │ │ ├── java/ │ │ │ │ │ ├── .gitkeep │ │ │ │ │ └── org/ │ │ │ │ │ └── kivy/ │ │ │ │ │ └── android/ │ │ │ │ │ └── launcher/ │ │ │ │ │ ├── Project.java │ │ │ │ │ ├── ProjectAdapter.java │ │ │ │ │ └── ProjectChooser.java │ │ │ │ ├── jniLibs/ │ │ │ │ │ └── .gitkeep │ │ │ │ ├── libs/ │ │ │ │ │ └── .gitkeep │ │ │ │ └── res/ │ │ │ │ ├── drawable/ │ │ │ │ │ └── .gitkeep │ │ │ │ ├── layout/ │ │ │ │ │ ├── chooser_item.xml │ │ │ │ │ ├── main.xml │ │ │ │ │ ├── project_chooser.xml │ │ │ │ │ └── project_empty.xml │ │ │ │ ├── mipmap/ │ │ │ │ │ └── .gitkeep │ │ │ │ └── mipmap-anydpi-v26/ │ │ │ │ └── .gitkeep │ │ │ └── templates/ │ │ │ ├── AndroidManifest.tmpl.xml │ │ │ └── strings.tmpl.xml │ │ ├── build.gradle │ │ ├── common/ │ │ │ └── build/ │ │ │ ├── ant.properties │ │ │ ├── build.py │ │ │ ├── gradle/ │ │ │ │ └── wrapper/ │ │ │ │ ├── gradle-wrapper.jar │ │ │ │ └── gradle-wrapper.properties │ │ │ ├── gradlew │ │ │ ├── gradlew.bat │ │ │ ├── jni/ │ │ │ │ ├── Android.mk │ │ │ │ └── application/ │ │ │ │ ├── Android.mk │ │ │ │ └── src/ │ │ │ │ ├── Android.mk │ │ │ │ └── start.c │ │ │ ├── src/ │ │ │ │ └── main/ │ │ │ │ └── java/ │ │ │ │ └── org/ │ │ │ │ ├── kamranzafar/ │ │ │ │ │ └── jtar/ │ │ │ │ │ ├── Octal.java │ │ │ │ │ ├── TarConstants.java │ │ │ │ │ ├── TarEntry.java │ │ │ │ │ ├── TarHeader.java │ │ │ │ │ ├── TarInputStream.java │ │ │ │ │ ├── TarOutputStream.java │ │ │ │ │ └── TarUtils.java │ │ │ │ ├── kivy/ │ │ │ │ │ └── android/ │ │ │ │ │ ├── GenericBroadcastReceiver.java │ │ │ │ │ ├── GenericBroadcastReceiverCallback.java │ │ │ │ │ ├── PythonService.java │ │ │ │ │ └── PythonUtil.java │ │ │ │ └── renpy/ │ │ │ │ └── android/ │ │ │ │ ├── AssetExtract.java │ │ │ │ ├── Hardware.java │ │ │ │ └── ResourceManager.java │ │ │ ├── templates/ │ │ │ │ ├── Service.tmpl.java │ │ │ │ ├── build.properties │ │ │ │ ├── build.tmpl.gradle │ │ │ │ ├── build.tmpl.xml │ │ │ │ ├── custom_rules.tmpl.xml │ │ │ │ ├── gradle.tmpl.properties │ │ │ │ └── lottie.xml │ │ │ └── whitelist.txt │ │ ├── empty/ │ │ │ ├── __init__.py │ │ │ └── build/ │ │ │ └── .gitkeep │ │ ├── gradle.properties │ │ ├── qt/ │ │ │ ├── __init__.py │ │ │ └── build/ │ │ │ ├── .gitignore │ │ │ ├── blacklist.txt │ │ │ ├── jni/ │ │ │ │ ├── Application.mk │ │ │ │ └── application/ │ │ │ │ └── src/ │ │ │ │ ├── Android.mk │ │ │ │ ├── Android_static.mk │ │ │ │ └── bootstrap_name.h │ │ │ ├── src/ │ │ │ │ └── main/ │ │ │ │ ├── assets/ │ │ │ │ │ └── .gitkeep │ │ │ │ ├── java/ │ │ │ │ │ ├── .gitkeep │ │ │ │ │ └── org/ │ │ │ │ │ └── kivy/ │ │ │ │ │ └── android/ │ │ │ │ │ └── PythonActivity.java │ │ │ │ ├── jniLibs/ │ │ │ │ │ └── .gitkeep │ │ │ │ ├── libs/ │ │ │ │ │ └── .gitkeep │ │ │ │ └── res/ │ │ │ │ ├── drawable/ │ │ │ │ │ └── .gitkeep │ │ │ │ └── mipmap/ │ │ │ │ └── .gitkeep │ │ │ └── templates/ │ │ │ ├── AndroidManifest.tmpl.xml │ │ │ ├── libs.tmpl.xml │ │ │ └── strings.tmpl.xml │ │ ├── sdl2/ │ │ │ ├── __init__.py │ │ │ └── build/ │ │ │ ├── jni/ │ │ │ │ └── application/ │ │ │ │ └── src/ │ │ │ │ ├── Android.mk │ │ │ │ ├── Android_static.mk │ │ │ │ └── bootstrap_name.h │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ └── java/ │ │ │ │ ├── .gitkeep │ │ │ │ └── org/ │ │ │ │ └── kivy/ │ │ │ │ └── android/ │ │ │ │ └── PythonActivity.java │ │ │ └── patches/ │ │ │ ├── SDLActivity.java.patch │ │ │ └── SDLSurface.java.patch │ │ ├── sdl3/ │ │ │ ├── __init__.py │ │ │ └── build/ │ │ │ ├── jni/ │ │ │ │ └── application/ │ │ │ │ └── src/ │ │ │ │ ├── Android.mk │ │ │ │ ├── Android_static.mk │ │ │ │ └── bootstrap_name.h │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ └── java/ │ │ │ │ └── org/ │ │ │ │ └── kivy/ │ │ │ │ └── android/ │ │ │ │ └── PythonActivity.java │ │ │ └── patches/ │ │ │ ├── SDLActivity.java.patch │ │ │ └── SDLSurface.java.patch │ │ ├── service_library/ │ │ │ ├── __init__.py │ │ │ └── build/ │ │ │ ├── jni/ │ │ │ │ ├── Application.mk │ │ │ │ └── application/ │ │ │ │ └── src/ │ │ │ │ └── bootstrap_name.h │ │ │ ├── src/ │ │ │ │ └── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── kivy/ │ │ │ │ │ └── android/ │ │ │ │ │ └── PythonActivity.java │ │ │ │ └── res/ │ │ │ │ └── mipmap/ │ │ │ │ └── .gitkeep │ │ │ └── templates/ │ │ │ ├── AndroidManifest.tmpl.xml │ │ │ └── Service.tmpl.java │ │ ├── service_only/ │ │ │ ├── __init__.py │ │ │ └── build/ │ │ │ ├── blacklist.txt │ │ │ ├── jni/ │ │ │ │ ├── Android.mk │ │ │ │ ├── Application.mk │ │ │ │ └── application/ │ │ │ │ └── src/ │ │ │ │ ├── Android.mk │ │ │ │ ├── Android_static.mk │ │ │ │ ├── bootstrap_name.h │ │ │ │ └── pyjniusjni.c │ │ │ ├── src/ │ │ │ │ └── main/ │ │ │ │ ├── assets/ │ │ │ │ │ └── .gitkeep │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── kivy/ │ │ │ │ │ └── android/ │ │ │ │ │ └── PythonActivity.java │ │ │ │ ├── jniLibs/ │ │ │ │ │ └── .gitkeep │ │ │ │ └── res/ │ │ │ │ ├── drawable/ │ │ │ │ │ └── .gitkeep │ │ │ │ └── mipmap/ │ │ │ │ └── .gitkeep │ │ │ └── templates/ │ │ │ ├── AndroidManifest.tmpl.xml │ │ │ ├── Service.tmpl.java │ │ │ └── strings.tmpl.xml │ │ ├── settings.gradle │ │ └── webview/ │ │ ├── __init__.py │ │ └── build/ │ │ ├── blacklist.txt │ │ ├── jni/ │ │ │ ├── Android.mk │ │ │ ├── Application.mk │ │ │ └── application/ │ │ │ └── src/ │ │ │ ├── Android.mk │ │ │ ├── Android_static.mk │ │ │ ├── bootstrap_name.h │ │ │ └── pyjniusjni.c │ │ ├── proguard-project.txt │ │ ├── src/ │ │ │ └── main/ │ │ │ ├── assets/ │ │ │ │ └── .gitkeep │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── kivy/ │ │ │ │ └── android/ │ │ │ │ └── PythonActivity.java │ │ │ ├── jniLibs/ │ │ │ │ └── .gitkeep │ │ │ └── res/ │ │ │ ├── drawable/ │ │ │ │ └── .gitkeep │ │ │ ├── layout/ │ │ │ │ └── main.xml │ │ │ ├── mipmap/ │ │ │ │ └── .gitkeep │ │ │ ├── mipmap-anydpi-v26/ │ │ │ │ └── .gitkeep │ │ │ └── values/ │ │ │ └── strings.xml │ │ ├── templates/ │ │ │ ├── AndroidManifest.tmpl.xml │ │ │ ├── WebViewLoader.tmpl.java │ │ │ ├── strings.tmpl.xml │ │ │ └── test/ │ │ │ ├── build.tmpl.xml │ │ │ └── build.xml.tmpl │ │ └── webview_includes/ │ │ ├── _load.html │ │ └── _loading_style.css │ ├── build.py │ ├── checkdependencies.py │ ├── distribution.py │ ├── entrypoints.py │ ├── graph.py │ ├── includes/ │ │ └── arm64-v8a/ │ │ └── machine/ │ │ └── cpu-features.h │ ├── logger.py │ ├── patching.py │ ├── prerequisites.py │ ├── pythonpackage.py │ ├── recipe.py │ ├── recipes/ │ │ ├── Pillow/ │ │ │ ├── __init__.py │ │ │ └── setup.py.patch │ │ ├── __init__.py │ │ ├── aiohttp/ │ │ │ └── __init__.py │ │ ├── android/ │ │ │ ├── __init__.py │ │ │ └── src/ │ │ │ ├── android/ │ │ │ │ ├── __init__.py │ │ │ │ ├── _android.pyx │ │ │ │ ├── _android_billing.pyx │ │ │ │ ├── _android_billing_jni.c │ │ │ │ ├── _android_jni.c │ │ │ │ ├── _android_sound.pyx │ │ │ │ ├── _android_sound_jni.c │ │ │ │ ├── _ctypes_library_finder.py │ │ │ │ ├── activity.py │ │ │ │ ├── billing.py │ │ │ │ ├── broadcast.py │ │ │ │ ├── display_cutout.py │ │ │ │ ├── loadingscreen.py │ │ │ │ ├── mixer.py │ │ │ │ ├── permissions.py │ │ │ │ ├── runnable.py │ │ │ │ ├── storage.py │ │ │ │ └── touch.py │ │ │ └── setup.py │ │ ├── apsw/ │ │ │ └── __init__.py │ │ ├── argon2-cffi/ │ │ │ └── __init__.py │ │ ├── atom/ │ │ │ ├── __init__.py │ │ │ └── pyproject.toml.patch │ │ ├── aubio/ │ │ │ └── __init__.py │ │ ├── audiostream/ │ │ │ └── __init__.py │ │ ├── av/ │ │ │ ├── __init__.py │ │ │ └── patches/ │ │ │ └── compilation_syntax_errors.patch │ │ ├── av_codecs/ │ │ │ └── __init__.py │ │ ├── bcrypt/ │ │ │ └── __init__.py │ │ ├── bitarray/ │ │ │ └── __init__.py │ │ ├── boost/ │ │ │ ├── __init__.py │ │ │ ├── disable-so-version.patch │ │ │ ├── fix-android-issues.patch │ │ │ ├── use-android-libs.patch │ │ │ └── user-config.jam │ │ ├── brokenrecipe/ │ │ │ └── __init__.py │ │ ├── cffi/ │ │ │ ├── __init__.py │ │ │ └── disable-pkg-config.patch │ │ ├── coincurve/ │ │ │ ├── __init__.py │ │ │ └── coincurve.patch │ │ ├── coverage/ │ │ │ ├── __init__.py │ │ │ └── fallback-utf8.patch │ │ ├── cryptography/ │ │ │ └── __init__.py │ │ ├── cymunk/ │ │ │ └── __init__.py │ │ ├── cython/ │ │ │ └── __init__.py │ │ ├── decorator/ │ │ │ └── __init__.py │ │ ├── enaml/ │ │ │ ├── 0001-Update-setup.py.patch │ │ │ └── __init__.py │ │ ├── ethash/ │ │ │ └── __init__.py │ │ ├── evdev/ │ │ │ ├── __init__.py │ │ │ ├── evcnt.patch │ │ │ ├── evdev-permissions.patch │ │ │ ├── include-dir.patch │ │ │ ├── keycnt.patch │ │ │ └── remove-uinput.patch │ │ ├── feedparser/ │ │ │ └── __init__.py │ │ ├── ffmpeg/ │ │ │ ├── __init__.py │ │ │ └── patches/ │ │ │ ├── backport-Android15-MediaCodec-fix.patch │ │ │ └── configure.patch │ │ ├── ffpyplayer/ │ │ │ ├── __init__.py │ │ │ └── setup.py.patch │ │ ├── ffpyplayer_codecs/ │ │ │ └── __init__.py │ │ ├── flask/ │ │ │ └── __init__.py │ │ ├── fontconfig/ │ │ │ └── __init__.py │ │ ├── fortran/ │ │ │ └── __init__.py │ │ ├── freetype/ │ │ │ └── __init__.py │ │ ├── freetype-py/ │ │ │ ├── __init__.py │ │ │ └── fix_import.patch │ │ ├── genericndkbuild/ │ │ │ └── __init__.py │ │ ├── gevent/ │ │ │ ├── __init__.py │ │ │ └── cross_compiling.patch │ │ ├── greenlet/ │ │ │ └── __init__.py │ │ ├── groestlcoin_hash/ │ │ │ └── __init__.py │ │ ├── grpcio/ │ │ │ ├── __init__.py │ │ │ ├── comment-getserverbyport-r-args.patch │ │ │ ├── remove-android-log-write.patch │ │ │ └── use-ndk-zlib-and-openssl-recipe-include.patch │ │ ├── harfbuzz/ │ │ │ └── __init__.py │ │ ├── hostpython3/ │ │ │ ├── __init__.py │ │ │ └── fix_ensurepip.patch │ │ ├── httpx/ │ │ │ └── __init__.py │ │ ├── icu/ │ │ │ ├── __init__.py │ │ │ └── disable-libs-version.patch │ │ ├── ifaddr/ │ │ │ ├── __init__.py │ │ │ └── getifaddrs.patch │ │ ├── ifaddrs/ │ │ │ └── __init__.py │ │ ├── jedi/ │ │ │ ├── __init__.py │ │ │ └── fix_MergedNamesDict_get.patch │ │ ├── jpeg/ │ │ │ ├── Application.mk │ │ │ ├── __init__.py │ │ │ ├── build-static.patch │ │ │ └── remove-version.patch │ │ ├── kivy/ │ │ │ ├── __init__.py │ │ │ ├── no-ast-str.patch │ │ │ ├── sdl-gl-swapwindow-nogil.patch │ │ │ └── use_cython.patch │ │ ├── kivy3/ │ │ │ └── __init__.py │ │ ├── kiwisolver/ │ │ │ └── __init__.py │ │ ├── leveldb/ │ │ │ └── __init__.py │ │ ├── libbz2/ │ │ │ ├── __init__.py │ │ │ └── lib_android.patch │ │ ├── libcairo/ │ │ │ ├── __init__.py │ │ │ └── meson.patch │ │ ├── libcurl/ │ │ │ └── __init__.py │ │ ├── libexpat/ │ │ │ └── __init__.py │ │ ├── libffi/ │ │ │ ├── Application.mk │ │ │ ├── __init__.py │ │ │ ├── disable-mips-check.patch │ │ │ └── remove-version-info.patch │ │ ├── libgeos/ │ │ │ └── __init__.py │ │ ├── libglob/ │ │ │ ├── __init__.py │ │ │ └── glob.patch │ │ ├── libiconv/ │ │ │ └── __init__.py │ │ ├── liblzma/ │ │ │ └── __init__.py │ │ ├── libogg/ │ │ │ └── __init__.py │ │ ├── libopenblas/ │ │ │ └── __init__.py │ │ ├── libpcre/ │ │ │ └── __init__.py │ │ ├── libpq/ │ │ │ └── __init__.py │ │ ├── libpthread/ │ │ │ └── __init__.py │ │ ├── librt/ │ │ │ └── __init__.py │ │ ├── libsecp256k1/ │ │ │ └── __init__.py │ │ ├── libshine/ │ │ │ └── __init__.py │ │ ├── libsodium/ │ │ │ ├── __init__.py │ │ │ └── size_max_fix.patch │ │ ├── libtorrent/ │ │ │ ├── __init__.py │ │ │ ├── disable-so-version.patch │ │ │ ├── setup-lib-name.patch │ │ │ ├── use-soname-python.patch │ │ │ └── user-config-openssl.patch │ │ ├── libtribler/ │ │ │ └── __init__.py │ │ ├── libvorbis/ │ │ │ └── __init__.py │ │ ├── libvpx/ │ │ │ ├── __init__.py │ │ │ └── patches/ │ │ │ └── 0001-android-force-neon-runtime.patch │ │ ├── libwebp/ │ │ │ └── __init__.py │ │ ├── libx264/ │ │ │ └── __init__.py │ │ ├── libxml2/ │ │ │ ├── __init__.py │ │ │ ├── add-glob.c.patch │ │ │ ├── glob.c │ │ │ └── glob.h │ │ ├── libxslt/ │ │ │ ├── __init__.py │ │ │ └── fix-dlopen.patch │ │ ├── libzbar/ │ │ │ ├── __init__.py │ │ │ └── werror.patch │ │ ├── libzmq/ │ │ │ └── __init__.py │ │ ├── lxml/ │ │ │ └── __init__.py │ │ ├── m2crypto/ │ │ │ └── __init__.py │ │ ├── materialyoucolor/ │ │ │ └── __init__.py │ │ ├── matplotlib/ │ │ │ ├── __init__.py │ │ │ └── meson.patch │ │ ├── moderngl/ │ │ │ └── __init__.py │ │ ├── msgpack-python/ │ │ │ └── __init__.py │ │ ├── ndghttpsclient │ │ ├── netifaces/ │ │ │ ├── __init__.py │ │ │ └── fix-build.patch │ │ ├── numpy/ │ │ │ └── __init__.py │ │ ├── omemo/ │ │ │ └── __init__.py │ │ ├── omemo-backend-signal/ │ │ │ └── __init__.py │ │ ├── openal/ │ │ │ └── __init__.py │ │ ├── opencv/ │ │ │ ├── __init__.py │ │ │ └── patches/ │ │ │ └── p4a_build.patch │ │ ├── opencv_extras/ │ │ │ └── __init__.py │ │ ├── openssl/ │ │ │ └── __init__.py │ │ ├── pandas/ │ │ │ ├── __init__.py │ │ │ └── fix_numpy_includes.patch │ │ ├── pil/ │ │ │ └── __init__.py │ │ ├── png/ │ │ │ ├── __init__.py │ │ │ └── build_shared_library.patch │ │ ├── preppy/ │ │ │ ├── __init__.py │ │ │ └── fix-setup.patch │ │ ├── primp/ │ │ │ └── __init__.py │ │ ├── protobuf_cpp/ │ │ │ ├── __init__.py │ │ │ └── fix-python3-compatibility.patch │ │ ├── psycopg2/ │ │ │ └── __init__.py │ │ ├── py3dns/ │ │ │ ├── __init__.py │ │ │ └── patches/ │ │ │ └── android.patch │ │ ├── pyaml/ │ │ │ └── __init__.py │ │ ├── pybind11/ │ │ │ └── __init__.py │ │ ├── pycairo/ │ │ │ ├── __init__.py │ │ │ └── meson.patch │ │ ├── pycparser/ │ │ │ └── __init__.py │ │ ├── pycrypto/ │ │ │ ├── __init__.py │ │ │ └── add_length.patch │ │ ├── pycryptodome/ │ │ │ └── __init__.py │ │ ├── pydantic-core/ │ │ │ └── __init__.py │ │ ├── pygame/ │ │ │ └── __init__.py │ │ ├── pyicu/ │ │ │ ├── __init__.py │ │ │ └── locale.patch │ │ ├── pyjnius/ │ │ │ ├── __init__.py │ │ │ ├── genericndkbuild_jnienv_getter.patch │ │ │ ├── sdl3_jnienv_getter.patch │ │ │ └── use_cython.patch │ │ ├── pyleveldb/ │ │ │ ├── __init__.py │ │ │ └── bindings-only.patch │ │ ├── pymunk/ │ │ │ └── __init__.py │ │ ├── pynacl/ │ │ │ └── __init__.py │ │ ├── pyogg/ │ │ │ ├── __init__.py │ │ │ └── patches/ │ │ │ └── fix-find-lib.patch │ │ ├── pyopenal/ │ │ │ ├── __init__.py │ │ │ └── patches/ │ │ │ └── fix-find-lib.patch │ │ ├── pyopenssl/ │ │ │ ├── __init__.py │ │ │ └── fix-dlfcn.patch │ │ ├── pyproj/ │ │ │ └── __init__.py │ │ ├── pyrxp/ │ │ │ └── __init__.py │ │ ├── pysdl2/ │ │ │ └── __init__.py │ │ ├── pysha3/ │ │ │ └── __init__.py │ │ ├── python3/ │ │ │ ├── __init__.py │ │ │ └── patches/ │ │ │ ├── 3.14_armv7l_fix.patch │ │ │ ├── 3.14_fix_remote_debug.patch │ │ │ ├── cpython-311-ctypes-find-library.patch │ │ │ ├── py3.7.1_fix-ctypes-util-find-library.patch │ │ │ ├── py3.7.1_fix-zlib-version.patch │ │ │ ├── py3.7.1_fix_cortex_a8.patch │ │ │ ├── py3.8.1.patch │ │ │ ├── py3.8.1_fix_cortex_a8.patch │ │ │ ├── pyconfig_detection.patch │ │ │ └── reproducible-buildinfo.diff │ │ ├── pyusb/ │ │ │ ├── __init__.py │ │ │ └── fix-android.patch │ │ ├── pyzbar/ │ │ │ └── __init__.py │ │ ├── pyzmq/ │ │ │ └── __init__.py │ │ ├── regex/ │ │ │ └── __init__.py │ │ ├── reportlab/ │ │ │ ├── __init__.py │ │ │ └── patches/ │ │ │ └── fix-setup.patch │ │ ├── ruamel.yaml/ │ │ │ ├── __init__.py │ │ │ └── disable-pip-req.patch │ │ ├── scipy/ │ │ │ ├── __init__.py │ │ │ ├── meson.patch │ │ │ └── wrapper.py │ │ ├── scrypt/ │ │ │ ├── __init__.py │ │ │ └── remove_librt.patch │ │ ├── sdl2/ │ │ │ └── __init__.py │ │ ├── sdl2_image/ │ │ │ ├── __init__.py │ │ │ └── enable-webp.patch │ │ ├── sdl2_mixer/ │ │ │ └── __init__.py │ │ ├── sdl2_ttf/ │ │ │ └── __init__.py │ │ ├── sdl3/ │ │ │ └── __init__.py │ │ ├── sdl3_image/ │ │ │ ├── __init__.py │ │ │ └── enable-webp.patch │ │ ├── sdl3_mixer/ │ │ │ ├── __init__.py │ │ │ └── disable-libgme.patch │ │ ├── sdl3_ttf/ │ │ │ └── __init__.py │ │ ├── secp256k1/ │ │ │ ├── __init__.py │ │ │ ├── cross_compile.patch │ │ │ ├── drop_setup_requires.patch │ │ │ ├── find_lib.patch │ │ │ ├── no-download.patch │ │ │ └── pkg-config.patch │ │ ├── setuptools/ │ │ │ └── __init__.py │ │ ├── shapely/ │ │ │ ├── __init__.py │ │ │ └── setup.patch │ │ ├── snappy/ │ │ │ └── __init__.py │ │ ├── spine/ │ │ │ └── __init__.py │ │ ├── sqlalchemy/ │ │ │ └── __init__.py │ │ ├── sqlite3/ │ │ │ └── __init__.py │ │ ├── storm/ │ │ │ └── __init__.py │ │ ├── tflite-runtime/ │ │ │ ├── CMakeLists.patch │ │ │ ├── __init__.py │ │ │ └── build_with_cmake.patch │ │ ├── tiktoken/ │ │ │ └── __init__.py │ │ ├── twisted/ │ │ │ ├── __init__.py │ │ │ ├── incremental.patch │ │ │ └── remove_tests.patch │ │ ├── ujson/ │ │ │ └── __init__.py │ │ ├── uvloop/ │ │ │ └── __init__.py │ │ ├── vispy/ │ │ │ ├── __init__.py │ │ │ ├── disable_font_triage.patch │ │ │ ├── disable_freetype.patch │ │ │ ├── disable_freetype.patch_backup │ │ │ ├── remove_ati_check.patch │ │ │ └── use_es2.patch │ │ ├── vlc/ │ │ │ └── __init__.py │ │ ├── wsaccel/ │ │ │ └── __init__.py │ │ ├── x3dh/ │ │ │ ├── __init__.py │ │ │ └── requires_fix.patch │ │ ├── xeddsa/ │ │ │ ├── __init__.py │ │ │ └── remove_dependencies.patch │ │ ├── zbar/ │ │ │ ├── __init__.py │ │ │ └── zbar-0.10-python-crash.patch │ │ ├── zbarlight/ │ │ │ └── __init__.py │ │ ├── zeroconf/ │ │ │ ├── __init__.py │ │ │ └── patches/ │ │ │ └── setup.patch │ │ ├── zope/ │ │ │ └── __init__.py │ │ └── zope_interface/ │ │ ├── __init__.py │ │ ├── fix-init.patch │ │ └── no_tests.patch │ ├── recommendations.py │ ├── toolchain.py │ ├── tools/ │ │ ├── biglink │ │ ├── liblink │ │ └── liblink.sh │ └── util.py ├── setup.py ├── testapps/ │ ├── on_device_unit_tests/ │ │ ├── README.rst │ │ ├── buildozer.spec │ │ ├── setup.py │ │ ├── test_app/ │ │ │ ├── app_flask.py │ │ │ ├── app_kivy.py │ │ │ ├── app_service.py │ │ │ ├── constants.py │ │ │ ├── main.py │ │ │ ├── screen_keyboard.kv │ │ │ ├── screen_orientation.kv │ │ │ ├── screen_service.kv │ │ │ ├── screen_unittests.kv │ │ │ ├── static/ │ │ │ │ ├── Blanka-Regular.otf │ │ │ │ └── flask.css │ │ │ ├── templates/ │ │ │ │ ├── base.html │ │ │ │ ├── index.html │ │ │ │ ├── page2.html │ │ │ │ └── unittests.html │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── mixin.py │ │ │ │ └── test_requirements.py │ │ │ ├── tools.py │ │ │ ├── widgets.kv │ │ │ └── widgets.py │ │ └── test_qt/ │ │ ├── jar/ │ │ │ └── PySide6/ │ │ │ └── jar/ │ │ │ ├── Qt6Android.jar │ │ │ └── Qt6AndroidBindings.jar │ │ └── recipes/ │ │ ├── PySide6/ │ │ │ └── __init__.py │ │ └── shiboken6/ │ │ └── __init__.py │ ├── setup_testapp_python3_sqlite_openssl.py │ ├── setup_vispy.py │ ├── testapp_sqlite_openssl/ │ │ └── main.py │ ├── testapp_vispy/ │ │ └── main.py │ ├── testlauncher_setup/ │ │ └── sdl2.py │ └── testlauncherreboot_setup/ │ └── sdl2.py ├── tests/ │ ├── recipes/ │ │ ├── recipe_ctx.py │ │ ├── recipe_lib_test.py │ │ ├── test_freetype.py │ │ ├── test_gevent.py │ │ ├── test_harfbuzz.py │ │ ├── test_hostpython3.py │ │ ├── test_icu.py │ │ ├── test_jpeg.py │ │ ├── test_leveldb.py │ │ ├── test_libbz2.py │ │ ├── test_libcurl.py │ │ ├── test_libexpat.py │ │ ├── test_libffi.py │ │ ├── test_libgeos.py │ │ ├── test_libiconv.py │ │ ├── test_liblzma.py │ │ ├── test_libogg.py │ │ ├── test_libpq.py │ │ ├── test_libsecp256k1.py │ │ ├── test_libshine.py │ │ ├── test_libvorbis.py │ │ ├── test_libvpx.py │ │ ├── test_libx264.py │ │ ├── test_libxml2.py │ │ ├── test_libxslt.py │ │ ├── test_openal.py │ │ ├── test_openssl.py │ │ ├── test_pandas.py │ │ ├── test_png.py │ │ ├── test_pyicu.py │ │ ├── test_python3.py │ │ ├── test_reportlab.py │ │ ├── test_sdl2_mixer.py │ │ └── test_snappy.py │ ├── test_androidmodule_ctypes_finder.py │ ├── test_androidndk.py │ ├── test_archs.py │ ├── test_bdistapk.py │ ├── test_bootstrap.py │ ├── test_bootstrap_build.py │ ├── test_build.py │ ├── test_checkdependencies.py │ ├── test_distribution.py │ ├── test_entrypoints.py │ ├── test_graph.py │ ├── test_logger.py │ ├── test_patching.py │ ├── test_prerequisites.py │ ├── test_pythonpackage.py │ ├── test_pythonpackage_basic.py │ ├── test_recipe.py │ ├── test_recommendations.py │ ├── test_toolchain.py │ └── test_util.py └── tox.ini
SYMBOL INDEX (1933 symbols across 300 files)
FILE: ci/constants.py
class TargetPython (line 4) | class TargetPython(Enum):
FILE: ci/rebuild_updated_recipes.py
function modified_recipes (line 33) | def modified_recipes(branch='origin/develop'):
function build (line 50) | def build(target_python, requirements, archs):
function main (line 91) | def main():
FILE: doc/source/conf.py
function get_version (line 71) | def get_version():
FILE: pythonforandroid/androidndk.py
class AndroidNDK (line 5) | class AndroidNDK:
method __init__ (line 12) | def __init__(self, ndk_dir):
method host_tag (line 16) | def host_tag(self):
method llvm_prebuilt_dir (line 24) | def llvm_prebuilt_dir(self):
method llvm_bin_dir (line 30) | def llvm_bin_dir(self):
method clang (line 34) | def clang(self):
method clang_cxx (line 38) | def clang_cxx(self):
method llvm_binutils_prefix (line 42) | def llvm_binutils_prefix(self):
method llvm_ar (line 46) | def llvm_ar(self):
method llvm_ranlib (line 50) | def llvm_ranlib(self):
method llvm_objcopy (line 54) | def llvm_objcopy(self):
method llvm_objdump (line 58) | def llvm_objdump(self):
method llvm_readelf (line 62) | def llvm_readelf(self):
method llvm_strip (line 66) | def llvm_strip(self):
method llvm_nm (line 70) | def llvm_nm(self):
method sysroot (line 74) | def sysroot(self):
method sysroot_include_dir (line 78) | def sysroot_include_dir(self):
method sysroot_lib_dir (line 82) | def sysroot_lib_dir(self):
method libcxx_include_dir (line 86) | def libcxx_include_dir(self):
FILE: pythonforandroid/archs.py
class Arch (line 10) | class Arch:
method __init__ (line 43) | def __init__(self, ctx):
method __str__ (line 52) | def __str__(self):
method ndk_lib_dir (line 56) | def ndk_lib_dir(self):
method ndk_lib_dir_versioned (line 60) | def ndk_lib_dir_versioned(self):
method include_dirs (line 64) | def include_dirs(self):
method target (line 72) | def target(self):
method clang_exe (line 82) | def clang_exe(self):
method clang_exe_cxx (line 88) | def clang_exe_cxx(self):
method get_clang_exe (line 93) | def get_clang_exe(self, with_target=False, plus_plus=False):
method get_env (line 109) | def get_env(self, with_flags_in_cc=True):
class ArchARM (line 235) | class ArchARM(Arch):
method target (line 240) | def target(self):
class ArchARMv7_a (line 248) | class ArchARMv7_a(ArchARM):
class Archx86 (line 259) | class Archx86(Arch):
class Archx86_64 (line 271) | class Archx86_64(Arch):
class ArchAarch_64 (line 283) | class ArchAarch_64(Arch):
FILE: pythonforandroid/bdistapk.py
function argv_contains (line 10) | def argv_contains(t):
class Bdist (line 17) | class Bdist(Command):
method initialize_options (line 22) | def initialize_options(self):
method finalize_options (line 35) | def finalize_options(self):
method run (line 77) | def run(self):
method prepare_build_dir (line 84) | def prepare_build_dir(self):
class BdistAPK (line 131) | class BdistAPK(Bdist):
class BdistAAR (line 137) | class BdistAAR(Bdist):
class BdistAAB (line 143) | class BdistAAB(Bdist):
function _set_user_options (line 149) | def _set_user_options():
FILE: pythonforandroid/bootstrap.py
function copy_files (line 20) | def copy_files(src_root, dest_root, override=True, symlink=False):
function _cmp_bootstraps_by_priority (line 52) | def _cmp_bootstraps_by_priority(a, b):
class Bootstrap (line 72) | class Bootstrap:
method dist_dir (line 100) | def dist_dir(self):
method jni_dir (line 109) | def jni_dir(self):
method check_recipe_choices (line 112) | def check_recipe_choices(self):
method get_build_dir_name (line 126) | def get_build_dir_name(self):
method get_build_dir (line 131) | def get_build_dir(self):
method get_dist_dir (line 134) | def get_dist_dir(self, name):
method name (line 138) | def name(self):
method get_bootstrap_dirs (line 142) | def get_bootstrap_dirs(self):
method _copy_in_final_files (line 154) | def _copy_in_final_files(self):
method prepare_build_dir (line 171) | def prepare_build_dir(self):
method prepare_dist_dir (line 184) | def prepare_dist_dir(self):
method _assemble_distribution_for_arch (line 187) | def _assemble_distribution_for_arch(self, arch):
method assemble_distribution (line 204) | def assemble_distribution(self):
method all_bootstraps (line 237) | def all_bootstraps(cls):
method get_usable_bootstraps_for_recipes (line 251) | def get_usable_bootstraps_for_recipes(cls, recipes, ctx):
method get_bootstrap_from_recipes (line 294) | def get_bootstrap_from_recipes(cls, recipes, ctx):
method get_bootstrap (line 348) | def get_bootstrap(cls, name, ctx):
method distribute_libs (line 369) | def distribute_libs(self, arch, src_dirs, wildcard='*', dest_dir="libs"):
method distribute_javaclasses (line 379) | def distribute_javaclasses(self, javaclass_dir, dest_dir="src"):
method distribute_aars (line 386) | def distribute_aars(self, arch):
method _unpack_aar (line 392) | def _unpack_aar(self, aar, arch):
method strip_libraries (line 419) | def strip_libraries(self, arch):
method fry_eggs (line 441) | def fry_eggs(self, sitepackages):
function expand_dependencies (line 453) | def expand_dependencies(recipes, ctx):
FILE: pythonforandroid/bootstraps/_sdl_common/__init__.py
class SDLGradleBootstrap (line 7) | class SDLGradleBootstrap(Bootstrap):
method _assemble_distribution_for_arch (line 12) | def _assemble_distribution_for_arch(self, arch):
FILE: pythonforandroid/bootstraps/_sdl_common/build/src/main/java/org/kivy/android/launcher/Project.java
class Project (line 12) | public class Project {
method decode (line 20) | static String decode(String s) {
method scanDirectory (line 32) | public static Project scanDirectory(File dir) {
FILE: pythonforandroid/bootstraps/_sdl_common/build/src/main/java/org/kivy/android/launcher/ProjectAdapter.java
class ProjectAdapter (line 11) | public class ProjectAdapter extends ArrayAdapter<Project> {
method ProjectAdapter (line 15) | public ProjectAdapter(Activity context) {
method getView (line 20) | public View getView(int position, View convertView, ViewGroup parent) {
FILE: pythonforandroid/bootstraps/_sdl_common/build/src/main/java/org/kivy/android/launcher/ProjectChooser.java
class ProjectChooser (line 15) | public class ProjectChooser extends Activity implements AdapterView.OnIt...
method onStart (line 21) | @Override
method onItemClick (line 78) | public void onItemClick(AdapterView parent, View view, int position, l...
FILE: pythonforandroid/bootstraps/common/build/build.py
function get_dist_info_for (line 27) | def get_dist_info_for(key, error_if_missing=True):
function get_hostpython (line 41) | def get_hostpython():
function get_bootstrap_name (line 45) | def get_bootstrap_name():
function render (line 98) | def render(template, dest, **kwargs):
function is_whitelist (line 116) | def is_whitelist(name):
function is_blacklist (line 120) | def is_blacklist(name):
function match_filename (line 126) | def match_filename(pattern_list, name):
function listfiles (line 136) | def listfiles(d):
function make_tar (line 150) | def make_tar(tfn, source_dirs, byte_compile_python=False, optimize_pytho...
function compile_py_file (line 201) | def compile_py_file(python_file, optimize_python=True):
function is_sdl_bootstrap (line 224) | def is_sdl_bootstrap():
function make_package (line 228) | def make_package(args):
function parse_permissions (line 688) | def parse_permissions(args_permissions):
function get_sdl_orientation_hint (line 726) | def get_sdl_orientation_hint(orientations):
function get_manifest_orientation (line 738) | def get_manifest_orientation(orientations, manifest_orientation=None):
function get_dist_ndk_min_api_level (line 760) | def get_dist_ndk_min_api_level():
function create_argument_parser (line 772) | def create_argument_parser():
function parse_args_and_make_package (line 1006) | def parse_args_and_make_package(args=None):
FILE: pythonforandroid/bootstraps/common/build/jni/application/src/start.c
function LOGP (line 36) | static void LOGP(const char *fmt, ...) {
function PyObject (line 43) | static PyObject *androidembed_log(PyObject *self, PyObject *args) {
type PyModuleDef (line 57) | struct PyModuleDef
function PyMODINIT_FUNC (line 60) | PyMODINIT_FUNC initandroidembed(void) {
function PyMODINIT_FUNC (line 64) | PyMODINIT_FUNC initandroidembed(void) {
function dir_exists (line 69) | int dir_exists(char *filename) {
function file_exists (line 78) | int file_exists(const char *filename) {
function get_dirname (line 82) | static void get_dirname(const char *path, char *dir, size_t size) {
function get_exe_name (line 91) | static void get_exe_name(const char *filename, char *out, size_t size) {
type dirent (line 149) | struct dirent
type stat (line 170) | struct stat
function main (line 199) | int main(int argc, char *argv[]) {
function JNICALL (line 492) | JNICALL Java_org_kivy_android_PythonService_nativeStart(
function Java_org_kivy_android_PythonActivity_nativeSetenv (line 538) | void Java_org_kivy_android_PythonActivity_nativeSetenv(
function Java_org_kivy_android_PythonActivity_nativeInit (line 555) | void Java_org_kivy_android_PythonActivity_nativeInit(JNIEnv* env, jclass...
FILE: pythonforandroid/bootstraps/common/build/src/main/java/org/kamranzafar/jtar/Octal.java
class Octal (line 24) | public class Octal {
method parseOctal (line 39) | public static long parseOctal(byte[] header, int offset, int length) {
method getOctalBytes (line 77) | public static int getOctalBytes(long value, byte[] buf, int offset, in...
method getCheckSumOctalBytes (line 114) | public static int getCheckSumOctalBytes(long value, byte[] buf, int of...
method getLongOctalBytes (line 134) | public static int getLongOctalBytes(long value, byte[] buf, int offset...
FILE: pythonforandroid/bootstraps/common/build/src/main/java/org/kamranzafar/jtar/TarConstants.java
class TarConstants (line 24) | public class TarConstants {
FILE: pythonforandroid/bootstraps/common/build/src/main/java/org/kamranzafar/jtar/TarEntry.java
class TarEntry (line 27) | public class TarEntry {
method TarEntry (line 31) | private TarEntry() {
method TarEntry (line 36) | public TarEntry(File file, String entryName) {
method TarEntry (line 42) | public TarEntry(byte[] headerBuf) {
method TarEntry (line 56) | public TarEntry(TarHeader header) {
method equals (line 61) | public boolean equals(TarEntry it) {
method isDescendent (line 65) | public boolean isDescendent(TarEntry desc) {
method getHeader (line 69) | public TarHeader getHeader() {
method getName (line 73) | public String getName() {
method setName (line 82) | public void setName(String name) {
method getUserId (line 86) | public int getUserId() {
method setUserId (line 90) | public void setUserId(int userId) {
method getGroupId (line 94) | public int getGroupId() {
method setGroupId (line 98) | public void setGroupId(int groupId) {
method getUserName (line 102) | public String getUserName() {
method setUserName (line 106) | public void setUserName(String userName) {
method getGroupName (line 110) | public String getGroupName() {
method setGroupName (line 114) | public void setGroupName(String groupName) {
method setIds (line 118) | public void setIds(int userId, int groupId) {
method setModTime (line 123) | public void setModTime(long time) {
method setModTime (line 127) | public void setModTime(Date time) {
method getModTime (line 131) | public Date getModTime() {
method getFile (line 135) | public File getFile() {
method getSize (line 139) | public long getSize() {
method setSize (line 143) | public void setSize(long size) {
method isDirectory (line 152) | public boolean isDirectory() {
method extractTarHeader (line 172) | public void extractTarHeader(String entryName) {
method computeCheckSum (line 182) | public long computeCheckSum(byte[] buf) {
method writeEntryHeader (line 197) | public void writeEntryHeader(byte[] outbuf) {
method parseTarHeader (line 238) | public void parseTarHeader(byte[] bh) {
FILE: pythonforandroid/bootstraps/common/build/src/main/java/org/kamranzafar/jtar/TarHeader.java
class TarHeader (line 70) | public class TarHeader {
method TarHeader (line 125) | public TarHeader() {
method parseName (line 155) | public static StringBuffer parseName(byte[] header, int offset, int le...
method getNameBytes (line 180) | public static int getNameBytes(StringBuffer name, byte[] buf, int offs...
method createHeader (line 209) | public static TarHeader createHeader(String entryName, long size, long...
FILE: pythonforandroid/bootstraps/common/build/src/main/java/org/kamranzafar/jtar/TarInputStream.java
class TarInputStream (line 28) | public class TarInputStream extends FilterInputStream {
method TarInputStream (line 36) | public TarInputStream(InputStream in) {
method markSupported (line 42) | @Override
method mark (line 51) | @Override
method reset (line 59) | @Override
method read (line 69) | @Override
method read (line 89) | @Override
method getNextEntry (line 118) | public TarEntry getNextEntry() throws IOException {
method getCurrentOffset (line 157) | public long getCurrentOffset() {
method closeCurrentEntry (line 166) | protected void closeCurrentEntry() throws IOException {
method skipPad (line 194) | protected void skipPad() throws IOException {
method skip (line 213) | @Override
method isDefaultSkip (line 242) | public boolean isDefaultSkip() {
method setDefaultSkip (line 246) | public void setDefaultSkip(boolean defaultSkip) {
FILE: pythonforandroid/bootstraps/common/build/src/main/java/org/kamranzafar/jtar/TarOutputStream.java
class TarOutputStream (line 32) | public class TarOutputStream extends OutputStream {
method TarOutputStream (line 38) | public TarOutputStream(OutputStream out) {
method TarOutputStream (line 44) | public TarOutputStream(final File fout) throws FileNotFoundException {
method TarOutputStream (line 53) | public TarOutputStream(final File fout, final boolean append) throws I...
method close (line 68) | @Override
method write (line 79) | @Override
method write (line 94) | @Override
method putNextEntry (line 119) | public void putNextEntry(TarEntry entry) throws IOException {
method closeCurrentEntry (line 135) | protected void closeCurrentEntry() throws IOException {
method pad (line 154) | protected void pad() throws IOException {
FILE: pythonforandroid/bootstraps/common/build/src/main/java/org/kamranzafar/jtar/TarUtils.java
class TarUtils (line 26) | public class TarUtils {
method calculateTarSize (line 33) | public static long calculateTarSize(File path) {
method tarSize (line 37) | private static long tarSize(File dir) {
method entrySize (line 62) | private static long entrySize(long fileSize) {
method trim (line 76) | public static String trim(String s, char c) {
FILE: pythonforandroid/bootstraps/common/build/src/main/java/org/kivy/android/GenericBroadcastReceiver.java
class GenericBroadcastReceiver (line 7) | public class GenericBroadcastReceiver extends BroadcastReceiver {
method GenericBroadcastReceiver (line 11) | public GenericBroadcastReceiver(GenericBroadcastReceiverCallback liste...
method onReceive (line 16) | public void onReceive(Context context, Intent intent) {
FILE: pythonforandroid/bootstraps/common/build/src/main/java/org/kivy/android/GenericBroadcastReceiverCallback.java
type GenericBroadcastReceiverCallback (line 6) | public interface GenericBroadcastReceiverCallback {
method onReceive (line 7) | void onReceive(Context context, Intent intent);
FILE: pythonforandroid/bootstraps/common/build/src/main/java/org/kivy/android/PythonService.java
class PythonService (line 20) | public class PythonService extends Service implements Runnable {
method setAutoRestartService (line 40) | public void setAutoRestartService(boolean restart) {
method startType (line 44) | public int startType() {
method onBind (line 48) | @Override
method onCreate (line 53) | @Override
method onStartCommand (line 58) | @Override
method getServiceId (line 91) | protected int getServiceId() {
method getThisDefaultIntent (line 95) | protected Intent getThisDefaultIntent(Context ctx, String pythonServic...
method doStartForeground (line 99) | protected void doStartForeground(Bundle extras) {
method onDestroy (line 178) | @Override
method onTaskRemoved (line 193) | @Override
method run (line 202) | @Override
method nativeStart (line 220) | public static native void nativeStart(
FILE: pythonforandroid/bootstraps/common/build/src/main/java/org/kivy/android/PythonUtil.java
class PythonUtil (line 16) | public class PythonUtil {
method addLibraryIfExists (line 19) | protected static void addLibraryIfExists(
method getLibraries (line 39) | protected static ArrayList<String> getLibraries(File libsDir) {
method loadLibraries (line 70) | public static void loadLibraries(File filesDir, File libsDir) {
method getAppRoot (line 102) | public static String getAppRoot(Context ctx) {
method getResourceString (line 107) | public static String getResourceString(Context ctx, String name) {
method toastError (line 115) | protected static void toastError(final Activity activity, final String...
method recursiveDelete (line 132) | protected static void recursiveDelete(File f) {
method unpackAsset (line 141) | public static void unpackAsset(
method unpackPyBundle (line 204) | public static void unpackPyBundle(
FILE: pythonforandroid/bootstraps/common/build/src/main/java/org/renpy/android/AssetExtract.java
class AssetExtract (line 21) | public class AssetExtract {
method AssetExtract (line 25) | public AssetExtract(Context context) {
method extractTar (line 29) | public boolean extractTar(String asset, String target, String method) {
FILE: pythonforandroid/bootstraps/common/build/src/main/java/org/renpy/android/Hardware.java
class Hardware (line 26) | public class Hardware {
method vibrate (line 34) | public static void vibrate(double s) {
method getHardwareSensors (line 42) | public static String getHardwareSensors() {
class generic3AxisSensor (line 66) | public static class generic3AxisSensor implements SensorEventListener {
method generic3AxisSensor (line 72) | public generic3AxisSensor(int sensorType) {
method onAccuracyChanged (line 78) | public void onAccuracyChanged(Sensor sensor, int accuracy) {}
method onSensorChanged (line 80) | public void onSensorChanged(SensorEvent event) {
method changeStatus (line 85) | public void changeStatus(boolean enable) {
method readSensor (line 94) | public float[] readSensor() {
method accelerometerEnable (line 108) | public static void accelerometerEnable(boolean enable) {
method accelerometerReading (line 114) | public static float[] accelerometerReading() {
method orientationSensorEnable (line 119) | public static void orientationSensorEnable(boolean enable) {
method orientationSensorReading (line 125) | public static float[] orientationSensorReading() {
method magneticFieldSensorEnable (line 130) | public static void magneticFieldSensorEnable(boolean enable) {
method magneticFieldSensorReading (line 136) | public static float[] magneticFieldSensorReading() {
method getDPI (line 144) | public static int getDPI() {
method hideKeyboard (line 172) | public static void hideKeyboard() {
method enableWifiScanner (line 181) | public static void enableWifiScanner() {
method scanWifi (line 198) | public static String scanWifi() {
method checkNetwork (line 224) | public static boolean checkNetwork() {
method registerNetworkCheck (line 240) | public static void registerNetworkCheck() {
FILE: pythonforandroid/bootstraps/common/build/src/main/java/org/renpy/android/ResourceManager.java
class ResourceManager (line 12) | public class ResourceManager {
method ResourceManager (line 17) | public ResourceManager(Activity activity) {
method getIdentifier (line 22) | public int getIdentifier(String name, String kind) {
method getString (line 29) | public String getString(String name) {
method inflateView (line 40) | public View inflateView(String name) {
method getViewById (line 45) | public View getViewById(View v, String name) {
FILE: pythonforandroid/bootstraps/common/build/templates/Service.tmpl.java
class Service (line 8) | public class Service{{ name|capitalize }} extends {{ base_service_class ...
FILE: pythonforandroid/bootstraps/empty/__init__.py
class EmptyBootstrap (line 4) | class EmptyBootstrap(Bootstrap):
method assemble_distribution (line 11) | def assemble_distribution(self):
FILE: pythonforandroid/bootstraps/qt/__init__.py
class QtBootstrap (line 8) | class QtBootstrap(Bootstrap):
method assemble_distribution (line 17) | def assemble_distribution(self):
FILE: pythonforandroid/bootstraps/qt/build/src/main/java/org/kivy/android/PythonActivity.java
class PythonActivity (line 19) | public class PythonActivity extends QtActivity {
method getAppRoot (line 28) | public String getAppRoot() {
method getEntryPoint (line 33) | public String getEntryPoint(String search_dir) {
method setEnvironmentVariable (line 48) | public void setEnvironmentVariable(String key, String value) {
method onCreate (line 58) | @Override
method onDestroy (line 112) | @Override
method onKeyDown (line 123) | @Override
type NewIntentListener (line 141) | public interface NewIntentListener {
method onNewIntent (line 142) | void onNewIntent(Intent intent);
method registerNewIntentListener (line 147) | public void registerNewIntentListener(NewIntentListener listener) {
method unregisterNewIntentListener (line 154) | public void unregisterNewIntentListener(NewIntentListener listener) {
method onNewIntent (line 159) | @Override
type ActivityResultListener (line 175) | public interface ActivityResultListener {
method onActivityResult (line 176) | void onActivityResult(int requestCode, int resultCode, Intent data);
method registerActivityResultListener (line 181) | public void registerActivityResultListener(ActivityResultListener list...
method unregisterActivityResultListener (line 188) | public void unregisterActivityResultListener(ActivityResultListener li...
method onActivityResult (line 193) | @Override
method start_service (line 204) | public static void start_service(
method start_service_not_as_foreground (line 209) | public static void start_service_not_as_foreground(
method _do_start_service (line 214) | public static void _do_start_service(
method stop_service (line 237) | public static void stop_service() {
FILE: pythonforandroid/bootstraps/sdl2/__init__.py
class SDL2GradleBootstrap (line 4) | class SDL2GradleBootstrap(SDLGradleBootstrap):
FILE: pythonforandroid/bootstraps/sdl2/build/src/main/java/org/kivy/android/PythonActivity.java
class PythonActivity (line 38) | public class PythonActivity extends SDLActivity {
method getAppRoot (line 47) | public String getAppRoot() {
method onCreate (line 52) | @Override
method loadLibraries (line 67) | public void loadLibraries() {
method toastError (line 74) | public void toastError(final String msg) {
class UnpackFilesTask (line 94) | private class UnpackFilesTask extends AsyncTask<String, Void, String> {
method doInBackground (line 95) | @Override
method onPostExecute (line 108) | @Override
method onPreExecute (line 208) | @Override
method onProgressUpdate (line 211) | @Override
method getLayout (line 215) | public static ViewGroup getLayout() {
method getSurface (line 219) | public static SurfaceView getSurface() {
type NewIntentListener (line 227) | public interface NewIntentListener {
method onNewIntent (line 228) | void onNewIntent(Intent intent);
method registerNewIntentListener (line 233) | public void registerNewIntentListener(NewIntentListener listener) {
method unregisterNewIntentListener (line 240) | public void unregisterNewIntentListener(NewIntentListener listener) {
method onNewIntent (line 245) | @Override
type ActivityResultListener (line 261) | public interface ActivityResultListener {
method onActivityResult (line 262) | void onActivityResult(int requestCode, int resultCode, Intent data);
method registerActivityResultListener (line 267) | public void registerActivityResultListener(ActivityResultListener list...
method unregisterActivityResultListener (line 274) | public void unregisterActivityResultListener(ActivityResultListener li...
method onActivityResult (line 279) | @Override
method start_service (line 290) | public static void start_service(
method start_service_not_as_foreground (line 295) | public static void start_service_not_as_foreground(
method _do_start_service (line 300) | public static void _do_start_service(
method stop_service (line 323) | public static void stop_service() {
method sendCommand (line 341) | @Override
method appConfirmedActive (line 349) | @Override
method considerLoadingScreenRemoval (line 362) | public void considerLoadingScreenRemoval() {
method removeLoadingScreen (line 400) | public void removeLoadingScreen() {
method getEntryPoint (line 414) | public String getEntryPoint(String search_dir) {
method showLoadingScreen (line 429) | protected void showLoadingScreen(View view) {
method setBackgroundColor (line 444) | protected void setBackgroundColor(View view) {
method getLoadingScreen (line 464) | protected View getLoadingScreen() {
method onPause (line 524) | @Override
method onResume (line 539) | @Override
method onWindowFocusChanged (line 554) | @Override
type PermissionsCallback (line 569) | public interface PermissionsCallback {
method onRequestPermissionsResult (line 570) | void onRequestPermissionsResult(int requestCode, String[] permission...
method addPermissionsCallback (line 576) | public void addPermissionsCallback(PermissionsCallback callback) {
method onRequestPermissionsResult (line 582) | @Override
method checkCurrentPermission (line 594) | public boolean checkCurrentPermission(String permission) {
method requestPermissionsWithRequestCode (line 609) | public void requestPermissionsWithRequestCode(String[] permissions, in...
method requestPermissions (line 619) | public void requestPermissions(String[] permissions) {
method changeKeyboard (line 623) | public static void changeKeyboard(int inputType) {
FILE: pythonforandroid/bootstraps/sdl3/__init__.py
class SDL3GradleBootstrap (line 4) | class SDL3GradleBootstrap(SDLGradleBootstrap):
FILE: pythonforandroid/bootstraps/sdl3/build/src/main/java/org/kivy/android/PythonActivity.java
class PythonActivity (line 37) | public class PythonActivity extends SDLActivity {
method getAppRoot (line 46) | public String getAppRoot() {
method onCreate (line 51) | @Override
method loadLibraries (line 66) | public void loadLibraries() {
method toastError (line 73) | public void toastError(final String msg) {
class UnpackFilesTask (line 93) | private class UnpackFilesTask extends AsyncTask<String, Void, String> {
method doInBackground (line 94) | @Override
method onPostExecute (line 107) | @Override
method onPreExecute (line 207) | @Override
method onProgressUpdate (line 210) | @Override
method getLayout (line 214) | public static ViewGroup getLayout() {
method getSurface (line 218) | public static SurfaceView getSurface() {
type NewIntentListener (line 226) | public interface NewIntentListener {
method onNewIntent (line 227) | void onNewIntent(Intent intent);
method registerNewIntentListener (line 232) | public void registerNewIntentListener(NewIntentListener listener) {
method unregisterNewIntentListener (line 239) | public void unregisterNewIntentListener(NewIntentListener listener) {
method onNewIntent (line 244) | @Override
type ActivityResultListener (line 260) | public interface ActivityResultListener {
method onActivityResult (line 261) | void onActivityResult(int requestCode, int resultCode, Intent data);
method registerActivityResultListener (line 266) | public void registerActivityResultListener(ActivityResultListener list...
method unregisterActivityResultListener (line 273) | public void unregisterActivityResultListener(ActivityResultListener li...
method onActivityResult (line 278) | @Override
method start_service (line 289) | public static void start_service(
method start_service_not_as_foreground (line 294) | public static void start_service_not_as_foreground(
method _do_start_service (line 299) | public static void _do_start_service(
method stop_service (line 322) | public static void stop_service() {
method sendCommand (line 340) | @Override
method appConfirmedActive (line 348) | @Override
method considerLoadingScreenRemoval (line 361) | public void considerLoadingScreenRemoval() {
method removeLoadingScreen (line 399) | public void removeLoadingScreen() {
method getEntryPoint (line 413) | public String getEntryPoint(String search_dir) {
method showLoadingScreen (line 428) | protected void showLoadingScreen(View view) {
method setBackgroundColor (line 443) | protected void setBackgroundColor(View view) {
method getLoadingScreen (line 463) | protected View getLoadingScreen() {
method onPause (line 523) | @Override
method onResume (line 538) | @Override
method onWindowFocusChanged (line 553) | @Override
type PermissionsCallback (line 568) | public interface PermissionsCallback {
method onRequestPermissionsResult (line 569) | void onRequestPermissionsResult(int requestCode, String[] permission...
method addPermissionsCallback (line 575) | public void addPermissionsCallback(PermissionsCallback callback) {
method onRequestPermissionsResult (line 581) | @Override
method checkCurrentPermission (line 593) | public boolean checkCurrentPermission(String permission) {
method requestPermissionsWithRequestCode (line 608) | public void requestPermissionsWithRequestCode(String[] permissions, in...
method requestPermissions (line 618) | public void requestPermissions(String[] permissions) {
method changeKeyboard (line 622) | public static void changeKeyboard(int inputType) {
FILE: pythonforandroid/bootstraps/service_library/__init__.py
class ServiceLibraryBootstrap (line 4) | class ServiceLibraryBootstrap(ServiceOnlyBootstrap):
FILE: pythonforandroid/bootstraps/service_library/build/src/main/java/org/kivy/android/PythonActivity.java
class PythonActivity (line 6) | public class PythonActivity extends Activity {
FILE: pythonforandroid/bootstraps/service_library/build/templates/Service.tmpl.java
class Service (line 14) | public class Service{{ name|capitalize }}
FILE: pythonforandroid/bootstraps/service_only/__init__.py
class ServiceOnlyBootstrap (line 4) | class ServiceOnlyBootstrap(Bootstrap):
FILE: pythonforandroid/bootstraps/service_only/build/jni/application/src/pyjniusjni.c
function Android_JNI_SetupThread (line 26) | int Android_JNI_SetupThread(void)
function JNICALL (line 33) | JNICALL JNI_OnLoad(JavaVM* vm, void* reserved)
function JNIEnv (line 55) | JNIEnv* Android_JNI_GetEnv(void)
function Android_JNI_ThreadDestroyed (line 90) | static void Android_JNI_ThreadDestroyed(void* value)
FILE: pythonforandroid/bootstraps/service_only/build/src/main/java/org/kivy/android/PythonActivity.java
class PythonActivity (line 22) | public class PythonActivity extends Activity {
method getAppRoot (line 40) | public String getAppRoot() {
method getEntryPoint (line 45) | public String getEntryPoint(String search_dir) {
method initialize (line 60) | public static void initialize() {
method onCreate (line 68) | @Override
method onDestroy (line 172) | @Override
method loadLibraries (line 181) | public void loadLibraries() {
method onKeyDown (line 189) | @Override
type NewIntentListener (line 211) | public interface NewIntentListener {
method onNewIntent (line 212) | void onNewIntent(Intent intent);
method registerNewIntentListener (line 217) | public void registerNewIntentListener(NewIntentListener listener) {
method unregisterNewIntentListener (line 224) | public void unregisterNewIntentListener(NewIntentListener listener) {
method onNewIntent (line 229) | @Override
type ActivityResultListener (line 245) | public interface ActivityResultListener {
method onActivityResult (line 246) | void onActivityResult(int requestCode, int resultCode, Intent data);
method registerActivityResultListener (line 251) | public void registerActivityResultListener(ActivityResultListener list...
method unregisterActivityResultListener (line 258) | public void unregisterActivityResultListener(ActivityResultListener li...
method onActivityResult (line 263) | @Override
method start_service (line 274) | public static void start_service(
method start_service_not_as_foreground (line 279) | public static void start_service_not_as_foreground(
method _do_start_service (line 284) | public static void _do_start_service(
method stop_service (line 307) | public static void stop_service() {
method nativeSetenv (line 312) | public static native void nativeSetenv(String name, String value);
method nativeInit (line 314) | public static native int nativeInit(Object arguments);
class PythonMain (line 317) | class PythonMain implements Runnable {
method run (line 318) | @Override
FILE: pythonforandroid/bootstraps/service_only/build/templates/Service.tmpl.java
class Service (line 9) | public class Service{{ name|capitalize }}
class Service (line 88) | public class Service{{ name|capitalize }}
FILE: pythonforandroid/bootstraps/webview/__init__.py
class WebViewBootstrap (line 4) | class WebViewBootstrap(Bootstrap):
FILE: pythonforandroid/bootstraps/webview/build/jni/application/src/pyjniusjni.c
function Android_JNI_SetupThread (line 26) | int Android_JNI_SetupThread(void)
function JNICALL (line 33) | JNICALL JNI_OnLoad(JavaVM* vm, void* reserved)
function JNIEnv (line 55) | JNIEnv* Android_JNI_GetEnv(void)
function Android_JNI_ThreadDestroyed (line 90) | static void Android_JNI_ThreadDestroyed(void* value)
FILE: pythonforandroid/bootstraps/webview/build/src/main/java/org/kivy/android/PythonActivity.java
class PythonActivity (line 38) | public class PythonActivity extends Activity {
method getAppRoot (line 60) | public String getAppRoot() {
method getEntryPoint (line 65) | public String getEntryPoint(String search_dir) {
method initialize (line 80) | public static void initialize() {
method onCreate (line 90) | @Override
class UnpackFilesTask (line 101) | private class UnpackFilesTask extends AsyncTask<String, Void, String> {
method doInBackground (line 102) | @Override
method onPostExecute (line 115) | @Override
method onDestroy (line 236) | @Override
method loadLibraries (line 245) | public void loadLibraries() {
method loadUrl (line 251) | public static void loadUrl(String url) {
method enableZoom (line 268) | public static void enableZoom() {
method getLayout (line 279) | public static ViewGroup getLayout() {
method onKeyDown (line 285) | @Override
method removeLoadingScreen (line 314) | public void removeLoadingScreen() {
method showLoadingScreen (line 328) | protected void showLoadingScreen() {
type NewIntentListener (line 388) | public interface NewIntentListener {
method onNewIntent (line 389) | void onNewIntent(Intent intent);
method registerNewIntentListener (line 394) | public void registerNewIntentListener(NewIntentListener listener) {
method unregisterNewIntentListener (line 401) | public void unregisterNewIntentListener(NewIntentListener listener) {
method onNewIntent (line 406) | @Override
type ActivityResultListener (line 422) | public interface ActivityResultListener {
method onActivityResult (line 423) | void onActivityResult(int requestCode, int resultCode, Intent data);
method registerActivityResultListener (line 428) | public void registerActivityResultListener(ActivityResultListener list...
method unregisterActivityResultListener (line 435) | public void unregisterActivityResultListener(ActivityResultListener li...
method onActivityResult (line 440) | @Override
method start_service (line 451) | public static void start_service(
method start_service_not_as_foreground (line 456) | public static void start_service_not_as_foreground(
method _do_start_service (line 461) | public static void _do_start_service(
method stop_service (line 484) | public static void stop_service() {
method nativeSetenv (line 489) | public static native void nativeSetenv(String name, String value);
method nativeInit (line 491) | public static native int nativeInit(Object arguments);
type PermissionsCallback (line 497) | public interface PermissionsCallback {
method onRequestPermissionsResult (line 498) | void onRequestPermissionsResult(int requestCode, String[] permission...
method addPermissionsCallback (line 504) | public void addPermissionsCallback(PermissionsCallback callback) {
method onRequestPermissionsResult (line 510) | @Override
method checkCurrentPermission (line 522) | public boolean checkCurrentPermission(String permission) {
method requestPermissionsWithRequestCode (line 537) | public void requestPermissionsWithRequestCode(String[] permissions, in...
method requestPermissions (line 547) | public void requestPermissions(String[] permissions) {
class PythonMain (line 552) | class PythonMain implements Runnable {
method run (line 553) | @Override
class WebViewLoaderMain (line 559) | class WebViewLoaderMain implements Runnable {
method run (line 560) | @Override
FILE: pythonforandroid/bootstraps/webview/build/templates/WebViewLoader.tmpl.java
class WebViewLoader (line 15) | public class WebViewLoader {
method testConnection (line 18) | public static void testConnection() {
method pingHost (line 45) | public static boolean pingHost(String host, int port, int timeout) {
FILE: pythonforandroid/build.py
function get_targets (line 34) | def get_targets(sdk_dir):
function get_available_apis (line 52) | def get_available_apis(sdk_dir):
class Context (line 60) | class Context:
method packages_path (line 105) | def packages_path(self):
method templates_dir (line 110) | def templates_dir(self):
method libs_dir (line 114) | def libs_dir(self):
method javaclass_dir (line 126) | def javaclass_dir(self):
method aars_dir (line 134) | def aars_dir(self):
method python_installs_dir (line 140) | def python_installs_dir(self):
method get_python_install_dir (line 145) | def get_python_install_dir(self, arch):
method setup_dirs (line 148) | def setup_dirs(self, storage_dir):
method ensure_dirs (line 158) | def ensure_dirs(self):
method android_api (line 166) | def android_api(self):
method android_api (line 175) | def android_api(self, value):
method ndk_api (line 179) | def ndk_api(self):
method ndk_api (line 188) | def ndk_api(self, value):
method sdk_dir (line 192) | def sdk_dir(self):
method sdk_dir (line 201) | def sdk_dir(self, value):
method ndk_dir (line 205) | def ndk_dir(self):
method ndk_dir (line 214) | def ndk_dir(self, value):
method prepare_build_environment (line 217) | def prepare_build_environment(self,
method __init__ (line 368) | def __init__(self):
method set_archs (line 403) | def set_archs(self, arch_names):
method prepare_bootstrap (line 416) | def prepare_bootstrap(self, bootstrap):
method prepare_dist (line 424) | def prepare_dist(self):
method get_site_packages_dir (line 427) | def get_site_packages_dir(self, arch):
method get_libs_dir (line 433) | def get_libs_dir(self, arch):
method has_lib (line 438) | def has_lib(self, arch, lib):
method has_package (line 441) | def has_package(self, name, arch=None):
method not_has_package (line 475) | def not_has_package(self, name, arch=None):
function build_recipes (line 479) | def build_recipes(build_order, python_modules, ctx, project_dir,
function project_has_setup_py (line 547) | def project_has_setup_py(project_dir):
function run_setuppy_install (line 554) | def run_setuppy_install(ctx, project_dir, env=None, arch=None):
function is_wheel_platform_independent (line 665) | def is_wheel_platform_independent(whl_name):
function process_python_modules (line 670) | def process_python_modules(ctx, modules):
function run_pymodules_install (line 782) | def run_pymodules_install(ctx, arch, modules, project_dir=None,
function biglink (line 906) | def biglink(ctx, arch):
function biglink_function (line 952) | def biglink_function(soname, objs_paths, extra_link_dirs=None, env=None):
function copylibs_function (line 1001) | def copylibs_function(soname, objs_paths, extra_link_dirs=None, env=None):
FILE: pythonforandroid/checkdependencies.py
function check_python_dependencies (line 12) | def check_python_dependencies():
function check (line 67) | def check():
FILE: pythonforandroid/distribution.py
class Distribution (line 11) | class Distribution:
method __init__ (line 34) | def __init__(self, ctx):
method __str__ (line 37) | def __str__(self):
method __repr__ (line 42) | def __repr__(self):
method get_distribution (line 46) | def get_distribution(
method folder_exists (line 201) | def folder_exists(self):
method delete (line 204) | def delete(self):
method get_distributions (line 208) | def get_distributions(cls, ctx, extra_dist_dirs=[]):
method save_info (line 246) | def save_info(self, dirn):
function pretty_log_dists (line 264) | def pretty_log_dists(dists, log_func=info):
FILE: pythonforandroid/entrypoints.py
function main (line 5) | def main():
FILE: pythonforandroid/graph.py
function fix_deplist (line 10) | def fix_deplist(deps):
class RecipeOrder (line 25) | class RecipeOrder(dict):
method __init__ (line 26) | def __init__(self, ctx):
method conflicts (line 29) | def conflicts(self):
function get_dependency_tuple_list_for_recipe (line 42) | def get_dependency_tuple_list_for_recipe(recipe, blacklist=None):
function recursively_collect_orders (line 64) | def recursively_collect_orders(
function find_order (line 127) | def find_order(graph):
function obvious_conflict_checker (line 146) | def obvious_conflict_checker(ctx, name_tuples, blacklist=None):
function get_recipe_order_and_bootstrap (line 243) | def get_recipe_order_and_bootstrap(ctx, names, bs=None, blacklist=None):
FILE: pythonforandroid/logger.py
class LevelDifferentiatingFormatter (line 15) | class LevelDifferentiatingFormatter(logging.Formatter):
method format (line 16) | def format(self, record):
class colorama_shim (line 51) | class colorama_shim:
method __init__ (line 53) | def __init__(self, real):
method __getattr__ (line 58) | def __getattr__(self, key):
method enable (line 61) | def enable(self, enable):
function setup_color (line 71) | def setup_color(color):
function info_main (line 85) | def info_main(*args):
function info_notify (line 90) | def info_notify(s):
function shorten_string (line 95) | def shorten_string(string, max_width):
function get_console_width (line 112) | def get_console_width():
function shprint (line 131) | def shprint(command, *args, **kwargs):
FILE: pythonforandroid/patching.py
function is_platform (line 28) | def is_platform(platform):
function is_arch (line 44) | def is_arch(xarch):
function is_api (line 61) | def is_api(apiver: int):
function is_api_gt (line 68) | def is_api_gt(apiver: int):
function is_api_gte (line 75) | def is_api_gte(apiver: int):
function is_api_lt (line 82) | def is_api_lt(apiver: int):
function is_api_lte (line 89) | def is_api_lte(apiver: int):
function is_ndk (line 99) | def is_ndk(ndk):
function is_version_gt (line 118) | def is_version_gt(version):
function is_version_lt (line 127) | def is_version_lt(version):
function version_starts_with (line 136) | def version_starts_with(version_prefix):
function will_build (line 146) | def will_build(recipe_name):
function check_all (line 159) | def check_all(*patch_checks):
function check_any (line 170) | def check_any(*patch_checks):
FILE: pythonforandroid/prerequisites.py
class Prerequisite (line 13) | class Prerequisite(object):
method is_valid (line 19) | def is_valid(self):
method checker (line 30) | def checker(self):
method ask_to_install (line 38) | def ask_to_install(self):
method install (line 56) | def install(self):
method show_helper (line 70) | def show_helper(self):
method install_is_supported (line 78) | def install_is_supported(self):
method linux_checker (line 81) | def linux_checker(self):
method darwin_checker (line 84) | def darwin_checker(self):
method linux_installer (line 87) | def linux_installer(self):
method darwin_installer (line 90) | def darwin_installer(self):
method darwin_helper (line 93) | def darwin_helper(self):
method linux_helper (line 96) | def linux_helper(self):
method _darwin_get_brew_formula_location_prefix (line 99) | def _darwin_get_brew_formula_location_prefix(self, formula, installed=...
method darwin_pkg_config_location (line 114) | def darwin_pkg_config_location(self):
method linux_pkg_config_location (line 120) | def linux_pkg_config_location(self):
method pkg_config_location (line 127) | def pkg_config_location(self):
class HomebrewPrerequisite (line 134) | class HomebrewPrerequisite(Prerequisite):
method darwin_checker (line 139) | def darwin_checker(self):
method darwin_helper (line 142) | def darwin_helper(self):
class JDKPrerequisite (line 150) | class JDKPrerequisite(Prerequisite):
method darwin_checker (line 156) | def darwin_checker(self):
method _darwin_get_libexec_jdk_path (line 164) | def _darwin_get_libexec_jdk_path(self, version=None):
method _darwin_jdk_is_supported (line 177) | def _darwin_jdk_is_supported(self, jdk_path):
method darwin_helper (line 207) | def darwin_helper(self):
method darwin_installer (line 222) | def darwin_installer(self):
class OpenSSLPrerequisite (line 263) | class OpenSSLPrerequisite(Prerequisite):
method darwin_checker (line 269) | def darwin_checker(self):
method darwin_pkg_config_location (line 277) | def darwin_pkg_config_location(self):
method darwin_installer (line 283) | def darwin_installer(self):
class AutoconfPrerequisite (line 288) | class AutoconfPrerequisite(Prerequisite):
method darwin_checker (line 293) | def darwin_checker(self):
method darwin_installer (line 299) | def darwin_installer(self):
class AutomakePrerequisite (line 304) | class AutomakePrerequisite(Prerequisite):
method darwin_checker (line 309) | def darwin_checker(self):
method darwin_installer (line 315) | def darwin_installer(self):
class LibtoolPrerequisite (line 320) | class LibtoolPrerequisite(Prerequisite):
method darwin_checker (line 325) | def darwin_checker(self):
method darwin_installer (line 331) | def darwin_installer(self):
class PkgConfigPrerequisite (line 336) | class PkgConfigPrerequisite(Prerequisite):
method darwin_checker (line 341) | def darwin_checker(self):
method darwin_installer (line 347) | def darwin_installer(self):
class CmakePrerequisite (line 352) | class CmakePrerequisite(Prerequisite):
method darwin_checker (line 357) | def darwin_checker(self):
method darwin_installer (line 363) | def darwin_installer(self):
function get_required_prerequisites (line 368) | def get_required_prerequisites(platform="linux"):
function check_and_install_default_prerequisites (line 384) | def check_and_install_default_prerequisites():
FILE: pythonforandroid/pythonpackage.py
function transform_dep_for_pip (line 55) | def transform_dep_for_pip(dependency):
function extract_metainfo_files_from_package (line 77) | def extract_metainfo_files_from_package(
function _get_system_python_executable (line 121) | def _get_system_python_executable():
function get_package_as_folder (line 251) | def get_package_as_folder(dependency):
function _extract_metainfo_files_from_package_unsafe (line 406) | def _extract_metainfo_files_from_package_unsafe(
function is_filesystem_path (line 466) | def is_filesystem_path(dep):
function parse_as_folder_reference (line 475) | def parse_as_folder_reference(dep):
function _extract_info_from_package (line 500) | def _extract_info_from_package(dependency,
function get_package_name (line 586) | def get_package_name(dependency,
function get_package_dependencies (line 604) | def get_package_dependencies(package,
function get_dep_names_of_package (line 682) | def get_dep_names_of_package(
FILE: pythonforandroid/recipe.py
class RecipeMeta (line 37) | class RecipeMeta(type):
method __new__ (line 38) | def __new__(cls, name, bases, dct):
class Recipe (line 48) | class Recipe(metaclass=RecipeMeta):
method get_stl_library (line 164) | def get_stl_library(self, arch):
method install_stl_lib (line 170) | def install_stl_lib(self, arch):
method version (line 177) | def version(self):
method url (line 182) | def url(self):
method versioned_url (line 187) | def versioned_url(self):
method download_headers (line 196) | def download_headers(self):
method download_file (line 207) | def download_file(self, url, target, cwd=None):
method apply_patch (line 280) | def apply_patch(self, filename, arch, build_dir=None):
method copy_file (line 294) | def copy_file(self, filename, dest):
method append_file (line 300) | def append_file(self, filename, dest):
method name (line 310) | def name(self):
method filtered_archs (line 316) | def filtered_archs(self):
method check_recipe_choices (line 325) | def check_recipe_choices(self):
method get_opt_depends_in_list (line 342) | def get_opt_depends_in_list(self, recipes):
method get_build_container_dir (line 348) | def get_build_container_dir(self, arch):
method get_dir_name (line 359) | def get_dir_name(self):
method get_build_dir (line 364) | def get_build_dir(self, arch):
method get_recipe_dir (line 370) | def get_recipe_dir(self):
method download_if_necessary (line 383) | def download_if_necessary(self):
method download (line 395) | def download(self):
method unpack (line 460) | def unpack(self, arch):
method get_recipe_env (line 532) | def get_recipe_env(self, arch=None, with_flags_in_cc=True):
method prebuild_arch (line 545) | def prebuild_arch(self, arch):
method is_patched (line 555) | def is_patched(self, arch):
method apply_patches (line 559) | def apply_patches(self, arch, build_dir=None):
method should_build (line 585) | def should_build(self, arch):
method build_arch (line 596) | def build_arch(self, arch):
method install_libraries (line 604) | def install_libraries(self, arch):
method postbuild_arch (line 617) | def postbuild_arch(self, arch):
method prepare_build_dir (line 629) | def prepare_build_dir(self, arch):
method clean_build (line 637) | def clean_build(self, arch=None):
method install_libs (line 669) | def install_libs(self, arch, *libs):
method has_libs (line 677) | def has_libs(self, arch, *libs):
method get_libraries (line 680) | def get_libraries(self, arch_name, in_context=False):
method recipe_dirs (line 702) | def recipe_dirs(cls, ctx):
method list_recipes (line 712) | def list_recipes(cls, ctx):
method get_recipe (line 724) | def get_recipe(cls, name, ctx):
class IncludedFilesBehaviour (line 759) | class IncludedFilesBehaviour(object):
method prepare_build_dir (line 764) | def prepare_build_dir(self, arch):
class BootstrapNDKRecipe (line 773) | class BootstrapNDKRecipe(Recipe):
method get_build_container_dir (line 787) | def get_build_container_dir(self, arch):
method get_build_dir (line 790) | def get_build_dir(self, arch):
method get_jni_dir (line 796) | def get_jni_dir(self):
method get_recipe_env (line 799) | def get_recipe_env(self, arch=None, with_flags_in_cc=True, with_python...
class NDKRecipe (line 811) | class NDKRecipe(Recipe):
method should_build (line 816) | def should_build(self, arch):
method get_lib_dir (line 825) | def get_lib_dir(self, arch):
method get_jni_dir (line 828) | def get_jni_dir(self, arch):
method build_arch (line 831) | def build_arch(self, arch, *extra_args):
class PythonRecipe (line 848) | class PythonRecipe(Recipe):
method __init__ (line 891) | def __init__(self, *args, **kwargs):
method prebuild_arch (line 903) | def prebuild_arch(self, arch):
method clean_build (line 907) | def clean_build(self, arch=None):
method real_hostpython_location (line 921) | def real_hostpython_location(self):
method hostpython_location (line 930) | def hostpython_location(self):
method folder_name (line 936) | def folder_name(self):
method patch_shebang (line 943) | def patch_shebang(self, _file, original_bin):
method patch_shebangs (line 963) | def patch_shebangs(self, path, original_bin):
method get_recipe_env (line 972) | def get_recipe_env(self, arch=None, with_flags_in_cc=True):
method should_build (line 999) | def should_build(self, arch):
method build_arch (line 1007) | def build_arch(self, arch):
method install_python_package (line 1014) | def install_python_package(self, arch, name=None, env=None, is_dir=True):
method get_hostrecipe_env (line 1033) | def get_hostrecipe_env(self, arch=None):
method hostpython_site_dir (line 1042) | def hostpython_site_dir(self):
method install_hostpython_package (line 1045) | def install_hostpython_package(self, arch):
method python_major_minor_version (line 1053) | def python_major_minor_version(self):
method install_hostpython_prerequisites (line 1057) | def install_hostpython_prerequisites(self, packages=None, force_upgrad...
method restore_hostpython_prerequisites (line 1078) | def restore_hostpython_prerequisites(self, packages):
class CompiledComponentsPythonRecipe (line 1086) | class CompiledComponentsPythonRecipe(PythonRecipe):
method build_arch (line 1091) | def build_arch(self, arch):
method build_compiled_components (line 1100) | def build_compiled_components(self, arch):
method install_hostpython_package (line 1114) | def install_hostpython_package(self, arch):
method rebuild_compiled_components (line 1119) | def rebuild_compiled_components(self, arch, env):
class CppCompiledComponentsPythonRecipe (line 1128) | class CppCompiledComponentsPythonRecipe(CompiledComponentsPythonRecipe):
class CythonRecipe (line 1134) | class CythonRecipe(PythonRecipe):
method build_arch (line 1140) | def build_arch(self, arch):
method build_cython_components (line 1148) | def build_cython_components(self, arch):
method strip_object_files (line 1180) | def strip_object_files(self, arch, env, build_dir=None):
method cythonize_file (line 1192) | def cythonize_file(self, env, build_dir, filename):
method cythonize_build (line 1211) | def cythonize_build(self, env, build_dir="."):
method get_recipe_env (line 1220) | def get_recipe_env(self, arch, with_flags_in_cc=True):
class PyProjectRecipe (line 1244) | class PyProjectRecipe(PythonRecipe):
method get_recipe_env (line 1251) | def get_recipe_env(self, arch, **kwargs):
method get_wheel_platform_tag (line 1269) | def get_wheel_platform_tag(self, arch):
method install_wheel (line 1281) | def install_wheel(self, arch, built_wheels):
method build_arch (line 1307) | def build_arch(self, arch):
class MesonRecipe (line 1343) | class MesonRecipe(PyProjectRecipe):
method sanitize_flags (line 1353) | def sanitize_flags(self, *flag_strings):
method get_recipe_meson_options (line 1356) | def get_recipe_meson_options(self, arch):
method write_build_options (line 1394) | def write_build_options(self, arch):
method ensure_args (line 1414) | def ensure_args(self, *args):
method build_arch (line 1419) | def build_arch(self, arch):
class RustCompiledComponentsRecipe (line 1439) | class RustCompiledComponentsRecipe(PyProjectRecipe):
method get_recipe_env (line 1451) | def get_recipe_env(self, arch, **kwargs):
method check_host_deps (line 1494) | def check_host_deps(self):
method build_arch (line 1503) | def build_arch(self, arch):
class TargetPythonRecipe (line 1508) | class TargetPythonRecipe(Recipe):
method __init__ (line 1512) | def __init__(self, *args, **kwargs):
method prebuild_arch (line 1516) | def prebuild_arch(self, arch):
method include_root (line 1520) | def include_root(self, arch):
method link_root (line 1524) | def link_root(self):
method major_minor_version_string (line 1528) | def major_minor_version_string(self):
method create_python_bundle (line 1532) | def create_python_bundle(self, dirn, arch):
method reduce_object_file_names (line 1540) | def reduce_object_file_names(self, dirn):
function algsum (line 1558) | def algsum(alg, filen):
FILE: pythonforandroid/recipes/Pillow/__init__.py
class PillowRecipe (line 6) | class PillowRecipe(PyProjectRecipe):
method get_recipe_env (line 34) | def get_recipe_env(self, arch, **kwargs):
FILE: pythonforandroid/recipes/aiohttp/__init__.py
class AIOHTTPRecipe (line 6) | class AIOHTTPRecipe(CppCompiledComponentsPythonRecipe): # type: ignore ...
method get_recipe_env (line 14) | def get_recipe_env(self, arch):
FILE: pythonforandroid/recipes/android/__init__.py
class AndroidRecipe (line 8) | class AndroidRecipe(IncludedFilesBehaviour, PyProjectRecipe):
method get_recipe_env (line 20) | def get_recipe_env(self, arch, **kwargs):
method prebuild_arch (line 25) | def prebuild_arch(self, arch):
FILE: pythonforandroid/recipes/android/src/android/_android_billing_jni.c
function android_billing_service_start (line 13) | void android_billing_service_start() {
function android_billing_service_stop (line 32) | void android_billing_service_stop() {
function android_billing_buy (line 51) | void android_billing_buy(char *sku) {
FILE: pythonforandroid/recipes/android/src/android/_android_jni.c
function android_vibrate (line 13) | void android_vibrate(double seconds) {
function android_accelerometer_enable (line 32) | void android_accelerometer_enable(int enable) {
function android_wifi_scanner_enable (line 51) | void android_wifi_scanner_enable(void){
function android_accelerometer_reading (line 92) | void android_accelerometer_reading(float *values) {
function android_get_dpi (line 115) | int android_get_dpi(void) {
function android_show_keyboard (line 132) | void android_show_keyboard(int input_type) {
function android_hide_keyboard (line 149) | void android_hide_keyboard(void) {
function android_get_buildinfo (line 171) | void android_get_buildinfo() {
function android_stop_service (line 204) | void android_stop_service() {
FILE: pythonforandroid/recipes/android/src/android/_android_sound_jni.c
function android_sound_queue (line 13) | void android_sound_queue(int channel, char *filename, char *real_fn, lon...
function android_sound_play (line 40) | void android_sound_play(int channel, char *filename, char *real_fn, long...
function android_sound_seek (line 67) | void android_sound_seek(int channel, float position){
function android_sound_stop (line 87) | void android_sound_stop(int channel) {
function android_sound_dequeue (line 106) | void android_sound_dequeue(int channel) {
function android_sound_queue_depth (line 125) | int android_sound_queue_depth(int channel) {
function android_sound_playing_name (line 144) | void android_sound_playing_name(int channel, char *buf, int buflen) {
function android_sound_set_volume (line 174) | void android_sound_set_volume(int channel, float value) {
function android_sound_set_secondary_volume (line 194) | void android_sound_set_secondary_volume(int channel, float value) {
function android_sound_set_pan (line 214) | void android_sound_set_pan(int channel, float value) {
function android_sound_pause (line 234) | void android_sound_pause(int channel) {
function android_sound_unpause (line 253) | void android_sound_unpause(int channel) {
function android_sound_get_pos (line 272) | int android_sound_get_pos(int channel) {
function android_sound_get_length (line 291) | int android_sound_get_length(int channel) {
FILE: pythonforandroid/recipes/android/src/android/_ctypes_library_finder.py
function get_activity_lib_dir (line 6) | def get_activity_lib_dir(activity_name):
function does_libname_match_filename (line 33) | def does_libname_match_filename(search_name, file_path):
function find_library (line 46) | def find_library(name):
FILE: pythonforandroid/recipes/android/src/android/activity.py
class NewIntentListener (line 12) | class NewIntentListener(PythonJavaClass):
method __init__ (line 16) | def __init__(self, callback, **kwargs):
method onNewIntent (line 21) | def onNewIntent(self, intent):
class ActivityResultListener (line 25) | class ActivityResultListener(PythonJavaClass):
method __init__ (line 29) | def __init__(self, callback):
method onActivityResult (line 34) | def onActivityResult(self, requestCode, resultCode, intent):
function bind (line 38) | def bind(**kwargs):
function unbind (line 52) | def unbind(**kwargs):
class ActivityLifecycleCallbacks (line 71) | class ActivityLifecycleCallbacks(PythonJavaClass):
method __init__ (line 76) | def __init__(self, callbacks):
method _callback (line 85) | def _callback(self, name, *args):
method onActivityCreated (line 91) | def onActivityCreated(self, activity, savedInstanceState):
method onActivityDestroyed (line 95) | def onActivityDestroyed(self, activity):
method onActivityPaused (line 99) | def onActivityPaused(self, activity):
method onActivityPostCreated (line 103) | def onActivityPostCreated(self, activity, savedInstanceState):
method onActivityPostDestroyed (line 107) | def onActivityPostDestroyed(self, activity):
method onActivityPostPaused (line 111) | def onActivityPostPaused(self, activity):
method onActivityPostResumed (line 115) | def onActivityPostResumed(self, activity):
method onActivityPostSaveInstanceState (line 119) | def onActivityPostSaveInstanceState(self, activity, outState):
method onActivityPostStarted (line 123) | def onActivityPostStarted(self, activity):
method onActivityPostStopped (line 127) | def onActivityPostStopped(self, activity):
method onActivityPreCreated (line 131) | def onActivityPreCreated(self, activity, savedInstanceState):
method onActivityPreDestroyed (line 135) | def onActivityPreDestroyed(self, activity):
method onActivityPrePaused (line 139) | def onActivityPrePaused(self, activity):
method onActivityPreResumed (line 143) | def onActivityPreResumed(self, activity):
method onActivityPreSaveInstanceState (line 147) | def onActivityPreSaveInstanceState(self, activity, outState):
method onActivityPreStarted (line 151) | def onActivityPreStarted(self, activity):
method onActivityPreStopped (line 155) | def onActivityPreStopped(self, activity):
method onActivityResumed (line 159) | def onActivityResumed(self, activity):
method onActivitySaveInstanceState (line 163) | def onActivitySaveInstanceState(self, activity, outState):
method onActivityStarted (line 167) | def onActivityStarted(self, activity):
method onActivityStopped (line 171) | def onActivityStopped(self, activity):
function register_activity_lifecycle_callbacks (line 175) | def register_activity_lifecycle_callbacks(**callbacks):
function unregister_activity_lifecycle_callbacks (line 203) | def unregister_activity_lifecycle_callbacks(instance):
FILE: pythonforandroid/recipes/android/src/android/broadcast.py
class BroadcastReceiver (line 11) | class BroadcastReceiver(object):
class Callback (line 13) | class Callback(PythonJavaClass):
method __init__ (line 17) | def __init__(self, callback, *args, **kwargs):
method onReceive (line 22) | def onReceive(self, context, intent):
method __init__ (line 25) | def __init__(self, callback, actions=None, categories=None):
method start (line 64) | def start(self):
method stop (line 84) | def stop(self):
method context (line 97) | def context(self):
FILE: pythonforandroid/recipes/android/src/android/display_cutout.py
function _core_cutout (line 11) | def _core_cutout():
function get_cutout_pos (line 18) | def get_cutout_pos():
function get_cutout_size (line 30) | def get_cutout_size():
function get_height_of_bar (line 42) | def get_height_of_bar(bar_target=None):
function get_width_of_bar (line 64) | def get_width_of_bar(bar_target=None):
function get_size_of_bar (line 69) | def get_size_of_bar(bar_target=None):
function get_heights_of_both_bars (line 76) | def get_heights_of_both_bars():
function get_cutout_mode (line 81) | def get_cutout_mode():
FILE: pythonforandroid/recipes/android/src/android/loadingscreen.py
function hide_loading_screen (line 7) | def hide_loading_screen():
FILE: pythonforandroid/recipes/android/src/android/mixer.py
function periodic (line 12) | def periodic():
function init (line 22) | def init(frequency=22050, size=-16, channels=2, buffer=4096):
function pre_init (line 26) | def pre_init(frequency=22050, size=-16, channels=2, buffersize=4096):
function quit (line 30) | def quit():
function stop (line 35) | def stop():
function pause (line 40) | def pause():
function unpause (line 45) | def unpause():
function get_busy (line 50) | def get_busy():
function fadeout (line 58) | def fadeout(time):
function set_num_channels (line 67) | def set_num_channels(count):
function get_num_channels (line 72) | def get_num_channels(count):
function set_reserved (line 76) | def set_reserved(count):
function find_channel (line 81) | def find_channel(force=False):
class ChannelImpl (line 101) | class ChannelImpl(object):
method __init__ (line 103) | def __init__(self, id):
method periodic (line 110) | def periodic(self):
method play (line 119) | def play(self, s, loops=0, maxtime=0, fade_ms=0):
method seek (line 130) | def seek(self, position):
method stop (line 133) | def stop(self):
method pause (line 137) | def pause(self):
method unpause (line 140) | def unpause(self):
method fadeout (line 143) | def fadeout(self, time):
method set_volume (line 147) | def set_volume(self, left, right=None):
method get_volume (line 150) | def get_volume(self):
method get_busy (line 153) | def get_busy(self):
method get_sound (line 156) | def get_sound(self):
method queue (line 165) | def queue(self, s):
method get_queue (line 174) | def get_queue(self):
method get_pos (line 177) | def get_pos(self):
method get_length (line 180) | def get_length(self):
function Channel (line 184) | def Channel(n):
class Sound (line 201) | class Sound(object):
method __init__ (line 203) | def __init__(self, what):
method play (line 221) | def play(self, loops=0, maxtime=0, fade_ms=0):
method stop (line 232) | def stop(self):
method fadeout (line 237) | def fadeout(self, time):
method set_volume (line 240) | def set_volume(self, left, right=None):
method get_volume (line 246) | def get_volume(self):
method get_num_channels (line 249) | def get_num_channels(self):
method get_length (line 258) | def get_length(self):
class music (line 266) | class music(object):
method load (line 269) | def load(filename):
method play (line 277) | def play(loops=0, start=0.0):
method rewind (line 283) | def rewind():
method seek (line 287) | def seek(position):
method stop (line 291) | def stop():
method pause (line 295) | def pause():
method unpause (line 299) | def unpause():
method fadeout (line 303) | def fadeout(time):
method set_volume (line 307) | def set_volume(value):
method get_volume (line 311) | def get_volume():
method get_busy (line 315) | def get_busy():
method get_pos (line 319) | def get_pos():
method queue (line 323) | def queue(filename):
FILE: pythonforandroid/recipes/android/src/android/permissions.py
function autoclass (line 8) | def autoclass(item):
class Permission (line 15) | class Permission:
class _onRequestPermissionsCallback (line 461) | class _onRequestPermissionsCallback(PythonJavaClass):
method __init__ (line 468) | def __init__(self, func):
method onRequestPermissionsResult (line 473) | def onRequestPermissionsResult(self, requestCode,
class _RequestPermissionsManager (line 478) | class _RequestPermissionsManager:
method register_callback (line 515) | def register_callback(cls):
method request_permissions (line 522) | def request_permissions(cls, permissions, callback=None):
method python_callback (line 552) | def python_callback(cls, requestCode, permissions, grantResults):
function request_permissions (line 563) | def request_permissions(permissions, callback=None):
function request_permission (line 604) | def request_permission(permission, callback=None):
function check_permission (line 608) | def check_permission(permission):
FILE: pythonforandroid/recipes/android/src/android/runnable.py
class Runnable (line 17) | class Runnable(PythonJavaClass):
method __init__ (line 25) | def __init__(self, func):
method __call__ (line 29) | def __call__(self, *args, **kwargs):
method run (line 36) | def run(self):
function run_on_ui_thread (line 46) | def run_on_ui_thread(f):
FILE: pythonforandroid/recipes/android/src/android/storage.py
function _android_has_is_removable_func (line 11) | def _android_has_is_removable_func():
function _get_sdcard_path (line 16) | def _get_sdcard_path():
function _get_activity (line 29) | def _get_activity():
function app_storage_path (line 42) | def app_storage_path():
function primary_external_storage_path (line 59) | def primary_external_storage_path():
function secondary_external_storage_path (line 85) | def secondary_external_storage_path():
FILE: pythonforandroid/recipes/android/src/android/touch.py
class OnInterceptTouchListener (line 27) | class OnInterceptTouchListener(PythonJavaClass):
method __init__ (line 41) | def __init__(self, listener):
method onTouch (line 53) | def onTouch(self, event):
class TouchListener (line 68) | class TouchListener:
method register_listener (line 92) | def register_listener(cls, target_widget):
method unregister_listener (line 113) | def unregister_listener(cls):
method is_listener_set (line 125) | def is_listener_set(cls):
method _on_touch_listener (line 137) | def _on_touch_listener(cls, event):
method _pick (line 194) | def _pick(cls, widget, x, y):
FILE: pythonforandroid/recipes/apsw/__init__.py
class ApswRecipe (line 4) | class ApswRecipe(PyProjectRecipe):
method get_recipe_env (line 10) | def get_recipe_env(self, arch, **kwargs):
FILE: pythonforandroid/recipes/argon2-cffi/__init__.py
class Argon2Recipe (line 4) | class Argon2Recipe(CompiledComponentsPythonRecipe):
method get_recipe_env (line 11) | def get_recipe_env(self, arch):
FILE: pythonforandroid/recipes/atom/__init__.py
class AtomRecipe (line 4) | class AtomRecipe(PyProjectRecipe):
FILE: pythonforandroid/recipes/aubio/__init__.py
class AubioRecipe (line 12) | class AubioRecipe(PyProjectRecipe):
FILE: pythonforandroid/recipes/audiostream/__init__.py
class AudiostreamRecipe (line 8) | class AudiostreamRecipe(CythonRecipe):
method get_recipe_env (line 17) | def get_recipe_env(self, arch):
method postbuild_arch (line 37) | def postbuild_arch(self, arch):
FILE: pythonforandroid/recipes/av/__init__.py
class PyAVRecipe (line 5) | class PyAVRecipe(CythonRecipe):
method get_recipe_env (line 15) | def get_recipe_env(self, arch, with_flags_in_cc=True):
FILE: pythonforandroid/recipes/av_codecs/__init__.py
class PyAVCodecsRecipe (line 4) | class PyAVCodecsRecipe(Recipe):
method build_arch (line 7) | def build_arch(self, arch):
FILE: pythonforandroid/recipes/bcrypt/__init__.py
class BCryptRecipe (line 4) | class BCryptRecipe(CompiledComponentsPythonRecipe):
method get_recipe_env (line 11) | def get_recipe_env(self, arch):
FILE: pythonforandroid/recipes/bitarray/__init__.py
class BitarrayRecipe (line 4) | class BitarrayRecipe(CppCompiledComponentsPythonRecipe):
FILE: pythonforandroid/recipes/boost/__init__.py
class BoostRecipe (line 15) | class BoostRecipe(Recipe):
method versioned_url (line 51) | def versioned_url(self):
method should_build (line 59) | def should_build(self, arch):
method prebuild_arch (line 62) | def prebuild_arch(self, arch):
method build_arch (line 72) | def build_arch(self, arch):
method get_recipe_env (line 82) | def get_recipe_env(self, arch):
FILE: pythonforandroid/recipes/brokenrecipe/__init__.py
class BrokenRecipe (line 4) | class BrokenRecipe(Recipe):
method __init__ (line 5) | def __init__(self):
FILE: pythonforandroid/recipes/cffi/__init__.py
class CffiRecipe (line 5) | class CffiRecipe(PyProjectRecipe):
method get_hostrecipe_env (line 17) | def get_hostrecipe_env(self, arch=None):
method get_recipe_env (line 25) | def get_recipe_env(self, arch=None, **kwargs):
FILE: pythonforandroid/recipes/coincurve/__init__.py
class CoincurveRecipe (line 5) | class CoincurveRecipe(PythonRecipe):
method get_recipe_env (line 12) | def get_recipe_env(self, arch=None, with_flags_in_cc=True):
FILE: pythonforandroid/recipes/coverage/__init__.py
class CoverageRecipe (line 4) | class CoverageRecipe(PythonRecipe):
FILE: pythonforandroid/recipes/cryptography/__init__.py
class CryptographyRecipe (line 5) | class CryptographyRecipe(RustCompiledComponentsRecipe):
method get_recipe_env (line 12) | def get_recipe_env(self, arch, **kwargs):
FILE: pythonforandroid/recipes/cymunk/__init__.py
class CymunkRecipe (line 4) | class CymunkRecipe(CythonRecipe):
FILE: pythonforandroid/recipes/cython/__init__.py
class CythonRecipe (line 4) | class CythonRecipe(CompiledComponentsPythonRecipe):
FILE: pythonforandroid/recipes/decorator/__init__.py
class DecoratorPyRecipe (line 4) | class DecoratorPyRecipe(PythonRecipe):
FILE: pythonforandroid/recipes/enaml/__init__.py
class EnamlRecipe (line 4) | class EnamlRecipe(CppCompiledComponentsPythonRecipe):
FILE: pythonforandroid/recipes/ethash/__init__.py
class EthashRecipe (line 4) | class EthashRecipe(PythonRecipe):
FILE: pythonforandroid/recipes/evdev/__init__.py
class EvdevRecipe (line 4) | class EvdevRecipe(CompiledComponentsPythonRecipe):
method get_recipe_env (line 20) | def get_recipe_env(self, arch=None):
FILE: pythonforandroid/recipes/feedparser/__init__.py
class FeedparserPyRecipe (line 4) | class FeedparserPyRecipe(PythonRecipe):
FILE: pythonforandroid/recipes/ffmpeg/__init__.py
class FFMpegRecipe (line 7) | class FFMpegRecipe(Recipe):
method should_build (line 26) | def should_build(self, arch):
method get_recipe_env (line 30) | def get_recipe_env(self, arch):
method build_arch (line 35) | def build_arch(self, arch):
FILE: pythonforandroid/recipes/ffpyplayer/__init__.py
class FFPyPlayerRecipe (line 5) | class FFPyPlayerRecipe(PyProjectRecipe):
method get_recipe_env (line 12) | def get_recipe_env(self, arch, with_flags_in_cc=True):
FILE: pythonforandroid/recipes/ffpyplayer_codecs/__init__.py
class FFPyPlayerCodecsRecipe (line 4) | class FFPyPlayerCodecsRecipe(Recipe):
method build_arch (line 7) | def build_arch(self, arch):
FILE: pythonforandroid/recipes/flask/__init__.py
class FlaskRecipe (line 4) | class FlaskRecipe(PyProjectRecipe):
FILE: pythonforandroid/recipes/fontconfig/__init__.py
class FontconfigRecipe (line 8) | class FontconfigRecipe(BootstrapNDKRecipe):
method build_arch (line 14) | def build_arch(self, arch):
FILE: pythonforandroid/recipes/fortran/__init__.py
class GFortranRecipe (line 21) | class GFortranRecipe(Recipe):
method match_sha256 (line 27) | def match_sha256(self, file_path, expected_hash):
method ndk_version (line 36) | def ndk_version(self):
method get_cache_dir (line 44) | def get_cache_dir(self):
method get_fortran_dir (line 48) | def get_fortran_dir(self):
method get_incomplete_files (line 54) | def get_incomplete_files(self):
method download_if_necessary (line 63) | def download_if_necessary(self):
method download (line 69) | def download(self):
method extract_tar (line 78) | def extract_tar(self, file_path: Path, dest: Path, strip=1):
method create_flang_wrapper (line 89) | def create_flang_wrapper(self, path: Path, target: str):
method unpack (line 100) | def unpack(self, arch):
method bin_path (line 170) | def bin_path(self):
method get_host_platform (line 173) | def get_host_platform(self, arch):
method get_fortran_bin (line 181) | def get_fortran_bin(self, arch):
method get_fortran_flags (line 184) | def get_fortran_flags(self, arch):
FILE: pythonforandroid/recipes/freetype-py/__init__.py
class FreetypePyRecipe (line 4) | class FreetypePyRecipe(PyProjectRecipe):
method get_recipe_env (line 11) | def get_recipe_env(self, arch, **kwargs):
FILE: pythonforandroid/recipes/freetype/__init__.py
class FreetypeRecipe (line 9) | class FreetypeRecipe(Recipe):
method get_recipe_env (line 31) | def get_recipe_env(self, arch=None, with_harfbuzz=False):
method build_arch (line 63) | def build_arch(self, arch, with_harfbuzz=False):
method install_libraries (line 124) | def install_libraries(self, arch):
FILE: pythonforandroid/recipes/genericndkbuild/__init__.py
class GenericNDKBuildRecipe (line 8) | class GenericNDKBuildRecipe(BootstrapNDKRecipe):
method should_build (line 15) | def should_build(self, arch):
method get_recipe_env (line 18) | def get_recipe_env(self, arch=None, with_flags_in_cc=True, with_python...
method build_arch (line 28) | def build_arch(self, arch):
FILE: pythonforandroid/recipes/gevent/__init__.py
class GeventRecipe (line 16) | class GeventRecipe(PyProjectRecipe):
method get_recipe_env (line 22) | def get_recipe_env(self, arch, **kwargs):
FILE: pythonforandroid/recipes/greenlet/__init__.py
class GreenletRecipe (line 4) | class GreenletRecipe(PyProjectRecipe):
FILE: pythonforandroid/recipes/groestlcoin_hash/__init__.py
class GroestlcoinHashRecipe (line 4) | class GroestlcoinHashRecipe(CythonRecipe):
FILE: pythonforandroid/recipes/grpcio/__init__.py
class GrpcioRecipe (line 4) | class GrpcioRecipe(PyProjectRecipe):
method get_recipe_env (line 14) | def get_recipe_env(self, arch, **kwargs):
FILE: pythonforandroid/recipes/harfbuzz/__init__.py
class HarfbuzzRecipe (line 9) | class HarfbuzzRecipe(Recipe):
method get_recipe_env (line 28) | def get_recipe_env(self, arch=None):
method build_arch (line 45) | def build_arch(self, arch):
FILE: pythonforandroid/recipes/hostpython3/__init__.py
class HostPython3Recipe (line 27) | class HostPython3Recipe(Recipe):
method _exe_name (line 52) | def _exe_name(self):
method python_exe (line 61) | def python_exe(self):
method get_recipe_env (line 65) | def get_recipe_env(self, arch=None):
method should_build (line 76) | def should_build(self, arch):
method get_build_container_dir (line 83) | def get_build_container_dir(self, arch=None):
method get_build_dir (line 88) | def get_build_dir(self, arch=None):
method get_path_to_python (line 95) | def get_path_to_python(self):
method site_root (line 99) | def site_root(self):
method site_bin (line 103) | def site_bin(self):
method local_bin (line 107) | def local_bin(self):
method site_dir (line 111) | def site_dir(self):
method _pip (line 119) | def _pip(self):
method pip (line 123) | def pip(self):
method fix_pip_shebangs (line 126) | def fix_pip_shebangs(self):
method build_arch (line 145) | def build_arch(self, arch):
FILE: pythonforandroid/recipes/httpx/__init__.py
class HttpxRecipe (line 4) | class HttpxRecipe(PyProjectRecipe):
FILE: pythonforandroid/recipes/icu/__init__.py
class ICURecipe (line 11) | class ICURecipe(Recipe):
method versioned_url (line 34) | def versioned_url(self):
method get_recipe_dir (line 42) | def get_recipe_dir(self):
method build_arch (line 54) | def build_arch(self, arch):
method install_libraries (line 115) | def install_libraries(self, arch):
FILE: pythonforandroid/recipes/ifaddr/__init__.py
class IfaddrRecipe (line 4) | class IfaddrRecipe(PythonRecipe):
FILE: pythonforandroid/recipes/ifaddrs/__init__.py
class IFAddrRecipe (line 13) | class IFAddrRecipe(CompiledComponentsPythonRecipe):
method prebuild_arch (line 22) | def prebuild_arch(self, arch):
method build_arch (line 27) | def build_arch(self, arch):
FILE: pythonforandroid/recipes/jedi/__init__.py
class JediRecipe (line 4) | class JediRecipe(PythonRecipe):
FILE: pythonforandroid/recipes/jpeg/__init__.py
class JpegRecipe (line 8) | class JpegRecipe(Recipe):
method build_arch (line 21) | def build_arch(self, arch):
FILE: pythonforandroid/recipes/kivy/__init__.py
function get_kivy_version (line 10) | def get_kivy_version(recipe, arch):
function is_kivy_affected_by_deadlock_issue (line 19) | def is_kivy_affected_by_deadlock_issue(recipe=None, arch=None):
function is_kivy_less_than_3 (line 25) | def is_kivy_less_than_3(recipe=None, arch=None):
class KivyRecipe (line 31) | class KivyRecipe(PyProjectRecipe):
method need_stl_shared (line 50) | def need_stl_shared(self):
method get_recipe_env (line 56) | def get_recipe_env(self, arch, **kwargs):
FILE: pythonforandroid/recipes/kivy3/__init__.py
class Kivy3Recipe (line 5) | class Kivy3Recipe(PythonRecipe):
method build_arch (line 15) | def build_arch(self, arch):
FILE: pythonforandroid/recipes/kiwisolver/__init__.py
class KiwiSolverRecipe (line 4) | class KiwiSolverRecipe(PyProjectRecipe):
method get_recipe_env (line 11) | def get_recipe_env(self, arch, **kwargs):
FILE: pythonforandroid/recipes/leveldb/__init__.py
class LevelDBRecipe (line 9) | class LevelDBRecipe(Recipe):
method build_arch (line 16) | def build_arch(self, arch):
FILE: pythonforandroid/recipes/libbz2/__init__.py
class LibBz2Recipe (line 11) | class LibBz2Recipe(Recipe):
method build_arch (line 18) | def build_arch(self, arch: Arch) -> None:
method get_library_includes (line 31) | def get_library_includes(self, arch: Arch) -> str:
method get_library_ldflags (line 39) | def get_library_ldflags(self, arch: Arch) -> str:
method get_library_libs_flag (line 48) | def get_library_libs_flag() -> str:
FILE: pythonforandroid/recipes/libcairo/__init__.py
class LibCairoRecipe (line 9) | class LibCairoRecipe(MesonRecipe):
method get_recipe_env (line 22) | def get_recipe_env(self, arch, **kwargs):
method should_build (line 30) | def should_build(self, arch):
method build_arch (line 33) | def build_arch(self, arch):
FILE: pythonforandroid/recipes/libcurl/__init__.py
class LibcurlRecipe (line 9) | class LibcurlRecipe(Recipe):
method build_arch (line 15) | def build_arch(self, arch):
FILE: pythonforandroid/recipes/libexpat/__init__.py
class LibexpatRecipe (line 10) | class LibexpatRecipe(Recipe):
method build_arch (line 16) | def build_arch(self, arch):
FILE: pythonforandroid/recipes/libffi/__init__.py
class LibffiRecipe (line 9) | class LibffiRecipe(Recipe):
method build_arch (line 24) | def build_arch(self, arch):
method get_include_dirs (line 37) | def get_include_dirs(self, arch):
FILE: pythonforandroid/recipes/libgeos/__init__.py
class LibgeosRecipe (line 9) | class LibgeosRecipe(Recipe):
method build_arch (line 19) | def build_arch(self, arch):
FILE: pythonforandroid/recipes/libglob/__init__.py
class LibGlobRecipe (line 15) | class LibGlobRecipe(Recipe):
method should_build (line 31) | def should_build(self, arch):
method prebuild_arch (line 35) | def prebuild_arch(self, arch):
method build_arch (line 40) | def build_arch(self, arch):
FILE: pythonforandroid/recipes/libiconv/__init__.py
class LibIconvRecipe (line 8) | class LibIconvRecipe(Recipe):
method build_arch (line 16) | def build_arch(self, arch):
FILE: pythonforandroid/recipes/liblzma/__init__.py
class LibLzmaRecipe (line 12) | class LibLzmaRecipe(Recipe):
method build_arch (line 18) | def build_arch(self, arch: Arch) -> None:
method get_library_includes (line 47) | def get_library_includes(self, arch: Arch) -> str:
method get_library_ldflags (line 57) | def get_library_ldflags(self, arch: Arch) -> str:
method get_library_libs_flag (line 68) | def get_library_libs_flag() -> str:
FILE: pythonforandroid/recipes/libogg/__init__.py
class OggRecipe (line 6) | class OggRecipe(Recipe):
method build_arch (line 11) | def build_arch(self, arch):
FILE: pythonforandroid/recipes/libopenblas/__init__.py
class LibOpenBlasRecipe (line 10) | class LibOpenBlasRecipe(Recipe):
method build_arch (line 17) | def build_arch(self, arch):
FILE: pythonforandroid/recipes/libpcre/__init__.py
class LibpcreRecipe (line 9) | class LibpcreRecipe(Recipe):
method build_arch (line 15) | def build_arch(self, arch):
method get_lib_dir (line 27) | def get_lib_dir(self, arch):
FILE: pythonforandroid/recipes/libpq/__init__.py
class LibpqRecipe (line 6) | class LibpqRecipe(Recipe):
method get_recipe_env (line 11) | def get_recipe_env(self, arch):
method should_build (line 17) | def should_build(self, arch):
method build_arch (line 20) | def build_arch(self, arch):
FILE: pythonforandroid/recipes/libpthread/__init__.py
class LibPthread (line 9) | class LibPthread(Recipe):
method build_arch (line 20) | def build_arch(self, arch):
FILE: pythonforandroid/recipes/librt/__init__.py
class LibRt (line 9) | class LibRt(Recipe):
method build_arch (line 21) | def build_arch(self, arch):
FILE: pythonforandroid/recipes/libsecp256k1/__init__.py
class LibSecp256k1Recipe (line 9) | class LibSecp256k1Recipe(Recipe):
method build_arch (line 15) | def build_arch(self, arch):
FILE: pythonforandroid/recipes/libshine/__init__.py
class LibShineRecipe (line 9) | class LibShineRecipe(Recipe):
method get_recipe_env (line 15) | def get_recipe_env(self, arch=None, with_flags_in_cc=True):
method build_arch (line 23) | def build_arch(self, arch):
FILE: pythonforandroid/recipes/libsodium/__init__.py
class LibsodiumRecipe (line 9) | class LibsodiumRecipe(Recipe):
method versioned_url (line 17) | def versioned_url(self):
method build_arch (line 24) | def build_arch(self, arch):
method get_recipe_env (line 38) | def get_recipe_env(self, arch):
FILE: pythonforandroid/recipes/libtorrent/__init__.py
function get_lib_from (line 15) | def get_lib_from(search_directory, lib_extension='.so'):
class LibtorrentRecipe (line 27) | class LibtorrentRecipe(Recipe):
method should_build (line 59) | def should_build(self, arch):
method prebuild_arch (line 66) | def prebuild_arch(self, arch):
method build_arch (line 73) | def build_arch(self, arch):
method get_recipe_env (line 140) | def get_recipe_env(self, arch):
FILE: pythonforandroid/recipes/libtribler/__init__.py
class LibTriblerRecipe (line 10) | class LibTriblerRecipe(PythonRecipe):
FILE: pythonforandroid/recipes/libvorbis/__init__.py
class VorbisRecipe (line 7) | class VorbisRecipe(NDKRecipe):
method get_recipe_env (line 14) | def get_recipe_env(self, arch=None):
method build_arch (line 20) | def build_arch(self, arch):
FILE: pythonforandroid/recipes/libvpx/__init__.py
class VPXRecipe (line 16) | class VPXRecipe(Recipe):
method get_recipe_env (line 25) | def get_recipe_env(self, arch=None):
method build_arch (line 30) | def build_arch(self, arch):
FILE: pythonforandroid/recipes/libwebp/__init__.py
class LibwebpRecipe (line 11) | class LibwebpRecipe(Recipe):
method build_arch (line 22) | def build_arch(self, arch):
FILE: pythonforandroid/recipes/libx264/__init__.py
class LibX264Recipe (line 9) | class LibX264Recipe(Recipe):
method build_arch (line 14) | def build_arch(self, arch):
FILE: pythonforandroid/recipes/libxml2/__init__.py
class Libxml2Recipe (line 8) | class Libxml2Recipe(Recipe):
method build_arch (line 15) | def build_arch(self, arch):
method get_recipe_env (line 45) | def get_recipe_env(self, arch):
FILE: pythonforandroid/recipes/libxml2/glob.c
type uint_fast64_t (line 118) | typedef uint_fast64_t Char;
type Char (line 127) | typedef char Char;
type stat (line 145) | struct stat
type stat (line 151) | struct stat
function glob (line 166) | int
function globexp1 (line 240) | static int
function globexp2 (line 263) | static int
function Char (line 367) | static const Char *
function glob0 (line 433) | static int
function compare (line 520) | static int
function glob1 (line 526) | static int
function glob2 (line 543) | static int
function glob3 (line 601) | static int
function globextend (line 699) | static int
function match (line 750) | static int
function globfree (line 796) | void
function DIR (line 812) | static DIR *
function g_lstat (line 830) | static int
function g_stat (line 844) | static int
function Char (line 858) | static const Char *
function g_Ctoc (line 869) | static int
function qprintf (line 890) | static void
FILE: pythonforandroid/recipes/libxml2/glob.h
type __size_t (line 43) | typedef __size_t size_t;
type stat (line 47) | struct stat
type glob_t (line 48) | typedef struct {
FILE: pythonforandroid/recipes/libxslt/__init__.py
class LibxsltRecipe (line 8) | class LibxsltRecipe(Recipe):
method build_arch (line 20) | def build_arch(self, arch):
method get_recipe_env (line 49) | def get_recipe_env(self, arch):
FILE: pythonforandroid/recipes/libzbar/__init__.py
class LibZBarRecipe (line 9) | class LibZBarRecipe(Recipe):
method get_recipe_env (line 21) | def get_recipe_env(self, arch=None, with_flags_in_cc=True):
method build_arch (line 29) | def build_arch(self, arch):
FILE: pythonforandroid/recipes/libzmq/__init__.py
class LibZMQRecipe (line 8) | class LibZMQRecipe(Recipe):
method build_arch (line 15) | def build_arch(self, arch):
FILE: pythonforandroid/recipes/lxml/__init__.py
class LXMLRecipe (line 6) | class LXMLRecipe(CompiledComponentsPythonRecipe):
method should_build (line 14) | def should_build(self, arch):
method get_recipe_env (line 31) | def get_recipe_env(self, arch):
FILE: pythonforandroid/recipes/m2crypto/__init__.py
class M2CryptoRecipe (line 8) | class M2CryptoRecipe(CompiledComponentsPythonRecipe):
method build_compiled_components (line 15) | def build_compiled_components(self, arch):
method get_recipe_env (line 34) | def get_recipe_env(self, arch):
FILE: pythonforandroid/recipes/materialyoucolor/__init__.py
class MaterialyoucolorRecipe (line 4) | class MaterialyoucolorRecipe(PyProjectRecipe):
method get_recipe_env (line 9) | def get_recipe_env(self, arch, **kwargs):
FILE: pythonforandroid/recipes/matplotlib/__init__.py
class MatplotlibRecipe (line 8) | class MatplotlibRecipe(MesonRecipe):
method get_recipe_env (line 17) | def get_recipe_env(self, arch, **kwargs):
method build_arch (line 22) | def build_arch(self, arch):
FILE: pythonforandroid/recipes/moderngl/__init__.py
class ModernGLRecipe (line 4) | class ModernGLRecipe(CppCompiledComponentsPythonRecipe):
method get_recipe_env (line 11) | def get_recipe_env(self, arch):
FILE: pythonforandroid/recipes/msgpack-python/__init__.py
class MsgPackRecipe (line 4) | class MsgPackRecipe(CythonRecipe):
FILE: pythonforandroid/recipes/netifaces/__init__.py
class NetifacesRecipe (line 4) | class NetifacesRecipe(CompiledComponentsPythonRecipe):
FILE: pythonforandroid/recipes/numpy/__init__.py
class NumpyRecipe (line 8) | class NumpyRecipe(MesonRecipe):
method get_recipe_meson_options (line 16) | def get_recipe_meson_options(self, arch):
method get_recipe_env (line 25) | def get_recipe_env(self, arch, **kwargs):
method build_arch (line 39) | def build_arch(self, arch):
method get_hostrecipe_env (line 43) | def get_hostrecipe_env(self, arch=None):
FILE: pythonforandroid/recipes/omemo-backend-signal/__init__.py
class OmemoBackendSignalRecipe (line 4) | class OmemoBackendSignalRecipe(PythonRecipe):
FILE: pythonforandroid/recipes/omemo/__init__.py
class OmemoRecipe (line 4) | class OmemoRecipe(PythonRecipe):
FILE: pythonforandroid/recipes/openal/__init__.py
class OpenALRecipe (line 7) | class OpenALRecipe(NDKRecipe):
method build_arch (line 13) | def build_arch(self, arch):
FILE: pythonforandroid/recipes/opencv/__init__.py
class OpenCVRecipe (line 11) | class OpenCVRecipe(NDKRecipe):
method get_lib_dir (line 39) | def get_lib_dir(self, arch):
method get_recipe_env (line 42) | def get_recipe_env(self, arch):
method build_arch (line 48) | def build_arch(self, arch):
FILE: pythonforandroid/recipes/opencv_extras/__init__.py
class OpenCVExtrasRecipe (line 4) | class OpenCVExtrasRecipe(Recipe):
FILE: pythonforandroid/recipes/openssl/__init__.py
class OpenSSLRecipe (line 10) | class OpenSSLRecipe(Recipe):
method get_build_dir (line 56) | def get_build_dir(self, arch):
method include_flags (line 61) | def include_flags(self, arch):
method link_dirs_flags (line 67) | def link_dirs_flags(self, arch):
method link_libs_flags (line 73) | def link_libs_flags(self):
method link_flags (line 79) | def link_flags(self, arch):
method get_recipe_env (line 84) | def get_recipe_env(self, arch=None):
method select_build_arch (line 94) | def select_build_arch(self, arch):
method build_arch (line 108) | def build_arch(self, arch):
FILE: pythonforandroid/recipes/pandas/__init__.py
class PandasRecipe (line 5) | class PandasRecipe(MesonRecipe):
method get_recipe_env (line 14) | def get_recipe_env(self, arch, **kwargs):
method build_arch (line 32) | def build_arch(self, arch):
FILE: pythonforandroid/recipes/pil/__init__.py
class PilRecipe (line 5) | class PilRecipe(PillowRecipe):
method build_arch (line 15) | def build_arch(self, arch):
FILE: pythonforandroid/recipes/png/__init__.py
class PngRecipe (line 8) | class PngRecipe(Recipe):
method build_arch (line 14) | def build_arch(self, arch):
FILE: pythonforandroid/recipes/preppy/__init__.py
class PreppyRecipe (line 4) | class PreppyRecipe(PythonRecipe):
FILE: pythonforandroid/recipes/primp/__init__.py
class PrimpRecipe (line 5) | class PrimpRecipe(RustCompiledComponentsRecipe):
method get_recipe_env_post (line 9) | def get_recipe_env_post(self, arch, **kwargs):
method get_recipe_env_pre (line 14) | def get_recipe_env_pre(self, arch, **kwargs):
method build_arch (line 19) | def build_arch(self, arch):
FILE: pythonforandroid/recipes/protobuf_cpp/__init__.py
class ProtobufCppRecipe (line 13) | class ProtobufCppRecipe(CppCompiledComponentsPythonRecipe):
method prebuild_arch (line 28) | def prebuild_arch(self, arch):
method build_arch (line 72) | def build_arch(self, arch):
method build_compiled_components (line 99) | def build_compiled_components(self, arch):
method install_python_package (line 109) | def install_python_package(self, arch):
method get_recipe_env (line 132) | def get_recipe_env(self, arch):
FILE: pythonforandroid/recipes/psycopg2/__init__.py
class Psycopg2Recipe (line 6) | class Psycopg2Recipe(PythonRecipe):
method prebuild_arch (line 19) | def prebuild_arch(self, arch):
method get_recipe_env (line 28) | def get_recipe_env(self, arch):
method install_python_package (line 34) | def install_python_package(self, arch, name=None, env=None, is_dir=True):
FILE: pythonforandroid/recipes/py3dns/__init__.py
class Py3DNSRecipe (line 4) | class Py3DNSRecipe(PythonRecipe):
FILE: pythonforandroid/recipes/pyaml/__init__.py
class PyamlRecipe (line 4) | class PyamlRecipe(PythonRecipe):
FILE: pythonforandroid/recipes/pybind11/__init__.py
class Pybind11Recipe (line 5) | class Pybind11Recipe(PythonRecipe):
method get_include_dir (line 13) | def get_include_dir(self, arch):
FILE: pythonforandroid/recipes/pycairo/__init__.py
class PyCairoRecipe (line 5) | class PyCairoRecipe(MesonRecipe):
method build_arch (line 13) | def build_arch(self, arch):
FILE: pythonforandroid/recipes/pycparser/__init__.py
class PycparserRecipe (line 4) | class PycparserRecipe(PythonRecipe):
FILE: pythonforandroid/recipes/pycrypto/__init__.py
class PyCryptoRecipe (line 10) | class PyCryptoRecipe(CompiledComponentsPythonRecipe):
method get_recipe_env (line 18) | def get_recipe_env(self, arch=None):
method build_compiled_components (line 32) | def build_compiled_components(self, arch):
FILE: pythonforandroid/recipes/pycryptodome/__init__.py
class PycryptodomeRecipe (line 4) | class PycryptodomeRecipe(PyProjectRecipe):
FILE: pythonforandroid/recipes/pydantic-core/__init__.py
class PydanticcoreRecipe (line 4) | class PydanticcoreRecipe(RustCompiledComponentsRecipe):
FILE: pythonforandroid/recipes/pygame/__init__.py
class Pygame2Recipe (line 7) | class Pygame2Recipe(CompiledComponentsPythonRecipe):
method prebuild_arch (line 26) | def prebuild_arch(self, arch):
method get_recipe_env (line 64) | def get_recipe_env(self, arch):
FILE: pythonforandroid/recipes/pyicu/__init__.py
class PyICURecipe (line 5) | class PyICURecipe(CppCompiledComponentsPythonRecipe):
method get_recipe_env (line 12) | def get_recipe_env(self, arch):
FILE: pythonforandroid/recipes/pyjnius/__init__.py
class PyjniusRecipe (line 8) | class PyjniusRecipe(PyProjectRecipe):
method get_recipe_env (line 21) | def get_recipe_env(self, arch, **kwargs):
method postbuild_arch (line 37) | def postbuild_arch(self, arch):
FILE: pythonforandroid/recipes/pyleveldb/__init__.py
class PyLevelDBRecipe (line 4) | class PyLevelDBRecipe(CppCompiledComponentsPythonRecipe):
method get_recipe_env (line 12) | def get_recipe_env(self, arch):
FILE: pythonforandroid/recipes/pymunk/__init__.py
class PymunkRecipe (line 4) | class PymunkRecipe(CompiledComponentsPythonRecipe):
method get_recipe_env (line 11) | def get_recipe_env(self, arch):
FILE: pythonforandroid/recipes/pynacl/__init__.py
class PyNaCLRecipe (line 5) | class PyNaCLRecipe(PyProjectRecipe):
method get_recipe_env (line 14) | def get_recipe_env(self, arch, **kwargs):
FILE: pythonforandroid/recipes/pyogg/__init__.py
class PyOggRecipe (line 5) | class PyOggRecipe(PythonRecipe):
FILE: pythonforandroid/recipes/pyopenal/__init__.py
class PyOpenALRecipe (line 5) | class PyOpenALRecipe(PythonRecipe):
FILE: pythonforandroid/recipes/pyopenssl/__init__.py
class PyOpenSSLRecipe (line 5) | class PyOpenSSLRecipe(PythonRecipe):
FILE: pythonforandroid/recipes/pyproj/__init__.py
class PyProjRecipe (line 4) | class PyProjRecipe(CythonRecipe):
FILE: pythonforandroid/recipes/pyrxp/__init__.py
class PyRXPURecipe (line 4) | class PyRXPURecipe(CompiledComponentsPythonRecipe):
FILE: pythonforandroid/recipes/pysdl2/__init__.py
class PySDL2Recipe (line 4) | class PySDL2Recipe(PythonRecipe):
FILE: pythonforandroid/recipes/pysha3/__init__.py
class Pysha3Recipe (line 6) | class Pysha3Recipe(PythonRecipe):
method get_recipe_env (line 12) | def get_recipe_env(self, arch=None, with_flags_in_cc=True):
FILE: pythonforandroid/recipes/python3/__init__.py
class Python3Recipe (line 25) | class Python3Recipe(TargetPythonRecipe):
method __init__ (line 161) | def __init__(self, *args, **kwargs):
method _libpython (line 166) | def _libpython(self):
method link_version (line 173) | def link_version(self):
method apply_patches (line 185) | def apply_patches(self, arch, build_dir=None):
method include_root (line 213) | def include_root(self, arch_name):
method link_root (line 216) | def link_root(self, arch_name):
method should_build (line 219) | def should_build(self, arch):
method prebuild_arch (line 222) | def prebuild_arch(self, arch):
method get_recipe_env (line 226) | def get_recipe_env(self, arch=None, with_flags_in_cc=True):
method set_libs_flags (line 256) | def set_libs_flags(self, env, arch):
method build_arch (line 331) | def build_arch(self, arch):
method compile_python_files (line 386) | def compile_python_files(self, dir):
method create_python_bundle (line 399) | def create_python_bundle(self, dirn, arch):
FILE: pythonforandroid/recipes/pyusb/__init__.py
class PyusbRecipe (line 4) | class PyusbRecipe(PythonRecipe):
FILE: pythonforandroid/recipes/pyzbar/__init__.py
class PyZBarRecipe (line 5) | class PyZBarRecipe(PythonRecipe):
method get_recipe_env (line 15) | def get_recipe_env(self, arch=None, with_flags_in_cc=True):
FILE: pythonforandroid/recipes/pyzmq/__init__.py
class PyZMQRecipe (line 11) | class PyZMQRecipe(CythonRecipe):
method get_recipe_env (line 21) | def get_recipe_env(self, arch=None):
method build_cython_components (line 33) | def build_cython_components(self, arch):
FILE: pythonforandroid/recipes/regex/__init__.py
class RegexRecipe (line 4) | class RegexRecipe(CompiledComponentsPythonRecipe):
FILE: pythonforandroid/recipes/reportlab/__init__.py
class ReportLabRecipe (line 9) | class ReportLabRecipe(CompiledComponentsPythonRecipe):
method prebuild_arch (line 15) | def prebuild_arch(self, arch):
FILE: pythonforandroid/recipes/ruamel.yaml/__init__.py
class RuamelYamlRecipe (line 4) | class RuamelYamlRecipe(PythonRecipe):
FILE: pythonforandroid/recipes/scipy/__init__.py
class ScipyRecipe (line 8) | class ScipyRecipe(MesonRecipe):
method get_recipe_meson_options (line 18) | def get_recipe_meson_options(self, arch):
method place_wrapper (line 34) | def place_wrapper(self, arch):
method get_recipe_env (line 49) | def get_recipe_env(self, arch, **kwargs):
method build_arch (line 59) | def build_arch(self, arch):
FILE: pythonforandroid/recipes/scipy/wrapper.py
function main (line 33) | def main(argv: typing.List[str]):
FILE: pythonforandroid/recipes/scrypt/__init__.py
class ScryptRecipe (line 4) | class ScryptRecipe(CythonRecipe):
method get_recipe_env (line 12) | def get_recipe_env(self, arch, with_flags_in_cc=True):
FILE: pythonforandroid/recipes/sdl2/__init__.py
class LibSDL2Recipe (line 8) | class LibSDL2Recipe(BootstrapNDKRecipe):
method get_recipe_env (line 19) | def get_recipe_env(self, arch=None, with_flags_in_cc=True, with_python...
method should_build (line 25) | def should_build(self, arch):
method build_arch (line 30) | def build_arch(self, arch):
FILE: pythonforandroid/recipes/sdl2_image/__init__.py
class LibSDL2Image (line 7) | class LibSDL2Image(BootstrapNDKRecipe):
method get_include_dirs (line 14) | def get_include_dirs(self, arch):
method prebuild_arch (line 19) | def prebuild_arch(self, arch):
FILE: pythonforandroid/recipes/sdl2_mixer/__init__.py
class LibSDL2Mixer (line 6) | class LibSDL2Mixer(BootstrapNDKRecipe):
method get_include_dirs (line 11) | def get_include_dirs(self, arch):
FILE: pythonforandroid/recipes/sdl2_ttf/__init__.py
class LibSDL2TTF (line 4) | class LibSDL2TTF(BootstrapNDKRecipe):
FILE: pythonforandroid/recipes/sdl3/__init__.py
class LibSDL3Recipe (line 8) | class LibSDL3Recipe(BootstrapNDKRecipe):
method get_recipe_env (line 19) | def get_recipe_env(
method get_include_dirs (line 30) | def get_include_dirs(self, arch):
method should_build (line 36) | def should_build(self, arch):
method build_arch (line 47) | def build_arch(self, arch):
FILE: pythonforandroid/recipes/sdl3_image/__init__.py
class LibSDL3Image (line 8) | class LibSDL3Image(BootstrapNDKRecipe):
method get_include_dirs (line 15) | def get_include_dirs(self, arch):
method prebuild_arch (line 29) | def prebuild_arch(self, arch):
FILE: pythonforandroid/recipes/sdl3_mixer/__init__.py
class LibSDL3Mixer (line 8) | class LibSDL3Mixer(BootstrapNDKRecipe):
method get_include_dirs (line 15) | def get_include_dirs(self, arch):
method prebuild_arch (line 29) | def prebuild_arch(self, arch):
FILE: pythonforandroid/recipes/sdl3_ttf/__init__.py
class LibSDL3TTF (line 8) | class LibSDL3TTF(BootstrapNDKRecipe):
method get_include_dirs (line 13) | def get_include_dirs(self, arch):
method prebuild_arch (line 27) | def prebuild_arch(self, arch):
FILE: pythonforandroid/recipes/secp256k1/__init__.py
class Secp256k1Recipe (line 5) | class Secp256k1Recipe(CppCompiledComponentsPythonRecipe):
method get_recipe_env (line 26) | def get_recipe_env(self, arch=None):
FILE: pythonforandroid/recipes/setuptools/__init__.py
class SetuptoolsRecipe (line 4) | class SetuptoolsRecipe(PyProjectRecipe):
FILE: pythonforandroid/recipes/shapely/__init__.py
class ShapelyRecipe (line 5) | class ShapelyRecipe(CythonRecipe):
method get_recipe_env (line 20) | def get_recipe_env(self, arch=None, with_flags_in_cc=True):
FILE: pythonforandroid/recipes/snappy/__init__.py
class SnappyRecipe (line 8) | class SnappyRecipe(Recipe):
method build_arch (line 13) | def build_arch(self, arch):
FILE: pythonforandroid/recipes/spine/__init__.py
class SpineCython (line 4) | class SpineCython(CythonRecipe):
FILE: pythonforandroid/recipes/sqlalchemy/__init__.py
class SQLAlchemyRecipe (line 4) | class SQLAlchemyRecipe(PyProjectRecipe):
method versioned_url (line 11) | def versioned_url(self):
FILE: pythonforandroid/recipes/sqlite3/__init__.py
class Sqlite3Recipe (line 8) | class Sqlite3Recipe(Recipe):
method build_arch (line 13) | def build_arch(self, arch):
FILE: pythonforandroid/recipes/storm/__init__.py
class StormRecipe (line 5) | class StormRecipe(PythonRecipe):
method prebuild_arch (line 12) | def prebuild_arch(self, arch):
FILE: pythonforandroid/recipes/tflite-runtime/__init__.py
class TFLiteRuntimeRecipe (line 8) | class TFLiteRuntimeRecipe(PythonRecipe):
method should_build (line 33) | def should_build(self, arch):
method build_arch (line 42) | def build_arch(self, arch):
FILE: pythonforandroid/recipes/tiktoken/__init__.py
class TiktokenRecipe (line 4) | class TiktokenRecipe(RustCompiledComponentsRecipe):
FILE: pythonforandroid/recipes/twisted/__init__.py
class TwistedRecipe (line 7) | class TwistedRecipe(CythonRecipe):
method prebuild_arch (line 17) | def prebuild_arch(self, arch):
method get_recipe_env (line 28) | def get_recipe_env(self, arch):
FILE: pythonforandroid/recipes/ujson/__init__.py
class UJsonRecipe (line 4) | class UJsonRecipe(CompiledComponentsPythonRecipe):
FILE: pythonforandroid/recipes/uvloop/__init__.py
class UvloopRecipe (line 4) | class UvloopRecipe(PyProjectRecipe):
method get_recipe_env (line 9) | def get_recipe_env(self, arch, **kwargs):
FILE: pythonforandroid/recipes/vispy/__init__.py
class VispyRecipe (line 4) | class VispyRecipe(PythonRecipe):
FILE: pythonforandroid/recipes/vlc/__init__.py
class VlcRecipe (line 8) | class VlcRecipe(Recipe):
method prebuild_arch (line 20) | def prebuild_arch(self, arch):
method build_arch (line 52) | def build_arch(self, arch):
FILE: pythonforandroid/recipes/wsaccel/__init__.py
class WSAccellRecipe (line 4) | class WSAccellRecipe(CythonRecipe):
FILE: pythonforandroid/recipes/x3dh/__init__.py
class X3DHRecipe (line 4) | class X3DHRecipe(PythonRecipe):
FILE: pythonforandroid/recipes/xeddsa/__init__.py
class XedDSARecipe (line 7) | class XedDSARecipe(CythonRecipe):
method build_arch (line 19) | def build_arch(self, arch):
FILE: pythonforandroid/recipes/zbar/__init__.py
class ZBarRecipe (line 5) | class ZBarRecipe(PythonRecipe):
method get_recipe_env (line 22) | def get_recipe_env(self, arch=None, with_flags_in_cc=True):
FILE: pythonforandroid/recipes/zbarlight/__init__.py
class ZBarLightRecipe (line 5) | class ZBarLightRecipe(PythonRecipe):
method get_recipe_env (line 15) | def get_recipe_env(self, arch=None, with_flags_in_cc=True):
FILE: pythonforandroid/recipes/zeroconf/__init__.py
class ZeroconfRecipe (line 4) | class ZeroconfRecipe(PythonRecipe):
FILE: pythonforandroid/recipes/zope/__init__.py
class ZopeRecipe (line 6) | class ZopeRecipe(PythonRecipe):
method get_recipe_env (line 13) | def get_recipe_env(self, arch):
method postbuild_arch (line 22) | def postbuild_arch(self, arch):
FILE: pythonforandroid/recipes/zope_interface/__init__.py
class ZopeInterfaceRecipe (line 8) | class ZopeInterfaceRecipe(PythonRecipe):
method build_arch (line 17) | def build_arch(self, arch):
method prebuild_arch (line 26) | def prebuild_arch(self, arch):
FILE: pythonforandroid/recommendations.py
function check_ndk_version (line 51) | def check_ndk_version(ndk_dir):
function read_ndk_version (line 112) | def read_ndk_version(ndk_dir):
function check_target_api (line 147) | def check_target_api(api, arch):
function check_ndk_api (line 174) | def check_ndk_api(ndk_api, android_api):
function check_python_version (line 207) | def check_python_version():
function print_recommendations (line 221) | def print_recommendations():
FILE: pythonforandroid/toolchain.py
function add_boolean_option (line 56) | def add_boolean_option(parser, names, no_names=None,
function require_prebuilt_dist (line 83) | def require_prebuilt_dist(func):
function dist_from_args (line 109) | def dist_from_args(ctx, args):
function build_dist_from_args (line 124) | def build_dist_from_args(ctx, dist, args):
function split_argument_list (line 177) | def split_argument_list(arg_list):
class NoAbbrevParser (line 183) | class NoAbbrevParser(argparse.ArgumentParser):
method _get_option_tuples (line 191) | def _get_option_tuples(self, option_string):
class ToolchainCL (line 195) | class ToolchainCL:
method __init__ (line 197) | def __init__(self):
method warn_on_carriage_return_args (line 680) | def warn_on_carriage_return_args(args):
method warn_on_deprecated_args (line 686) | def warn_on_deprecated_args(self, args):
method hook (line 715) | def hook(self, name):
method default_storage_dir (line 729) | def default_storage_dir(self):
method _read_configuration (line 736) | def _read_configuration():
method recipes (line 749) | def recipes(self, args):
method bootstraps (line 790) | def bootstraps(self, _args):
method clean (line 799) | def clean(self, args):
method clean_all (line 817) | def clean_all(self, args):
method clean_dists (line 824) | def clean_dists(self, _args):
method clean_bootstrap_builds (line 830) | def clean_bootstrap_builds(self, _args):
method clean_builds (line 839) | def clean_builds(self, _args):
method clean_recipe_build (line 853) | def clean_recipe_build(self, args):
method clean_download_cache (line 868) | def clean_download_cache(self, args):
method export_dist (line 894) | def export_dist(self, args):
method _dist (line 914) | def _dist(self):
method _fix_args (line 921) | def _fix_args(args):
method _prepare_release_env (line 961) | def _prepare_release_env(args):
method _build_package (line 981) | def _build_package(self, args, package_type):
method _finish_package (line 1052) | def _finish_package(self, args, output, build_args, package_type, outp...
method apk (line 1107) | def apk(self, args):
method aar (line 1113) | def aar(self, args):
method aab (line 1119) | def aab(self, args):
method create (line 1125) | def create(self, args):
method archs (line 1131) | def archs(self, _args):
method dists (line 1138) | def dists(self, args):
method distributions (line 1142) | def distributions(self, _args):
method delete_dist (line 1156) | def delete_dist(self, _args):
method sdk_tools (line 1164) | def sdk_tools(self, args):
method adb (line 1183) | def adb(self, args):
method logcat (line 1190) | def logcat(self, args):
method _adb (line 1195) | def _adb(self, commands):
method recommendations (line 1213) | def recommendations(self, args):
method build_status (line 1216) | def build_status(self, _args):
FILE: pythonforandroid/util.py
function current_directory (line 27) | def current_directory(new_dir):
function temp_directory (line 39) | def temp_directory():
function walk_valid_filens (line 51) | def walk_valid_filens(base_dir, invalid_dir_names, invalid_file_patterns...
function load_source (line 88) | def load_source(module, filename):
class BuildInterruptingException (line 102) | class BuildInterruptingException(Exception):
method __init__ (line 103) | def __init__(self, message, instructions=None):
function handle_build_exception (line 109) | def handle_build_exception(exception):
function rmdir (line 120) | def rmdir(dn, ignore_errors=False):
function ensure_dir (line 127) | def ensure_dir(dn):
function move (line 134) | def move(source, destination):
function touch (line 139) | def touch(filename):
function build_tools_version_sort_key (line 143) | def build_tools_version_sort_key(
function max_build_tool_version (line 164) | def max_build_tool_version(
function patch_wheel_setuptools_logging (line 176) | def patch_wheel_setuptools_logging():
FILE: setup.py
function recursively_include (line 34) | def recursively_include(results, directory, patterns):
FILE: testapps/on_device_unit_tests/test_app/app_flask.py
function get_html_for_tested_modules (line 39) | def get_html_for_tested_modules(tested_modules, failed_tests):
function get_test_service (line 56) | def get_test_service():
function start_service (line 62) | def start_service():
function stop_service (line 70) | def stop_service():
function index (line 79) | def index():
function unittests (line 88) | def unittests():
function page2 (line 121) | def page2():
function loadUrl (line 129) | def loadUrl():
function vibrate (line 143) | def vibrate():
function orientation (line 157) | def orientation():
function service (line 171) | def service():
FILE: testapps/on_device_unit_tests/test_app/app_kivy.py
class TestKivyApp (line 44) | class TestKivyApp(App):
method build (line 52) | def build(self):
method on_start (line 57) | def on_start(self):
method reset_unittests_results (line 60) | def reset_unittests_results(self, refresh_ui=False):
method on_tests_to_perform (line 72) | def on_tests_to_perform(self, *args):
method run_unittests (line 81) | def run_unittests(self, *args):
method set_color_for_tested_modules (line 103) | def set_color_for_tested_modules(self, restart=False):
method on_generated_images (line 126) | def on_generated_images(self, *args):
method test_vibration_with_pyjnius (line 136) | def test_vibration_with_pyjnius(self, *args):
method service_time (line 140) | def service_time(self):
method on_service_running (line 145) | def on_service_running(self, *args):
method start_service (line 156) | def start_service(self):
method stop_service (line 164) | def stop_service(self):
FILE: testapps/on_device_unit_tests/test_app/app_service.py
function service_timer (line 21) | def service_timer():
FILE: testapps/on_device_unit_tests/test_app/tests/mixin.py
class PythonTestMixIn (line 4) | class PythonTestMixIn(object):
method test_import_module (line 8) | def test_import_module(self):
method test_run_module (line 19) | def test_run_module(self):
FILE: testapps/on_device_unit_tests/test_app/tests/test_requirements.py
class NumpyTestCase (line 6) | class NumpyTestCase(PythonTestMixIn, TestCase):
method test_run_module (line 9) | def test_run_module(self):
class ScipyTestCase (line 15) | class ScipyTestCase(PythonTestMixIn, TestCase):
method test_run_module (line 18) | def test_run_module(self):
class OpensslTestCase (line 35) | class OpensslTestCase(PythonTestMixIn, TestCase):
method test_run_module (line 38) | def test_run_module(self):
class Sqlite3TestCase (line 45) | class Sqlite3TestCase(PythonTestMixIn, TestCase):
method test_run_module (line 48) | def test_run_module(self):
class KivyTestCase (line 55) | class KivyTestCase(PythonTestMixIn, TestCase):
method test_run_module (line 58) | def test_run_module(self):
class PyjniusTestCase (line 64) | class PyjniusTestCase(PythonTestMixIn, TestCase):
method test_run_module (line 67) | def test_run_module(self):
class LibffiTestCase (line 73) | class LibffiTestCase(PythonTestMixIn, TestCase):
method test_run_module (line 76) | def test_run_module(self):
class RequestsTestCase (line 89) | class RequestsTestCase(PythonTestMixIn, TestCase):
method test_run_module (line 92) | def test_run_module(self):
class PillowTestCase (line 98) | class PillowTestCase(PythonTestMixIn, TestCase):
method test_run_module (line 101) | def test_run_module(self):
class MatplotlibTestCase (line 145) | class MatplotlibTestCase(PythonTestMixIn, TestCase):
method test_run_module (line 148) | def test_run_module(self):
class CryptographyTestCase (line 168) | class CryptographyTestCase(PythonTestMixIn, TestCase):
method test_run_module (line 171) | def test_run_module(self):
class PycryptoTestCase (line 181) | class PycryptoTestCase(PythonTestMixIn, TestCase):
method test_run_module (line 184) | def test_run_module(self):
class PycryptodomeTestCase (line 193) | class PycryptodomeTestCase(PythonTestMixIn, TestCase):
method test_run_module (line 196) | def test_run_module(self):
class ScryptTestCase (line 217) | class ScryptTestCase(PythonTestMixIn, TestCase):
method test_run_module (line 220) | def test_run_module(self):
class M2CryptoTestCase (line 227) | class M2CryptoTestCase(PythonTestMixIn, TestCase):
method test_run_module (line 230) | def test_run_module(self):
class Pysha3TestCase (line 235) | class Pysha3TestCase(PythonTestMixIn, TestCase):
method test_run_module (line 238) | def test_run_module(self):
class LibtorrentTestCase (line 247) | class LibtorrentTestCase(PythonTestMixIn, TestCase):
method test_run_module (line 250) | def test_run_module(self):
class Pyside6TestCase (line 256) | class Pyside6TestCase(PythonTestMixIn, TestCase):
method test_run_module (line 259) | def test_run_module(self):
class Shiboken6TestCase (line 268) | class Shiboken6TestCase(PythonTestMixIn, TestCase):
method test_run_module (line 271) | def test_run_module(self):
FILE: testapps/on_device_unit_tests/test_app/tools.py
function run_test_suites_into_buffer (line 19) | def run_test_suites_into_buffer(suites):
function get_images_with_extension (line 26) | def get_images_with_extension(path=APP_PATH, extension='*.png'):
function load_kv_from (line 36) | def load_kv_from(kv_name):
function raise_error (line 48) | def raise_error(error):
function get_failed_unittests_from (line 63) | def get_failed_unittests_from(unittests_output, set_of_tests):
function skip_if_not_running_from_android_device (line 72) | def skip_if_not_running_from_android_device(func):
function get_android_python_activity (line 94) | def get_android_python_activity():
function vibrate_with_pyjnius (line 106) | def vibrate_with_pyjnius(time=1000):
function set_device_orientation (line 139) | def set_device_orientation(direction):
function setup_lifecycle_callbacks (line 166) | def setup_lifecycle_callbacks():
FILE: testapps/on_device_unit_tests/test_app/widgets.py
class Spacer20 (line 14) | class Spacer20(Widget):
class TestImage (line 18) | class TestImage(BoxLayout):
class CircularButton (line 23) | class CircularButton(ButtonBehavior, Widget):
method collide_point (line 24) | def collide_point(self, x, y):
class ErrorPopup (line 28) | class ErrorPopup(Popup):
FILE: testapps/on_device_unit_tests/test_qt/recipes/PySide6/__init__.py
class PySideRecipe (line 13) | class PySideRecipe(PythonRecipe):
method build_arch (line 25) | def build_arch(self, arch):
FILE: testapps/on_device_unit_tests/test_qt/recipes/shiboken6/__init__.py
class ShibokenRecipe (line 13) | class ShibokenRecipe(PythonRecipe):
method build_arch (line 25) | def build_arch(self, arch):
FILE: testapps/testapp_sqlite_openssl/main.py
class Person (line 50) | class Person(Model):
class Meta (line 55) | class Meta:
method __repr__ (line 58) | def __repr__(self):
method __str__ (line 61) | def __str__(self):
class ErrorPopup (line 162) | class ErrorPopup(Popup):
function raise_error (line 165) | def raise_error(error):
class TestApp (line 169) | class TestApp(App):
method build (line 176) | def build(self):
method print_something (line 187) | def print_something(self, *args):
method on_pause (line 190) | def on_pause(self):
method test_pyjnius (line 193) | def test_pyjnius(self, *args):
method test_ctypes (line 224) | def test_ctypes(self, *args):
method test_numpy (line 227) | def test_numpy(self, *args):
FILE: tests/recipes/recipe_ctx.py
class RecipeCtx (line 11) | class RecipeCtx:
method setUp (line 34) | def setUp(self):
method tearDown (line 53) | def tearDown(self):
FILE: tests/recipes/recipe_lib_test.py
class BaseTestForMakeRecipe (line 6) | class BaseTestForMakeRecipe(RecipeCtx):
method __init__ (line 28) | def __init__(self, *args, **kwargs):
method test_get_recipe_env (line 39) | def test_get_recipe_env(
method test_build_arch (line 76) | def test_build_arch(
class BaseTestForCmakeRecipe (line 107) | class BaseTestForCmakeRecipe(BaseTestForMakeRecipe):
method test_build_arch (line 120) | def test_build_arch(
FILE: tests/recipes/test_freetype.py
class TestFreetypeRecipe (line 5) | class TestFreetypeRecipe(BaseTestForMakeRecipe, unittest.TestCase):
FILE: tests/recipes/test_gevent.py
class TestGeventRecipe (line 6) | class TestGeventRecipe(RecipeCtx, unittest.TestCase):
method test_get_recipe_env (line 10) | def test_get_recipe_env(self):
FILE: tests/recipes/test_harfbuzz.py
class TestHarfbuzzRecipe (line 5) | class TestHarfbuzzRecipe(BaseTestForMakeRecipe, unittest.TestCase):
FILE: tests/recipes/test_hostpython3.py
class TestHostPython3Recipe (line 13) | class TestHostPython3Recipe(RecipeCtx, unittest.TestCase):
method test_property__exe_name_no_version (line 19) | def test_property__exe_name_no_version(self):
method test_property__exe_name (line 29) | def test_property__exe_name(self):
method test_property_python_exe (line 32) | def test_property_python_exe(self):
method test_should_build (line 39) | def test_should_build(self, mock_exists):
method test_build_arch (line 49) | def test_build_arch(self, mock_makedirs, mock_chdir):
method test_build_arch_python_lower_than_3_8 (line 96) | def test_build_arch_python_lower_than_3_8(self, mock_makedirs, mock_ch...
method test_build_arch_setup_dist_exception (line 141) | def test_build_arch_setup_dist_exception(self, mock_makedirs, mock_chd...
FILE: tests/recipes/test_icu.py
class TestIcuRecipe (line 9) | class TestIcuRecipe(RecipeCtx, unittest.TestCase):
method test_url (line 16) | def test_url(self):
method test_url_none (line 23) | def test_url_none(self, mock_url):
method test_get_recipe_dir (line 27) | def test_get_recipe_dir(self):
method test_build_arch (line 37) | def test_build_arch(
method test_install_libraries (line 101) | def test_install_libraries(self, mock_makedirs, mock_sh_cp):
method test_get_recipe_dir_with_local_recipes (line 107) | def test_get_recipe_dir_with_local_recipes(self, mock_exists):
FILE: tests/recipes/test_jpeg.py
class TestJpegRecipe (line 5) | class TestJpegRecipe(BaseTestForCmakeRecipe, unittest.TestCase):
FILE: tests/recipes/test_leveldb.py
class TestLeveldbRecipe (line 5) | class TestLeveldbRecipe(BaseTestForCmakeRecipe, unittest.TestCase):
FILE: tests/recipes/test_libbz2.py
class TestLibBz2Recipe (line 6) | class TestLibBz2Recipe(BaseTestForMakeRecipe, unittest.TestCase):
method test_get_library_includes (line 11) | def test_get_library_includes(self):
method test_get_library_ldflags (line 20) | def test_get_library_ldflags(self):
method test_link_libs_flags (line 29) | def test_link_libs_flags(self):
FILE: tests/recipes/test_libcurl.py
class TestLibcurlRecipe (line 5) | class TestLibcurlRecipe(BaseTestForMakeRecipe, unittest.TestCase):
FILE: tests/recipes/test_libexpat.py
class TestLibexpatRecipe (line 5) | class TestLibexpatRecipe(BaseTestForMakeRecipe, unittest.TestCase):
FILE: tests/recipes/test_libffi.py
class TestLibffiRecipe (line 5) | class TestLibffiRecipe(BaseTestForMakeRecipe, unittest.TestCase):
method test_get_include_dirs (line 12) | def test_get_include_dirs(self):
FILE: tests/recipes/test_libgeos.py
class TestLibgeosRecipe (line 6) | class TestLibgeosRecipe(BaseTestForCmakeRecipe, unittest.TestCase):
method test_build_arch (line 16) | def test_build_arch(
FILE: tests/recipes/test_libiconv.py
class TestLibiconvRecipe (line 5) | class TestLibiconvRecipe(BaseTestForMakeRecipe, unittest.TestCase):
FILE: tests/recipes/test_liblzma.py
class TestLibLzmaRecipe (line 6) | class TestLibLzmaRecipe(BaseTestForMakeRecipe, unittest.TestCase):
method test_get_library_includes (line 11) | def test_get_library_includes(self):
method test_get_library_ldflags (line 21) | def test_get_library_ldflags(self):
method test_link_libs_flags (line 31) | def test_link_libs_flags(self):
method test_install_dir_not_named_install (line 37) | def test_install_dir_not_named_install(self):
FILE: tests/recipes/test_libogg.py
class TestLiboggRecipe (line 5) | class TestLiboggRecipe(BaseTestForMakeRecipe, unittest.TestCase):
FILE: tests/recipes/test_libpq.py
class TestLibpqRecipe (line 6) | class TestLibpqRecipe(BaseTestForMakeRecipe, unittest.TestCase):
method test_build_arch (line 17) | def test_build_arch(
FILE: tests/recipes/test_libsecp256k1.py
class TestLibsecp256k1Recipe (line 5) | class TestLibsecp256k1Recipe(BaseTestForMakeRecipe, unittest.TestCase):
FILE: tests/recipes/test_libshine.py
class TestLibshineRecipe (line 5) | class TestLibshineRecipe(BaseTestForMakeRecipe, unittest.TestCase):
FILE: tests/recipes/test_libvorbis.py
class TestLibvorbisRecipe (line 6) | class TestLibvorbisRecipe(BaseTestForMakeRecipe, unittest.TestCase):
method test_build_arch (line 18) | def test_build_arch(
FILE: tests/recipes/test_libvpx.py
class TestLibVPXRecipe (line 5) | class TestLibVPXRecipe(BaseTestForMakeRecipe, unittest.TestCase):
FILE: tests/recipes/test_libx264.py
class TestLibx264Recipe (line 5) | class TestLibx264Recipe(BaseTestForMakeRecipe, unittest.TestCase):
FILE: tests/recipes/test_libxml2.py
class TestLibxml2Recipe (line 5) | class TestLibxml2Recipe(BaseTestForMakeRecipe, unittest.TestCase):
FILE: tests/recipes/test_libxslt.py
class TestLibxsltRecipe (line 5) | class TestLibxsltRecipe(BaseTestForMakeRecipe, unittest.TestCase):
FILE: tests/recipes/test_openal.py
class TestOpenalRecipe (line 6) | class TestOpenalRecipe(BaseTestForCmakeRecipe, unittest.TestCase):
method test_prebuild_arch (line 18) | def test_prebuild_arch(
method test_build_arch (line 45) | def test_build_arch(
FILE: tests/recipes/test_openssl.py
class TestOpensslRecipe (line 6) | class TestOpensslRecipe(BaseTestForMakeRecipe, unittest.TestCase):
method test_build_arch (line 17) | def test_build_arch(
method test_include_flags (line 27) | def test_include_flags(self):
method test_link_flags (line 33) | def test_link_flags(self):
method test_select_build_arch (line 40) | def test_select_build_arch(self):
FILE: tests/recipes/test_pandas.py
class TestPandasRecipe (line 9) | class TestPandasRecipe(RecipeCtx, unittest.TestCase):
method test_get_recipe_env (line 18) | def test_get_recipe_env(
FILE: tests/recipes/test_png.py
class TestPngRecipe (line 5) | class TestPngRecipe(BaseTestForMakeRecipe, unittest.TestCase):
FILE: tests/recipes/test_pyicu.py
class TestPyIcuRecipe (line 7) | class TestPyIcuRecipe(RecipeCtx, unittest.TestCase):
method test_get_recipe_env (line 16) | def test_get_recipe_env(
FILE: tests/recipes/test_python3.py
class TestPython3Recipe (line 13) | class TestPython3Recipe(RecipeCtx, unittest.TestCase):
method test_property__libpython (line 23) | def test_property__libpython(self):
method test_include_root (line 29) | def test_include_root(self):
method test_link_root (line 37) | def test_link_root(self):
method test_compile_python_files (line 46) | def test_compile_python_files(self, mock_subprocess):
method test_get_recipe_env (line 56) | def test_get_recipe_env(
method test_set_libs_flags (line 78) | def test_set_libs_flags(self):
method test_build_arch (line 87) | def test_build_arch(
method test_build_arch_wrong_ndk_api (line 130) | def test_build_arch_wrong_ndk_api(self):
FILE: tests/recipes/test_reportlab.py
class TestReportLabRecipe (line 8) | class TestReportLabRecipe(RecipeCtx, unittest.TestCase):
method setUp (line 11) | def setUp(self):
method test_prebuild_arch (line 19) | def test_prebuild_arch(self):
FILE: tests/recipes/test_sdl2_mixer.py
class TestSDL2MixerRecipe (line 5) | class TestSDL2MixerRecipe(RecipeCtx, unittest.TestCase):
method setUp (line 11) | def setUp(self):
method test_get_include_dirs (line 17) | def test_get_include_dirs(self):
FILE: tests/recipes/test_snappy.py
class TestSnappyRecipe (line 5) | class TestSnappyRecipe(BaseTestForCmakeRecipe, unittest.TestCase):
FILE: tests/test_androidmodule_ctypes_finder.py
function test_get_activity_lib_dir (line 30) | def test_get_activity_lib_dir():
function test_find_library (line 68) | def test_find_library():
function test_does_libname_match_filename (line 109) | def test_does_libname_match_filename():
FILE: tests/test_androidndk.py
class TestAndroidNDK (line 7) | class TestAndroidNDK(unittest.TestCase):
method setUp (line 13) | def setUp(self):
method test_host_tag_linux (line 19) | def test_host_tag_linux(self):
method test_host_tag_darwin (line 25) | def test_host_tag_darwin(self):
method test_llvm_prebuilt_dir (line 30) | def test_llvm_prebuilt_dir(self):
method test_llvm_bin_dir (line 38) | def test_llvm_bin_dir(self):
method test_clang (line 46) | def test_clang(self):
method test_clang_cxx (line 54) | def test_clang_cxx(self):
method test_llvm_ar (line 62) | def test_llvm_ar(self):
method test_llvm_ranlib (line 70) | def test_llvm_ranlib(self):
method test_llvm_objcopy (line 78) | def test_llvm_objcopy(self):
method test_llvm_objdump (line 86) | def test_llvm_objdump(self):
method test_llvm_readelf (line 94) | def test_llvm_readelf(self):
method test_llvm_strip (line 102) | def test_llvm_strip(self):
method test_sysroot (line 110) | def test_sysroot(self):
method test_sysroot_include_dir (line 118) | def test_sysroot_include_dir(self):
method test_sysroot_lib_dir (line 126) | def test_sysroot_lib_dir(self):
method test_libcxx_include_dir (line 134) | def test_libcxx_include_dir(self):
FILE: tests/test_archs.py
class ArchSetUpBaseClass (line 38) | class ArchSetUpBaseClass(object):
method setUp (line 50) | def setUp(self):
class TestArch (line 74) | class TestArch(ArchSetUpBaseClass, unittest.TestCase):
method test_arch (line 81) | def test_arch(self):
class TestArchARM (line 89) | class TestArchARM(ArchSetUpBaseClass, unittest.TestCase):
method test_arch_arm (line 97) | def test_arch_arm(self, mock_ensure_dir, mock_shutil_which):
class TestArchARMv7a (line 178) | class TestArchARMv7a(ArchSetUpBaseClass, unittest.TestCase):
method test_arch_armv7a (line 187) | def test_arch_armv7a(
class TestArchX86 (line 238) | class TestArchX86(ArchSetUpBaseClass, unittest.TestCase):
method test_arch_x86 (line 246) | def test_arch_x86(self, mock_ensure_dir, mock_shutil_which):
class TestArchX86_64 (line 280) | class TestArchX86_64(ArchSetUpBaseClass, unittest.TestCase):
method test_arch_x86_64 (line 289) | def test_arch_x86_64(
class TestArchAArch64 (line 325) | class TestArchAArch64(ArchSetUpBaseClass, unittest.TestCase):
method test_arch_aarch_64 (line 334) | def test_arch_aarch_64(
FILE: tests/test_bdistapk.py
class TestArgvContains (line 13) | class TestArgvContains:
method test_argv_contains_present (line 16) | def test_argv_contains_present(self):
method test_argv_contains_partial_match (line 22) | def test_argv_contains_partial_match(self):
method test_argv_contains_not_present (line 28) | def test_argv_contains_not_present(self):
class TestBdist (line 35) | class TestBdist:
method setup_method (line 38) | def setup_method(self):
method test_initialize_options (line 48) | def test_initialize_options(self, mock_rmdir, mock_ensure_dir):
method test_finalize_options_injects_defaults (line 61) | def test_finalize_options_injects_defaults(
method test_finalize_options_permissions_handling (line 78) | def test_finalize_options_permissions_handling(
method test_run_calls_main (line 104) | def test_run_calls_main(
method test_prepare_build_dir_no_main_py (line 128) | def test_prepare_build_dir_no_main_py(
method test_prepare_build_dir_with_main_py (line 153) | def test_prepare_build_dir_with_main_py(
class TestBdistSubclasses (line 173) | class TestBdistSubclasses:
method setup_method (line 176) | def setup_method(self):
method test_bdist_apk_package_type (line 184) | def test_bdist_apk_package_type(self):
method test_bdist_aar_package_type (line 190) | def test_bdist_aar_package_type(self):
method test_bdist_aab_package_type (line 196) | def test_bdist_aab_package_type(self):
FILE: tests/test_bootstrap.py
class BaseClassSetupBootstrap (line 21) | class BaseClassSetupBootstrap:
method setUp (line 30) | def setUp(self):
method setUp_distribution_with_bootstrap (line 46) | def setUp_distribution_with_bootstrap(self, bs):
method tearDown (line 58) | def tearDown(self):
class TestBootstrapBasic (line 66) | class TestBootstrapBasic(BaseClassSetupBootstrap, unittest.TestCase):
method test_attributes (line 74) | def test_attributes(self):
method test_build_dist_dirs (line 94) | def test_build_dist_dirs(self):
method test__cmp_bootstraps_by_priority (line 109) | def test__cmp_bootstraps_by_priority(self):
method test_all_bootstraps (line 143) | def test_all_bootstraps(self):
method test_expand_dependencies (line 164) | def test_expand_dependencies(self):
method test_expand_dependencies_with_pure_python_package (line 184) | def test_expand_dependencies_with_pure_python_package(self):
method test_get_bootstraps_from_recipes (line 198) | def test_get_bootstraps_from_recipes(self):
method test_prepare_dist_dir (line 256) | def test_prepare_dist_dir(self, mock_ensure_dir):
method test_bootstrap_prepare_build_dir (line 270) | def test_bootstrap_prepare_build_dir(
method test_bootstrap_prepare_build_dir_with_java_src (line 300) | def test_bootstrap_prepare_build_dir_with_java_src(
class GenericBootstrapTest (line 339) | class GenericBootstrapTest(BaseClassSetupBootstrap):
method bootstrap_name (line 351) | def bootstrap_name(self):
method test_assemble_distribution (line 367) | def test_assemble_distribution(
method test_distribute_methods (line 476) | def test_distribute_methods(
method test_bootstrap_strip (line 544) | def test_bootstrap_strip(
method test_bootstrap_fry_eggs (line 583) | def test_bootstrap_fry_eggs(
class TestBootstrapSdl2 (line 619) | class TestBootstrapSdl2(GenericBootstrapTest, unittest.TestCase):
method bootstrap_name (line 627) | def bootstrap_name(self):
class TestBootstrapSdl3 (line 631) | class TestBootstrapSdl3(GenericBootstrapTest, unittest.TestCase):
method bootstrap_name (line 639) | def bootstrap_name(self):
class TestBootstrapServiceOnly (line 643) | class TestBootstrapServiceOnly(GenericBootstrapTest, unittest.TestCase):
method bootstrap_name (line 651) | def bootstrap_name(self):
class TestBootstrapWebview (line 655) | class TestBootstrapWebview(GenericBootstrapTest, unittest.TestCase):
method bootstrap_name (line 663) | def bootstrap_name(self):
class TestBootstrapEmpty (line 667) | class TestBootstrapEmpty(GenericBootstrapTest, unittest.TestCase):
method bootstrap_name (line 679) | def bootstrap_name(self):
method test_assemble_distribution (line 682) | def test_assemble_distribution(self, *args):
class TestBootstrapQt (line 693) | class TestBootstrapQt(GenericBootstrapTest, unittest.TestCase):
method bootstrap_name (line 701) | def bootstrap_name(self):
FILE: tests/test_bootstrap_build.py
class TestBootstrapBuild (line 9) | class TestBootstrapBuild(unittest.TestCase):
method setUp (line 10) | def setUp(self):
class TestParsePermissions (line 33) | class TestParsePermissions(TestBootstrapBuild):
method test_parse_permissions_with_migrations (line 34) | def test_parse_permissions_with_migrations(self):
method test_parse_permissions_invalid_property (line 67) | def test_parse_permissions_invalid_property(self):
class TestOrientationArg (line 85) | class TestOrientationArg(TestBootstrapBuild):
method test_no_orientation_args (line 86) | def test_no_orientation_args(self):
method test_manifest_orientation_present (line 100) | def test_manifest_orientation_present(self):
method test_manifest_orientation_supported (line 121) | def test_manifest_orientation_supported(self):
method test_android_manifest_multiple_orientation_supported (line 134) | def test_android_manifest_multiple_orientation_supported(self):
method test_sdl_orientation_hint_single (line 153) | def test_sdl_orientation_hint_single(self):
method test_sdl_orientation_hint_multiple (line 163) | def test_sdl_orientation_hint_multiple(self):
FILE: tests/test_build.py
class TestBuildBasic (line 13) | class TestBuildBasic(unittest.TestCase):
method test_run_pymodules_install_optional_project_dir (line 15) | def test_run_pymodules_install_optional_project_dir(self):
method test_python_module_parser (line 29) | def test_python_module_parser(self):
method test_strip_if_with_debug_symbols (line 40) | def test_strip_if_with_debug_symbols(self):
class TestTemplates (line 71) | class TestTemplates(unittest.TestCase):
method test_android_manifest_xml (line 73) | def test_android_manifest_xml(self):
class TestContext (line 114) | class TestContext(unittest.TestCase):
method test_sdk_ndk_paths (line 119) | def test_sdk_ndk_paths(
FILE: tests/test_checkdependencies.py
class TestCheckPythonDependencies (line 7) | class TestCheckPythonDependencies:
method test_all_modules_present (line 11) | def test_all_modules_present(self, mock_import):
method test_missing_module_without_version (line 45) | def test_missing_module_without_version(self, mock_import, mock_print,...
method test_missing_module_with_version (line 70) | def test_missing_module_with_version(self, mock_import, mock_print, mo...
method test_module_version_too_old (line 95) | def test_module_version_too_old(self, mock_import, mock_print, mock_ex...
method test_module_version_acceptable (line 120) | def test_module_version_acceptable(self, mock_import):
method test_module_without_version_attribute (line 145) | def test_module_without_version_attribute(self, mock_import):
class TestCheck (line 164) | class TestCheck:
method test_check_with_skip_prerequisites (line 169) | def test_check_with_skip_prerequisites(self, mock_prereqs, mock_python...
method test_check_without_skip (line 179) | def test_check_without_skip(self, mock_prereqs, mock_python_deps):
method test_check_with_skip_set_to_zero (line 189) | def test_check_with_skip_set_to_zero(self, mock_prereqs, mock_python_d...
FILE: tests/test_distribution.py
class TestDistribution (line 24) | class TestDistribution(unittest.TestCase):
method setUp (line 32) | def setUp(self):
method setUp_distribution_with_bootstrap (line 48) | def setUp_distribution_with_bootstrap(self, bs, **kwargs):
method tearDown (line 60) | def tearDown(self):
method test_properties (line 65) | def test_properties(self):
method test_folder_exist (line 80) | def test_folder_exist(self, mock_exists):
method test_delete (line 95) | def test_delete(self, mock_rmdir):
method test_get_distribution_no_name (line 108) | def test_get_distribution_no_name(self, mock_exists):
method test_save_info (line 119) | def test_save_info(self, mock_open_dist_info, mock_chdir):
method test_get_distributions (line 139) | def test_get_distributions(
method test_get_distributions_error_ndk_api (line 176) | def test_get_distributions_error_ndk_api(
method test_get_distributions_error_ndk_api_mismatch (line 203) | def test_get_distributions_error_ndk_api_mismatch(
method test_get_distributions_error_extra_dist_dirs (line 234) | def test_get_distributions_error_extra_dist_dirs(self):
method test_get_distributions_possible_dists (line 255) | def test_get_distributions_possible_dists(self, mock_get_dists):
FILE: tests/test_entrypoints.py
class TestMain (line 7) | class TestMain:
method test_main_success (line 12) | def test_main_success(self, mock_check_version, mock_toolchain):
method test_main_build_interrupting_exception (line 22) | def test_main_build_interrupting_exception(
method test_main_other_exception_propagates (line 37) | def test_main_other_exception_propagates(
method test_main_python_version_check_fails (line 53) | def test_main_python_version_check_fails(self, mock_check_version):
FILE: tests/test_graph.py
function get_fake_recipe (line 52) | def get_fake_recipe(name, depends=None, conflicts=None):
function register_fake_recipes_for_test (line 62) | def register_fake_recipes_for_test(monkeypatch, recipe_list):
function test_valid_recipe_order_and_bootstrap (line 75) | def test_valid_recipe_order_and_bootstrap(names, bootstrap):
function test_invalid_recipe_order_and_bootstrap (line 80) | def test_invalid_recipe_order_and_bootstrap(names, bootstrap):
function test_blacklist (line 86) | def test_blacklist():
function test_get_dependency_tuple_list_for_recipe (line 110) | def test_get_dependency_tuple_list_for_recipe(monkeypatch):
function test_valid_obvious_conflict_checker (line 122) | def test_valid_obvious_conflict_checker(names, bootstrap):
function test_invalid_obvious_conflict_checker (line 131) | def test_invalid_obvious_conflict_checker(names, bootstrap):
function test_misc_obvious_conflict_checker (line 139) | def test_misc_obvious_conflict_checker(monkeypatch):
function test_indirectconflict_obvious_conflict_checker (line 175) | def test_indirectconflict_obvious_conflict_checker(monkeypatch):
function test_multichoice_obvious_conflict_checker (line 196) | def test_multichoice_obvious_conflict_checker(monkeypatch):
function test_bootstrap_dependency_addition (line 211) | def test_bootstrap_dependency_addition():
function test_graph_deplist_transformation (line 217) | def test_graph_deplist_transformation():
function test_bootstrap_dependency_addition2 (line 228) | def test_bootstrap_dependency_addition2():
FILE: tests/test_logger.py
class TestColorSetup (line 9) | class TestColorSetup:
method teardown_method (line 12) | def teardown_method(self):
method test_setup_color_never (line 16) | def test_setup_color_never(self):
method test_setup_color_always (line 24) | def test_setup_color_always(self):
method test_setup_color_auto_with_tty (line 34) | def test_setup_color_auto_with_tty(self, mock_stderr, mock_stdout):
class TestUtilityFunctions (line 43) | class TestUtilityFunctions:
method test_shorten_string_short (line 46) | def test_shorten_string_short(self):
method test_shorten_string_long (line 51) | def test_shorten_string_long(self):
method test_shorten_string_bytes (line 59) | def test_shorten_string_bytes(self):
method test_get_console_width_from_env (line 66) | def test_get_console_width_from_env(self):
method test_get_console_width_from_stty (line 73) | def test_get_console_width_from_stty(self, mock_popen):
method test_get_console_width_default (line 82) | def test_get_console_width_default(self, mock_popen):
class TestLevelDifferentiatingFormatter (line 89) | class TestLevelDifferentiatingFormatter:
method test_format_error_level (line 92) | def test_format_error_level(self):
method test_format_warning_level (line 102) | def test_format_warning_level(self):
method test_format_info_level (line 112) | def test_format_info_level(self):
method test_format_debug_level (line 122) | def test_format_debug_level(self):
class TestShprintErrorHandling (line 133) | class TestShprintErrorHandling:
method test_shprint_with_filter (line 137) | def test_shprint_with_filter(self, mock_width):
method test_shprint_with_filterout (line 152) | def test_shprint_with_filterout(self, mock_width):
method test_shprint_full_debug_mode (line 168) | def test_shprint_full_debug_mode(self, mock_stdout, mock_width):
method test_shprint_critical_failure_exits (line 181) | def test_shprint_critical_failure_exits(self, mock_width):
class TestLoggingHelpers (line 204) | class TestLoggingHelpers:
method test_info_main (line 208) | def test_info_main(self, mock_logger):
method test_info_notify (line 218) | def test_info_notify(self, mock_info):
class TestShprint (line 226) | class TestShprint(unittest.TestCase):
method test_unicode_encode (line 228) | def test_unicode_encode(self):
FILE: tests/test_patching.py
class TestPlatformChecks (line 24) | class TestPlatformChecks:
method test_is_platform_linux (line 28) | def test_is_platform_linux(self, mock_uname):
method test_is_platform_darwin (line 35) | def test_is_platform_darwin(self, mock_uname):
method test_is_platform_case_insensitive (line 42) | def test_is_platform_case_insensitive(self, mock_uname):
method test_is_platform_mismatch (line 49) | def test_is_platform_mismatch(self, mock_uname):
method test_is_linux (line 55) | def test_is_linux(self):
method test_is_darwin (line 61) | def test_is_darwin(self):
method test_is_windows (line 67) | def test_is_windows(self):
class TestArchChecks (line 74) | class TestArchChecks:
method test_is_arch_match (line 77) | def test_is_arch_match(self):
method test_is_arch_mismatch (line 83) | def test_is_arch_mismatch(self):
class TestAndroidAPIChecks (line 90) | class TestAndroidAPIChecks:
method test_is_api_equal (line 93) | def test_is_api_equal(self):
method test_is_api_not_equal (line 100) | def test_is_api_not_equal(self):
method test_is_api_gt (line 107) | def test_is_api_gt(self):
method test_is_api_gte (line 117) | def test_is_api_gte(self):
method test_is_api_lt (line 131) | def test_is_api_lt(self):
method test_is_api_lte (line 141) | def test_is_api_lte(self):
class TestNDKChecks (line 156) | class TestNDKChecks:
method test_is_ndk_equal (line 159) | def test_is_ndk_equal(self):
method test_is_ndk_not_equal (line 167) | def test_is_ndk_not_equal(self):
class TestVersionChecks (line 177) | class TestVersionChecks:
method test_is_version_gt (line 180) | def test_is_version_gt(self):
method test_is_version_lt (line 189) | def test_is_version_lt(self):
method test_version_starts_with (line 198) | def test_version_starts_with(self):
class TestWillBuild (line 211) | class TestWillBuild:
method test_will_build_present (line 214) | def test_will_build_present(self):
method test_will_build_absent (line 221) | def test_will_build_absent(self):
class TestConjunctions (line 229) | class TestConjunctions:
method test_check_all_all_true (line 232) | def test_check_all_all_true(self):
method test_check_all_one_false (line 246) | def test_check_all_one_false(self):
method test_check_all_all_false (line 260) | def test_check_all_all_false(self):
method test_check_any_one_true (line 271) | def test_check_any_one_true(self):
method test_check_any_all_false (line 285) | def test_check_any_all_false(self):
method test_check_any_all_true (line 296) | def test_check_any_all_true(self):
method test_combined_checks (line 308) | def test_combined_checks(self, mock_uname):
FILE: tests/test_prerequisites.py
class PrerequisiteSetUpBaseClass (line 22) | class PrerequisiteSetUpBaseClass:
method setUp (line 23) | def setUp(self):
method test_is_mandatory_on_darwin (line 28) | def test_is_mandatory_on_darwin(self):
method test_is_mandatory_on_linux (line 31) | def test_is_mandatory_on_linux(self):
method test_installer_is_supported_on_darwin (line 34) | def test_installer_is_supported_on_darwin(self):
method test_installer_is_supported_on_linux (line 40) | def test_installer_is_supported_on_linux(self):
method test_darwin_pkg_config_location (line 46) | def test_darwin_pkg_config_location(self):
method test_linux_pkg_config_location (line 49) | def test_linux_pkg_config_location(self):
method test_pkg_config_location_property__darwin (line 53) | def test_pkg_config_location_property__darwin(self):
method test_pkg_config_location_property__linux (line 60) | def test_pkg_config_location_property__linux(self):
class TestJDKPrerequisite (line 67) | class TestJDKPrerequisite(PrerequisiteSetUpBaseClass, unittest.TestCase):
method setUp (line 68) | def setUp(self):
class TestBrewPrerequisite (line 75) | class TestBrewPrerequisite(PrerequisiteSetUpBaseClass, unittest.TestCase):
method setUp (line 76) | def setUp(self):
method test_darwin_checker (line 83) | def test_darwin_checker(self, shutil_which):
method test_darwin_helper (line 90) | def test_darwin_helper(self, info):
class TestOpenSSLPrerequisite (line 99) | class TestOpenSSLPrerequisite(PrerequisiteSetUpBaseClass, unittest.TestC...
method setUp (line 100) | def setUp(self):
method test_darwin_checker (line 111) | def test_darwin_checker(self, _darwin_get_brew_formula_location_prefix):
method test_darwin_installer (line 123) | def test_darwin_installer(self, check_output):
method test_darwin_pkg_config_location (line 132) | def test_darwin_pkg_config_location(self, _darwin_get_brew_formula_loc...
class TestAutoconfPrerequisite (line 142) | class TestAutoconfPrerequisite(PrerequisiteSetUpBaseClass, unittest.Test...
method setUp (line 143) | def setUp(self):
method test_darwin_checker (line 152) | def test_darwin_checker(self, _darwin_get_brew_formula_location_prefix):
method test_darwin_installer (line 164) | def test_darwin_installer(self, check_output):
class TestAutomakePrerequisite (line 169) | class TestAutomakePrerequisite(PrerequisiteSetUpBaseClass, unittest.Test...
method setUp (line 170) | def setUp(self):
method test_darwin_checker (line 179) | def test_darwin_checker(self, _darwin_get_brew_formula_location_prefix):
method test_darwin_installer (line 191) | def test_darwin_installer(self, check_output):
class TestLibtoolPrerequisite (line 196) | class TestLibtoolPrerequisite(PrerequisiteSetUpBaseClass, unittest.TestC...
method setUp (line 197) | def setUp(self):
method test_darwin_checker (line 206) | def test_darwin_checker(self, _darwin_get_brew_formula_location_prefix):
method test_darwin_installer (line 218) | def test_darwin_installer(self, check_output):
class TestPkgConfigPrerequisite (line 223) | class TestPkgConfigPrerequisite(PrerequisiteSetUpBaseClass, unittest.Tes...
method setUp (line 224) | def setUp(self):
method test_darwin_checker (line 233) | def test_darwin_checker(self, _darwin_get_brew_formula_location_prefix):
method test_darwin_installer (line 245) | def test_darwin_installer(self, check_output):
class TestCmakePrerequisite (line 250) | class TestCmakePrerequisite(PrerequisiteSetUpBaseClass, unittest.TestCase):
method setUp (line 251) | def setUp(self):
method test_darwin_checker (line 260) | def test_darwin_checker(self, _darwin_get_brew_formula_location_prefix):
method test_darwin_installer (line 272) | def test_darwin_installer(self, check_output):
class TestDefaultPrerequisitesCheckandInstall (line 277) | class TestDefaultPrerequisitesCheckandInstall(unittest.TestCase):
method test_default_darwin_prerequisites_set (line 279) | def test_default_darwin_prerequisites_set(self):
method test_default_linux_prerequisites_set (line 297) | def test_default_linux_prerequisites_set(self):
class TestPrerequisiteBaseClass (line 308) | class TestPrerequisiteBaseClass:
method test_is_valid_when_met (line 313) | def test_is_valid_when_met(self, mock_checker, mock_info):
method test_is_valid_when_not_met_non_mandatory (line 324) | def test_is_valid_when_not_met_non_mandatory(self, mock_checker, mock_...
method test_is_valid_when_not_met_mandatory (line 338) | def test_is_valid_when_not_met_mandatory(self, mock_checker, mock_error):
method test_checker_calls_linux_checker (line 351) | def test_checker_calls_linux_checker(self, mock_linux_checker):
method test_checker_calls_darwin_checker (line 361) | def test_checker_calls_darwin_checker(self, mock_darwin_checker):
method test_checker_raises_on_unsupported_platform (line 370) | def test_checker_raises_on_unsupported_platform(self):
class TestPrerequisiteInstallation (line 377) | class TestPrerequisiteInstallation:
method test_ask_to_install_user_accepts (line 382) | def test_ask_to_install_user_accepts(self, mock_input):
method test_ask_to_install_user_declines (line 392) | def test_ask_to_install_user_declines(self, mock_input):
method test_ask_to_install_non_interactive (line 402) | def test_ask_to_install_non_interactive(self, mock_info):
method test_install_when_user_accepts_linux (line 415) | def test_install_when_user_accepts_linux(self, mock_info, mock_install...
method test_install_when_user_accepts_darwin (line 426) | def test_install_when_user_accepts_darwin(self, mock_installer, mock_a...
method test_install_when_user_declines (line 436) | def test_install_when_user_declines(self, mock_info, mock_ask):
method test_install_is_supported (line 445) | def test_install_is_supported(self):
class TestJDKPrerequisiteVersionChecking (line 453) | class TestJDKPrerequisiteVersionChecking:
method test_darwin_jdk_is_supported_valid_version (line 458) | def test_darwin_jdk_is_supported_valid_version(self, mock_exists, mock...
method test_darwin_jdk_is_supported_invalid_version (line 474) | def test_darwin_jdk_is_supported_invalid_version(self, mock_exists, mo...
method test_darwin_jdk_is_supported_no_javac (line 488) | def test_darwin_jdk_is_supported_no_javac(self, mock_exists):
method test_darwin_get_libexec_jdk_path (line 496) | def test_darwin_get_libexec_jdk_path(self, mock_run):
method test_darwin_checker_uses_java_home_env (line 509) | def test_darwin_checker_uses_java_home_env(self, mock_is_supported):
class TestHomebrewHelpers (line 519) | class TestHomebrewHelpers:
method test_darwin_get_brew_formula_location_prefix_success (line 523) | def test_darwin_get_brew_formula_location_prefix_success(self, mock_po...
method test_darwin_get_brew_formula_location_prefix_failure (line 539) | def test_darwin_get_brew_formula_location_prefix_failure(self, mock_er...
method test_darwin_get_brew_formula_location_prefix_with_installed_flag (line 552) | def test_darwin_get_brew_formula_location_prefix_with_installed_flag(s...
class TestCheckAndInstallPrerequisites (line 564) | class TestCheckAndInstallPrerequisites:
method test_check_and_install_all_met (line 568) | def test_check_and_install_all_met(self, mock_get_prereqs):
method test_check_and_install_some_not_met (line 589) | def test_check_and_install_some_not_met(self, mock_get_prereqs):
FILE: tests/test_pythonpackage.py
function local_repo_folder (line 22) | def local_repo_folder():
function test_get_package_dependencies (line 28) | def test_get_package_dependencies():
function test_extract_metainfo_files_from_package (line 67) | def test_extract_metainfo_files_from_package():
function test_get_package_as_folder (line 87) | def test_get_package_as_folder():
function test__extract_info_from_package (line 104) | def test__extract_info_from_package():
FILE: tests/test_pythonpackage_basic.py
function local_repo_folder (line 29) | def local_repo_folder():
function fake_metadata_extract (line 35) | def fake_metadata_extract(dep_name, output_folder, debug=False):
function test__extract_info_from_package (line 51) | def test__extract_info_from_package():
function test_get_package_name (line 64) | def test_get_package_name():
function test_get_dep_names_of_package (line 86) | def test_get_dep_names_of_package():
function test_transform_dep_for_pip (line 157) | def test_transform_dep_for_pip():
function test_is_filesystem_path (line 185) | def test_is_filesystem_path():
function test_parse_as_folder_reference (line 195) | def test_parse_as_folder_reference():
function test_parse_as_folder_reference_edge_cases (line 213) | def test_parse_as_folder_reference_edge_cases(input_ref, expected):
function test_is_filesystem_path_edge_cases (line 230) | def test_is_filesystem_path_edge_cases(path, expected):
function test_transform_dep_for_pip_with_special_urls (line 241) | def test_transform_dep_for_pip_with_special_urls(input_dep, expected):
function test_transform_dep_for_pip_passthrough (line 246) | def test_transform_dep_for_pip_passthrough():
function test_get_package_name_with_error (line 252) | def test_get_package_name_with_error():
function test_get_dep_names_error_handling (line 264) | def test_get_dep_names_error_handling():
function test_extract_info_from_package_missing_metadata (line 276) | def test_extract_info_from_package_missing_metadata():
class TestGetSystemPythonExecutable (line 290) | class TestGetSystemPythonExecutable():
method test_basic (line 305) | def test_basic(self):
method run__get_system_python_executable (line 317) | def run__get_system_python_executable(self, pybin):
method test_systemwide_python (line 347) | def test_systemwide_python(self):
method test_venv (line 374) | def test_venv(self):
FILE: tests/test_recipe.py
function patch_logger (line 16) | def patch_logger(level):
function patch_logger_info (line 20) | def patch_logger_info():
function patch_logger_debug (line 24) | def patch_logger_debug():
function patch_urlretrieve (line 28) | def patch_urlretrieve():
class DummyRecipe (line 32) | class DummyRecipe(Recipe):
class TestRecipe (line 36) | class TestRecipe(unittest.TestCase):
method test_recipe_dirs (line 38) | def test_recipe_dirs(self):
method test_list_recipes (line 49) | def test_list_recipes(self):
method test_get_recipe (line 59) | def test_get_recipe(self):
method test_import_recipe (line 74) | def test_import_recipe(self):
method test_download_if_necessary (line 89) | def test_download_if_necessary(self):
method test_download_url_not_set (line 108) | def test_download_url_not_set(self):
method get_dummy_python_recipe_for_download_tests (line 119) | def get_dummy_python_recipe_for_download_tests():
method test_download_url_is_set (line 130) | def test_download_url_is_set(self):
method test_download_file_scheme_https (line 150) | def test_download_file_scheme_https(self):
method test_download_file_scheme_https_oserror (line 165) | def test_download_file_scheme_https_oserror(self):
class TestTargetPythonRecipe (line 187) | class TestTargetPythonRecipe(unittest.TestCase):
method test_major_minor_version_string (line 189) | def test_major_minor_version_string(self):
class TestLibraryRecipe (line 201) | class TestLibraryRecipe(BaseClassSetupBootstrap, unittest.TestCase):
method setUp (line 202) | def setUp(self):
method test_built_libraries (line 211) | def test_built_libraries(self):
method test_should_build (line 222) | def test_should_build(self, mock_exists):
method test_install_libraries (line 236) | def test_install_libraries(self, mock_install_libs, mock_get_libraries):
class TesSTLRecipe (line 256) | class TesSTLRecipe(BaseClassSetupBootstrap, unittest.TestCase):
method setUp (line 257) | def setUp(self):
method test_get_recipe_env_with (line 270) | def test_get_recipe_env_with(
method test_install_stl_lib (line 301) | def test_install_stl_lib(
method test_postarch_build (line 325) | def test_postarch_build(self, mock_install_stl_lib):
method test_recipe_download_headers (line 332) | def test_recipe_download_headers(self):
FILE: tests/test_recommendations.py
class TestRecommendations (line 45) | class TestRecommendations(unittest.TestCase):
method setUp (line 51) | def setUp(self):
method test_check_ndk_version_greater_than_recommended (line 56) | def test_check_ndk_version_greater_than_recommended(self, mock_read_ndk):
method test_check_ndk_version_lower_than_recommended (line 80) | def test_check_ndk_version_lower_than_recommended(self, mock_read_ndk):
method test_check_ndk_version_error (line 94) | def test_check_ndk_version_error(self):
method test_read_ndk_version (line 120) | def test_read_ndk_version(self, mock_open_src_prop):
method test_read_ndk_version_error (line 136) | def test_read_ndk_version_error(self, mock_open_src_prop):
method test_check_target_api_error_arch_armeabi (line 151) | def test_check_target_api_error_arch_armeabi(self):
method test_check_target_api_warning_target_api (line 164) | def test_check_target_api_warning_target_api(self):
method test_check_ndk_api_error_android_api (line 178) | def test_check_ndk_api_error_android_api(self):
method test_check_ndk_api_warning_old_ndk (line 195) | def test_check_ndk_api_warning_old_ndk(self):
method test_check_python_version (line 213) | def test_check_python_version(self):
method test_print_recommendations (line 247) | def test_print_recommendations(self):
FILE: tests/test_toolchain.py
function patch_sys_argv (line 11) | def patch_sys_argv(argv):
function patch_argparse_print_help (line 15) | def patch_argparse_print_help():
function patch_sys_stdout (line 19) | def patch_sys_stdout():
function raises_system_exit (line 23) | def raises_system_exit():
class TestToolchainCL (line 27) | class TestToolchainCL:
method test_help (line 29) | def test_help(self):
method test_unknown (line 41) | def test_unknown(self):
method test_create (line 52) | def test_create(self):
method test_create_no_sdk_dir (line 107) | def test_create_no_sdk_dir(self):
method test_recipes (line 120) | def test_recipes(self):
method test_local_recipes_dir (line 141) | def test_local_recipes_dir(self):
FILE: tests/test_util.py
class TestUtil (line 11) | class TestUtil(unittest.TestCase):
method test_ensure_dir (line 18) | def test_ensure_dir(self, mock_makedirs):
method test_temp_directory (line 28) | def test_temp_directory(self, mock_mkdtemp, mock_shutil_rmtree):
method test_current_directory (line 43) | def test_current_directory(self, moch_chdir):
method test_current_directory_exception (line 60) | def test_current_directory_exception(self):
method test_walk_valid_filens (line 77) | def test_walk_valid_filens(self, mock_walk):
method test_util_exceptions (line 125) | def test_util_exceptions(self):
method test_move (line 143) | def test_move(self):
method test_touch (line 182) | def test_touch(self):
method test_build_tools_version_sort_key (line 191) | def test_build_tools_version_sort_key(self):
method test_max_build_tool_version (line 217) | def test_max_build_tool_version(self):
method test_load_source (line 234) | def test_load_source(self):
method test_rmdir_exists (line 256) | def test_rmdir_exists(self, mock_rmtree, mock_exists):
method test_rmdir_not_exists (line 267) | def test_rmdir_not_exists(self, mock_rmtree, mock_exists):
method test_rmdir_ignore_errors (line 278) | def test_rmdir_ignore_errors(self, mock_rmtree, mock_exists):
method test_patch_wheel_setuptools_logging (line 288) | def test_patch_wheel_setuptools_logging(self, mock_mock):
Condensed preview — 589 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,083K chars).
[
{
"path": ".coveragerc",
"chars": 170,
"preview": "[run]\nrelative_files = True\nomit =\n *test*\n\n[report]\nexclude_lines =\n pragma: no cover\n def __repr__\n raise "
},
{
"path": ".deepsource.toml",
"chars": 171,
"preview": "version = 1\n\ntest_patterns = [\"tests/**\"]\n\nexclude_patterns = [\"testapps/**\"]\n\n[[analyzers]]\nname = \"python\"\nenabled = t"
},
{
"path": ".dockerignore",
"chars": 93,
"preview": "venv/\n.buildozer/\n**/.pytest_cache/\n.tox/\nbin/\n*.pyc\n**/__pycache__\n*.egg-info/\ndocker-data/\n"
},
{
"path": ".github/ISSUE_TEMPLATE.md",
"chars": 1239,
"preview": "<!--\nThe issue tracker is a tool to address bugs NOT a support platform.\nPlease use the Discord community or Stack Overf"
},
{
"path": ".github/workflows/custom-build.yml",
"chars": 4177,
"preview": "name: Custom build\n\non:\n workflow_dispatch:\n inputs:\n arch:\n description: \"Comma separated architectures"
},
{
"path": ".github/workflows/docker.yml",
"chars": 847,
"preview": "name: Docker\n\non:\n workflow_dispatch:\n push:\n branches:\n - develop\n tags:\n - \"*\"\n pull_request:\n\njobs"
},
{
"path": ".github/workflows/no-response.yml",
"chars": 1374,
"preview": "name: No Response\n\n# Both `issue_comment` and `scheduled` event types are required for this Action\n# to work properly.\no"
},
{
"path": ".github/workflows/push.yml",
"chars": 11666,
"preview": "name: Unit tests & build apps\n\non: ['push', 'pull_request']\n\nenv:\n APK_ARTIFACT_FILENAME: bdist_unit_tests_app-debug-1."
},
{
"path": ".github/workflows/pypi-release.yml",
"chars": 682,
"preview": "name: PyPI release\non: [push]\n\njobs:\n pypi_release:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@"
},
{
"path": ".github/workflows/support.yml",
"chars": 1721,
"preview": "# When a user creates an issue that is actually a support request, it should\n# be closed with a friendly comment.\n#\n# Th"
},
{
"path": ".gitignore",
"chars": 543,
"preview": "*.swp\n*.swo\n*~\n\n#ECLIPSE + PYDEV\n.project\n.pydevproject\n\n.deps\n\n.optional-deps\n\n*.pyc\n*.pyo\n*.apk\n.packages\npython_for_a"
},
{
"path": ".projectile",
"chars": 0,
"preview": ""
},
{
"path": ".readthedocs.yaml",
"chars": 300,
"preview": "# Read the Docs configuration file for Sphinx projects\n# See https://docs.readthedocs.io/en/stable/config-file/v2.html f"
},
{
"path": "CHANGELOG.md",
"chars": 259056,
"preview": "# Changelog\n\n## [v2024.01.21](https://github.com/kivy/python-for-android/tree/v2024.01.21)\n\n[Full Changelog](https://git"
},
{
"path": "CODE_OF_CONDUCT.md",
"chars": 449,
"preview": "In the interest of fostering an open and welcoming community, we as \ncontributors and maintainers need to ensure partici"
},
{
"path": "CONTACT.md",
"chars": 269,
"preview": "# Contacting the Kivy Team\n\nIf you are looking to contact the Kivy Team (who are responsible for managing\nthe python-for"
},
{
"path": "CONTRIBUTING.md",
"chars": 12833,
"preview": "# Contribution Guidelines\n\npython-for-android is part of the [Kivy](https://kivy.org) ecosystem - a large group of\nprodu"
},
{
"path": "Dockerfile",
"chars": 3250,
"preview": "# Dockerfile with:\n# - Android build environment\n# - python-for-android dependencies\n#\n# Build with:\n# docker bu"
},
{
"path": "FAQ.md",
"chars": 4646,
"preview": "# FAQ for python-for-android (p4a)\n\n## Introduction\n\npython-for-android (p4a) is a development tool that packages Python"
},
{
"path": "LICENSE",
"chars": 1094,
"preview": "MIT License\n\nCopyright (c) 2010-2025 Kivy Team and other contributors\n\nPermission is hereby granted, free of charge, to "
},
{
"path": "MANIFEST.in",
"chars": 382,
"preview": "\ninclude LICENSE README.md\ninclude *.toml\n\nrecursive-include doc *\nprune doc/build\n\nrecursive-include pythonforandroid *"
},
{
"path": "Makefile",
"chars": 7021,
"preview": "VIRTUAL_ENV ?= venv\nPIP=$(VIRTUAL_ENV)/bin/pip\nTOX=`which tox`\nACTIVATE=$(VIRTUAL_ENV)/bin/activate\nPYTHON=$(VIRTUAL_ENV"
},
{
"path": "README.md",
"chars": 7633,
"preview": "# python-for-android\n\npython-for-android (p4a) is a development tool that packages Python apps into\nbinaries that can ru"
},
{
"path": "ci/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "ci/constants.py",
"chars": 1791,
"preview": "from enum import Enum\n\n\nclass TargetPython(Enum):\n python3 = 2\n\n\n# recipes that currently break the build\n# a recipe "
},
{
"path": "ci/makefiles/android.mk",
"chars": 5547,
"preview": "# Downloads and installs the Android SDK depending on supplied platform: darwin or linux\n\n# Those android NDK/SDK variab"
},
{
"path": "ci/makefiles/osx.mk",
"chars": 314,
"preview": "# installs Android's SDK/NDK, cython\n\n# The following variable/s can be override when running the file\nANDROID_HOME ?= $"
},
{
"path": "ci/rebuild_updated_recipes.py",
"chars": 4404,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\"\"\"\nContinuous Integration helper script.\nAutomatically detects recipes mo"
},
{
"path": "ci/run_emulator_tests.sh",
"chars": 1947,
"preview": "#!/bin/bash\nset -euxo pipefail\n\n# Find the built APK file\nAPK_FILE=$(find dist -name \"*.apk\" -print -quit)\n\nif [ -z \"$AP"
},
{
"path": "distribute.sh",
"chars": 1230,
"preview": "#!/usr/bin/env sh\n\n# This file is just a shim to report an error messaage if some tool\n# tries to run the old python-for"
},
{
"path": "doc/Makefile",
"chars": 7467,
"preview": "# Makefile for Sphinx documentation\n#\n\n# You can set these variables from the command line.\nSPHINXOPTS =\nSPHINXBUILD "
},
{
"path": "doc/make.bat",
"chars": 7281,
"preview": "@ECHO OFF\r\n\r\nREM Command file for Sphinx documentation\r\n\r\nif \"%SPHINXBUILD%\" == \"\" (\r\n\tset SPHINXBUILD=sphinx-build2\r\n)\r"
},
{
"path": "doc/requirements.txt",
"chars": 29,
"preview": "Sphinx~=7.2.6\nfuro==2023.9.10"
},
{
"path": "doc/source/_static/.empty",
"chars": 0,
"preview": ""
},
{
"path": "doc/source/apis.rst",
"chars": 17203,
"preview": "\nWorking on Android\n==================\n\nThis page gives details on accessing Android APIs and managing other\ninteraction"
},
{
"path": "doc/source/bootstraps.rst",
"chars": 1806,
"preview": "\nBootstraps\n==========\n\nThis page is about creating new bootstrap backends. For build options\nof existing bootstraps (i."
},
{
"path": "doc/source/buildoptions.rst",
"chars": 13974,
"preview": "\nBuild options\n=============\n\nThis page contains instructions for using different build options.\n\n\nPython versions\n-----"
},
{
"path": "doc/source/commands.rst",
"chars": 2935,
"preview": "\nCommands\n========\n\nThis page documents all the commands and options that can be passed to\ntoolchain.py.\n\n\nCommands inde"
},
{
"path": "doc/source/conf.py",
"chars": 11117,
"preview": "# -*- coding: utf-8 -*-\n#\n# python-for-android documentation build configuration file, created by\n# sphinx-quickstart2 o"
},
{
"path": "doc/source/contact.rst",
"chars": 274,
"preview": "Contact Us\n==========\n\nIf you are looking to contact the Kivy Team (who are responsible for managing the\npython-for-andr"
},
{
"path": "doc/source/contribute.rst",
"chars": 767,
"preview": ".. _contributing:\n\n.. _contribute:\n\nContribution Guidelines\n=======================\n\nBuildozer is part of the `Kivy <htt"
},
{
"path": "doc/source/distutils.rst",
"chars": 4883,
"preview": "\ndistutils/setuptools integration\n================================\n\nHave `p4a apk` run setup.py (replaces ``--requiremen"
},
{
"path": "doc/source/docker.rst",
"chars": 2666,
"preview": ".. _docker:\n\nDocker\n======\n\nCurrently we use a containerized build for testing Python for Android recipes.\nDocker suppor"
},
{
"path": "doc/source/faq.rst",
"chars": 176,
"preview": "FAQ\n===\n\npython-for-android has an `online FAQ <https://github.com/kivy/python-for-android/blob/master/FAQ.md>`_. It con"
},
{
"path": "doc/source/index.rst",
"chars": 2611,
"preview": "python-for-android\n==================\n\npython-for-android (p4a) is a development tool that packages Python apps into\nbin"
},
{
"path": "doc/source/quickstart.rst",
"chars": 12492,
"preview": "\nGetting Started\n===============\n\nGetting up and running on python-for-android (p4a) is a simple process\nand should only"
},
{
"path": "doc/source/recipes.rst",
"chars": 18762,
"preview": "\nRecipes\n=======\n\nThis page describes how python-for-android (p4a) compilation recipes\nwork, and how to build your own. "
},
{
"path": "doc/source/services.rst",
"chars": 6356,
"preview": "Services\n========\n\npython-for-android supports the use of Android Services, background\ntasks running in separate process"
},
{
"path": "doc/source/testing_pull_requests.rst",
"chars": 9371,
"preview": "Testing an python-for-android pull request\n==========================================\n\nIn order to test a pull request, "
},
{
"path": "doc/source/troubleshooting.rst",
"chars": 3458,
"preview": ".. _troubleshooting:\n\nTroubleshooting\n===============\n\nDebug output\n------------\n\nAdd the ``--debug`` option to any pyth"
},
{
"path": "pythonforandroid/__init__.py",
"chars": 27,
"preview": "__version__ = '2024.01.21'\n"
},
{
"path": "pythonforandroid/androidndk.py",
"chars": 2066,
"preview": "import sys\nimport os\n\n\nclass AndroidNDK:\n \"\"\"\n This class is used to get the current NDK information.\n \"\"\"\n\n "
},
{
"path": "pythonforandroid/archs.py",
"chars": 9741,
"preview": "from os import environ\nfrom os.path import join\nfrom multiprocessing import cpu_count\nimport shutil\n\nfrom pythonforandro"
},
{
"path": "pythonforandroid/bdistapk.py",
"chars": 6029,
"preview": "from glob import glob\nfrom os.path import realpath, join, dirname, curdir, basename, split\nfrom setuptools import Comman"
},
{
"path": "pythonforandroid/bootstrap.py",
"chars": 19370,
"preview": "import functools\nimport glob\nimport importlib\nimport os\nfrom os.path import (join, dirname, isdir, normpath, splitext, b"
},
{
"path": "pythonforandroid/bootstraps/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "pythonforandroid/bootstraps/_sdl_common/__init__.py",
"chars": 848,
"preview": "from os.path import join\n\nfrom pythonforandroid.toolchain import Bootstrap\nfrom pythonforandroid.util import ensure_dir\n"
},
{
"path": "pythonforandroid/bootstraps/_sdl_common/build/.gitignore",
"chars": 308,
"preview": ".gradle\n/build/\n\n# Ignore Gradle GUI config\ngradle-app.setting\n\n# Avoid ignoring Gradle wrapper jar file (.jar files are"
},
{
"path": "pythonforandroid/bootstraps/_sdl_common/build/blacklist.txt",
"chars": 1382,
"preview": "# prevent user to include invalid extensions\n*.apk\n*.aab\n*.apks\n*.pxd\n\n# eggs\n*.egg-info\n\n# unit test\nunittest/*\n\n# pyth"
},
{
"path": "pythonforandroid/bootstraps/_sdl_common/build/jni/Application.mk",
"chars": 242,
"preview": "\n# Uncomment this if you're using STL in your project\n# See CPLUSPLUS-SUPPORT.html in the NDK documentation for more inf"
},
{
"path": "pythonforandroid/bootstraps/_sdl_common/build/src/main/assets/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "pythonforandroid/bootstraps/_sdl_common/build/src/main/java/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "pythonforandroid/bootstraps/_sdl_common/build/src/main/java/org/kivy/android/launcher/Project.java",
"chars": 2809,
"preview": "package org.kivy.android.launcher;\n\nimport android.graphics.Bitmap;\nimport android.graphics.BitmapFactory;\nimport androi"
},
{
"path": "pythonforandroid/bootstraps/_sdl_common/build/src/main/java/org/kivy/android/launcher/ProjectAdapter.java",
"chars": 1051,
"preview": "package org.kivy.android.launcher;\n\nimport android.app.Activity;\nimport android.view.View;\nimport android.view.ViewGroup"
},
{
"path": "pythonforandroid/bootstraps/_sdl_common/build/src/main/java/org/kivy/android/launcher/ProjectChooser.java",
"chars": 2618,
"preview": "package org.kivy.android.launcher;\n\nimport android.app.Activity;\nimport android.content.Intent;\nimport android.net.Uri;\n"
},
{
"path": "pythonforandroid/bootstraps/_sdl_common/build/src/main/jniLibs/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "pythonforandroid/bootstraps/_sdl_common/build/src/main/libs/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "pythonforandroid/bootstraps/_sdl_common/build/src/main/res/drawable/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "pythonforandroid/bootstraps/_sdl_common/build/src/main/res/layout/chooser_item.xml",
"chars": 956,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout\n xmlns:android=\"http://schemas.android.com/apk/res/android\"\n an"
},
{
"path": "pythonforandroid/bootstraps/_sdl_common/build/src/main/res/layout/main.xml",
"chars": 394,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n andr"
},
{
"path": "pythonforandroid/bootstraps/_sdl_common/build/src/main/res/layout/project_chooser.xml",
"chars": 487,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<LinearLayout\n xmlns:android=\"http://schemas.android.com/apk/res/android\"\n a"
},
{
"path": "pythonforandroid/bootstraps/_sdl_common/build/src/main/res/layout/project_empty.xml",
"chars": 335,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<LinearLayout\n xmlns:android=\"http://schemas.android.com/apk/res/android\"\n a"
},
{
"path": "pythonforandroid/bootstraps/_sdl_common/build/src/main/res/mipmap/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "pythonforandroid/bootstraps/_sdl_common/build/src/main/res/mipmap-anydpi-v26/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "pythonforandroid/bootstraps/_sdl_common/build/templates/AndroidManifest.tmpl.xml",
"chars": 6461,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- Replace org.libsdl.app with the identifier of your game below, e.g.\n com"
},
{
"path": "pythonforandroid/bootstraps/_sdl_common/build/templates/strings.tmpl.xml",
"chars": 864,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <style name=\"KivySupportCutout\">\n <item name=\"android:wind"
},
{
"path": "pythonforandroid/bootstraps/build.gradle",
"chars": 1539,
"preview": "// Java Lint Configuration for python-for-android\n// This file configures Spotless to lint Java source files across all "
},
{
"path": "pythonforandroid/bootstraps/common/build/ant.properties",
"chars": 804,
"preview": "# This file is used to override default values used by the Ant build system.\n#\n# This file must be checked into Version "
},
{
"path": "pythonforandroid/bootstraps/common/build/build.py",
"chars": 45025,
"preview": "#!/usr/bin/env python3\n\nfrom gzip import GzipFile\nimport hashlib\nimport json\nfrom os.path import (\n dirname, join, is"
},
{
"path": "pythonforandroid/bootstraps/common/build/gradle/wrapper/gradle-wrapper.properties",
"chars": 233,
"preview": "#Mon Mar 09 17:19:02 CET 2015\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\nzipStoreBase=GRADLE_USER_"
},
{
"path": "pythonforandroid/bootstraps/common/build/gradlew",
"chars": 5080,
"preview": "#!/usr/bin/env bash\n\n##############################################################################\n##\n## Gradle start "
},
{
"path": "pythonforandroid/bootstraps/common/build/gradlew.bat",
"chars": 2314,
"preview": "@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem "
},
{
"path": "pythonforandroid/bootstraps/common/build/jni/Android.mk",
"chars": 37,
"preview": "include $(call all-subdir-makefiles)\n"
},
{
"path": "pythonforandroid/bootstraps/common/build/jni/application/Android.mk",
"chars": 37,
"preview": "include $(call all-subdir-makefiles)\n"
},
{
"path": "pythonforandroid/bootstraps/common/build/jni/application/src/Android.mk",
"chars": 490,
"preview": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\n\nLOCAL_MODULE := main\n\nSDL_PATH := ../../SDL\n\nLOCAL_C_INCLUDES := $("
},
{
"path": "pythonforandroid/bootstraps/common/build/jni/application/src/start.c",
"chars": 17031,
"preview": "\n#define PY_SSIZE_T_CLEAN\n#include \"Python.h\"\n#ifndef Py_PYTHON_H\n#error Python headers needed to compile C extensions, "
},
{
"path": "pythonforandroid/bootstraps/common/build/src/main/java/org/kamranzafar/jtar/Octal.java",
"chars": 4308,
"preview": "/**\r\n * Copyright 2012 Kamran Zafar \r\n * \r\n * Licensed under the Apache License, Version 2.0 (the \"License\"); \r\n * you m"
},
{
"path": "pythonforandroid/bootstraps/common/build/src/main/java/org/kamranzafar/jtar/TarConstants.java",
"chars": 881,
"preview": "/**\r\n * Copyright 2012 Kamran Zafar \r\n * \r\n * Licensed under the Apache License, Version 2.0 (the \"License\"); \r\n * you m"
},
{
"path": "pythonforandroid/bootstraps/common/build/src/main/java/org/kamranzafar/jtar/TarEntry.java",
"chars": 7543,
"preview": "/**\r\n * Copyright 2012 Kamran Zafar \r\n * \r\n * Licensed under the Apache License, Version 2.0 (the \"License\"); \r\n * you m"
},
{
"path": "pythonforandroid/bootstraps/common/build/src/main/java/org/kamranzafar/jtar/TarHeader.java",
"chars": 6537,
"preview": "/**\r\n * Copyright 2012 Kamran Zafar \r\n * \r\n * Licensed under the Apache License, Version 2.0 (the \"License\"); \r\n * you m"
},
{
"path": "pythonforandroid/bootstraps/common/build/src/main/java/org/kamranzafar/jtar/TarInputStream.java",
"chars": 5470,
"preview": "/**\r\n * Copyright 2012 Kamran Zafar \r\n * \r\n * Licensed under the Apache License, Version 2.0 (the \"License\"); \r\n * you m"
},
{
"path": "pythonforandroid/bootstraps/common/build/src/main/java/org/kamranzafar/jtar/TarOutputStream.java",
"chars": 4761,
"preview": "/**\r\n * Copyright 2012 Kamran Zafar \r\n * \r\n * Licensed under the Apache License, Version 2.0 (the \"License\"); \r\n * you m"
},
{
"path": "pythonforandroid/bootstraps/common/build/src/main/java/org/kamranzafar/jtar/TarUtils.java",
"chars": 2179,
"preview": "/**\r\n * Copyright 2012 Kamran Zafar \r\n * \r\n * Licensed under the Apache License, Version 2.0 (the \"License\"); \r\n * you m"
},
{
"path": "pythonforandroid/bootstraps/common/build/src/main/java/org/kivy/android/GenericBroadcastReceiver.java",
"chars": 505,
"preview": "package org.kivy.android;\n\nimport android.content.BroadcastReceiver;\nimport android.content.Context;\nimport android.cont"
},
{
"path": "pythonforandroid/bootstraps/common/build/src/main/java/org/kivy/android/GenericBroadcastReceiverCallback.java",
"chars": 199,
"preview": "package org.kivy.android;\n\nimport android.content.Context;\nimport android.content.Intent;\n\npublic interface GenericBroad"
},
{
"path": "pythonforandroid/bootstraps/common/build/src/main/java/org/kivy/android/PythonService.java",
"chars": 8246,
"preview": "package org.kivy.android;\n\nimport android.app.Notification;\nimport android.app.NotificationChannel;\nimport android.app.N"
},
{
"path": "pythonforandroid/bootstraps/common/build/src/main/java/org/kivy/android/PythonUtil.java",
"chars": 8754,
"preview": "package org.kivy.android;\n\nimport android.app.Activity;\nimport android.content.Context;\nimport android.content.res.Resou"
},
{
"path": "pythonforandroid/bootstraps/common/build/src/main/java/org/renpy/android/AssetExtract.java",
"chars": 3318,
"preview": "// This string is autogenerated by ChangeAppSettings.sh, do not change\n// spaces amount\npackage org.renpy.android;\n\nimpo"
},
{
"path": "pythonforandroid/bootstraps/common/build/src/main/java/org/renpy/android/Hardware.java",
"chars": 8870,
"preview": "package org.renpy.android;\n\nimport android.content.BroadcastReceiver;\nimport android.content.Context;\nimport android.con"
},
{
"path": "pythonforandroid/bootstraps/common/build/src/main/java/org/renpy/android/ResourceManager.java",
"chars": 1469,
"preview": "/**\n * This class takes care of managing resources for us. In our code, we can't use R, since the name\n * of the package"
},
{
"path": "pythonforandroid/bootstraps/common/build/templates/Service.tmpl.java",
"chars": 2790,
"preview": "package {{ args.package }};\n\nimport android.content.Intent;\nimport android.content.Context;\nimport {{ args.service_class"
},
{
"path": "pythonforandroid/bootstraps/common/build/templates/build.properties",
"chars": 881,
"preview": "# This file is used to override default values used by the Ant build system.\n# \n# This file must be checked in Version C"
},
{
"path": "pythonforandroid/bootstraps/common/build/templates/build.tmpl.gradle",
"chars": 2877,
"preview": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\nbuildscript {\n re"
},
{
"path": "pythonforandroid/bootstraps/common/build/templates/build.tmpl.xml",
"chars": 4034,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!-- This should be changed to the name of your project -->\n<project name=\"{{ ver"
},
{
"path": "pythonforandroid/bootstraps/common/build/templates/custom_rules.tmpl.xml",
"chars": 752,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project name=\"CustomRules\">\n <target name=\"-pre-build\">\n <copy todir=\""
},
{
"path": "pythonforandroid/bootstraps/common/build/templates/gradle.tmpl.properties",
"chars": 390,
"preview": "{% if bootstrap_name == \"qt\" %}\n# For tweaking memory settings. Otherwise, a p4a session with Qt bootstrap and PySide6 r"
},
{
"path": "pythonforandroid/bootstraps/common/build/templates/lottie.xml",
"chars": 757,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmln"
},
{
"path": "pythonforandroid/bootstraps/common/build/whitelist.txt",
"chars": 47,
"preview": "# put files here that you need to un-blacklist\n"
},
{
"path": "pythonforandroid/bootstraps/empty/__init__.py",
"chars": 305,
"preview": "from pythonforandroid.toolchain import Bootstrap\n\n\nclass EmptyBootstrap(Bootstrap):\n name = 'empty'\n\n recipe_depen"
},
{
"path": "pythonforandroid/bootstraps/empty/build/.gitkeep",
"chars": 2,
"preview": " \n"
},
{
"path": "pythonforandroid/bootstraps/gradle.properties",
"chars": 221,
"preview": "# Gradle properties for Java lint project\n# Disable daemon for CI environments\norg.gradle.daemon=false\n\n# Use parallel e"
},
{
"path": "pythonforandroid/bootstraps/qt/__init__.py",
"chars": 2075,
"preview": "import sh\nfrom os.path import join\nfrom pythonforandroid.toolchain import (\n Bootstrap, current_directory, info, info"
},
{
"path": "pythonforandroid/bootstraps/qt/build/.gitignore",
"chars": 308,
"preview": ".gradle\n/build/\n\n# Ignore Gradle GUI config\ngradle-app.setting\n\n# Avoid ignoring Gradle wrapper jar file (.jar files are"
},
{
"path": "pythonforandroid/bootstraps/qt/build/blacklist.txt",
"chars": 1051,
"preview": "# prevent user to include invalid extensions\n*.apk\n*.aab\n*.apks\n*.pxd\n\n# eggs\n*.egg-info\n\n# unit test\nunittest/*\n\n# pyth"
},
{
"path": "pythonforandroid/bootstraps/qt/build/jni/Application.mk",
"chars": 241,
"preview": "\n# Uncomment this if you're using STL in your project\n# See CPLUSPLUS-SUPPORT.html in the NDK documentation for more inf"
},
{
"path": "pythonforandroid/bootstraps/qt/build/jni/application/src/Android.mk",
"chars": 408,
"preview": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\n\nLOCAL_MODULE := main_$(PREFERRED_ABI)\n\n# Add your application sourc"
},
{
"path": "pythonforandroid/bootstraps/qt/build/jni/application/src/Android_static.mk",
"chars": 152,
"preview": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\n\nLOCAL_MODULE := main_$(PREFERRED_ABI)\n\nLOCAL_SRC_FILES := start.c\n\n"
},
{
"path": "pythonforandroid/bootstraps/qt/build/jni/application/src/bootstrap_name.h",
"chars": 38,
"preview": "\n\nconst char bootstrap_name[] = \"qt\";\n"
},
{
"path": "pythonforandroid/bootstraps/qt/build/src/main/assets/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "pythonforandroid/bootstraps/qt/build/src/main/java/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "pythonforandroid/bootstraps/qt/build/src/main/java/org/kivy/android/PythonActivity.java",
"chars": 9590,
"preview": "package org.kivy.android;\n\nimport android.content.Context;\nimport android.content.Intent;\nimport android.content.pm.Pack"
},
{
"path": "pythonforandroid/bootstraps/qt/build/src/main/jniLibs/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "pythonforandroid/bootstraps/qt/build/src/main/libs/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "pythonforandroid/bootstraps/qt/build/src/main/res/drawable/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "pythonforandroid/bootstraps/qt/build/src/main/res/mipmap/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "pythonforandroid/bootstraps/qt/build/templates/AndroidManifest.tmpl.xml",
"chars": 5053,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n androi"
},
{
"path": "pythonforandroid/bootstraps/qt/build/templates/libs.tmpl.xml",
"chars": 1216,
"preview": "<?xml version='1.0' encoding='utf-8'?>\n<resources>\n\n <!--\n The bunlded_libs placeholder is needed for QtLoader.jav"
},
{
"path": "pythonforandroid/bootstraps/qt/build/templates/strings.tmpl.xml",
"chars": 809,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <style name=\"KivySupportCutout\">\n <item name=\"android:wind"
},
{
"path": "pythonforandroid/bootstraps/sdl2/__init__.py",
"chars": 271,
"preview": "from pythonforandroid.bootstraps._sdl_common import SDLGradleBootstrap\n\n\nclass SDL2GradleBootstrap(SDLGradleBootstrap):\n"
},
{
"path": "pythonforandroid/bootstraps/sdl2/build/jni/application/src/Android.mk",
"chars": 495,
"preview": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\n\nLOCAL_MODULE := main\n\nSDL_PATH := ../../SDL\n\nLOCAL_C_INCLUDES := $("
},
{
"path": "pythonforandroid/bootstraps/sdl2/build/jni/application/src/Android_static.mk",
"chars": 228,
"preview": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\n\nLOCAL_MODULE := main\n\nLOCAL_SRC_FILES := start.c\n\nLOCAL_STATIC_LIBR"
},
{
"path": "pythonforandroid/bootstraps/sdl2/build/jni/application/src/bootstrap_name.h",
"chars": 106,
"preview": "\n#define BOOTSTRAP_NAME_SDL2\n\nconst char bootstrap_name[] = \"SDL2\"; // capitalized for historic reasons\n\n"
},
{
"path": "pythonforandroid/bootstraps/sdl2/build/src/main/java/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "pythonforandroid/bootstraps/sdl2/build/src/main/java/org/kivy/android/PythonActivity.java",
"chars": 25922,
"preview": "package org.kivy.android;\n\nimport android.app.Activity;\nimport android.content.Context;\nimport android.content.Intent;\ni"
},
{
"path": "pythonforandroid/bootstraps/sdl2/build/src/patches/SDLActivity.java.patch",
"chars": 2647,
"preview": "--- a/src/main/java/org/libsdl/app/SDLActivity.java\n+++ b/src/main/java/org/libsdl/app/SDLActivity.java\n@@ -221,6 +221,8"
},
{
"path": "pythonforandroid/bootstraps/sdl2/build/src/patches/SDLSurface.java.patch",
"chars": 931,
"preview": "--- a/src/main/java/org/libsdl/app/SDLSurface.java\n+++ b/src/main/java/org/libsdl/app/SDLSurface.java\n@@ -193,9 +193,22 "
},
{
"path": "pythonforandroid/bootstraps/sdl3/__init__.py",
"chars": 271,
"preview": "from pythonforandroid.bootstraps._sdl_common import SDLGradleBootstrap\n\n\nclass SDL3GradleBootstrap(SDLGradleBootstrap):\n"
},
{
"path": "pythonforandroid/bootstraps/sdl3/build/jni/application/src/Android.mk",
"chars": 495,
"preview": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\n\nLOCAL_MODULE := main\n\nSDL_PATH := ../../SDL\n\nLOCAL_C_INCLUDES := $("
},
{
"path": "pythonforandroid/bootstraps/sdl3/build/jni/application/src/Android_static.mk",
"chars": 229,
"preview": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\n\nLOCAL_MODULE := main\n\nLOCAL_SRC_FILES := start.c\n\nLOCAL_STATIC_LIBR"
},
{
"path": "pythonforandroid/bootstraps/sdl3/build/jni/application/src/bootstrap_name.h",
"chars": 106,
"preview": "\n#define BOOTSTRAP_NAME_SDL3\n\nconst char bootstrap_name[] = \"SDL3\"; // capitalized for historic reasons\n\n"
},
{
"path": "pythonforandroid/bootstraps/sdl3/build/src/main/java/org/kivy/android/PythonActivity.java",
"chars": 25852,
"preview": "package org.kivy.android;\n\nimport android.app.Activity;\nimport android.content.Context;\nimport android.content.Intent;\ni"
},
{
"path": "pythonforandroid/bootstraps/sdl3/build/src/patches/SDLActivity.java.patch",
"chars": 1480,
"preview": "--- a/src/main/java/org/libsdl/app/SDLActivity.java\n+++ b/src/main/java/org/libsdl/app/SDLActivity.java\n@@ -259,6 +259,7"
},
{
"path": "pythonforandroid/bootstraps/sdl3/build/src/patches/SDLSurface.java.patch",
"chars": 937,
"preview": "--- a/src/main/java/org/libsdl/app/SDLSurface.java\n+++ b/src/main/java/org/libsdl/app/SDLSurface.java\n@@ -232,9 +232,23 "
},
{
"path": "pythonforandroid/bootstraps/service_library/__init__.py",
"chars": 199,
"preview": "from pythonforandroid.bootstraps.service_only import ServiceOnlyBootstrap\n\n\nclass ServiceLibraryBootstrap(ServiceOnlyBoo"
},
{
"path": "pythonforandroid/bootstraps/service_library/build/jni/Application.mk",
"chars": 46,
"preview": "APP_PLATFORM := $(NDK_API)\nAPP_ABI := $(ARCH)\n"
},
{
"path": "pythonforandroid/bootstraps/service_library/build/jni/application/src/bootstrap_name.h",
"chars": 83,
"preview": "\n#define BOOTSTRAP_NAME_LIBRARY\n\nconst char bootstrap_name[] = \"service_library\";\n\n"
},
{
"path": "pythonforandroid/bootstraps/service_library/build/src/main/java/org/kivy/android/PythonActivity.java",
"chars": 192,
"preview": "package org.kivy.android;\n\nimport android.app.Activity;\n\n// Required by PythonService class\npublic class PythonActivity "
},
{
"path": "pythonforandroid/bootstraps/service_library/build/src/main/res/mipmap/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "pythonforandroid/bootstraps/service_library/build/templates/AndroidManifest.tmpl.xml",
"chars": 853,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n androi"
},
{
"path": "pythonforandroid/bootstraps/service_library/build/templates/Service.tmpl.java",
"chars": 3596,
"preview": "package {{ args.package }};\n\nimport java.io.File;\n\nimport android.os.Build;\nimport android.content.Intent;\nimport androi"
},
{
"path": "pythonforandroid/bootstraps/service_only/__init__.py",
"chars": 253,
"preview": "from pythonforandroid.toolchain import Bootstrap\n\n\nclass ServiceOnlyBootstrap(Bootstrap):\n\n name = 'service_only'\n\n "
},
{
"path": "pythonforandroid/bootstraps/service_only/build/blacklist.txt",
"chars": 1507,
"preview": "# prevent user to include invalid extensions\n*.apk\n*.aab\n*.apks\n*.pxd\n\n# eggs\n*.egg-info\n\n# unit test\nunittest/*\n\n# pyth"
},
{
"path": "pythonforandroid/bootstraps/service_only/build/jni/Android.mk",
"chars": 37,
"preview": "include $(call all-subdir-makefiles)\n"
},
{
"path": "pythonforandroid/bootstraps/service_only/build/jni/Application.mk",
"chars": 215,
"preview": "\n# Uncomment this if you're using STL in your project\n# See CPLUSPLUS-SUPPORT.html in the NDK documentation for more inf"
},
{
"path": "pythonforandroid/bootstraps/service_only/build/jni/application/src/Android.mk",
"chars": 404,
"preview": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\n\nLOCAL_MODULE := main\n\n# Add your application source files here...\nL"
},
{
"path": "pythonforandroid/bootstraps/service_only/build/jni/application/src/Android_static.mk",
"chars": 198,
"preview": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\n\nLOCAL_MODULE := main\n\nLOCAL_SRC_FILES := YourSourceHere.c\n\ninclude "
},
{
"path": "pythonforandroid/bootstraps/service_only/build/jni/application/src/bootstrap_name.h",
"chars": 84,
"preview": "\n#define BOOTSTRAP_NAME_SERVICEONLY\n\nconst char bootstrap_name[] = \"service_only\";\n\n"
},
{
"path": "pythonforandroid/bootstraps/service_only/build/jni/application/src/pyjniusjni.c",
"chars": 3876,
"preview": "\n#include <pthread.h>\n#include <jni.h>\n\n#define LOGI(...) do {} while (0)\n#define LOGE(...) do {} while (0)\n\n#include \"a"
},
{
"path": "pythonforandroid/bootstraps/service_only/build/src/main/assets/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "pythonforandroid/bootstraps/service_only/build/src/main/java/org/kivy/android/PythonActivity.java",
"chars": 12598,
"preview": "package org.kivy.android;\n\nimport android.app.Activity;\nimport android.app.AlertDialog;\nimport android.content.Context;\n"
},
{
"path": "pythonforandroid/bootstraps/service_only/build/src/main/jniLibs/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "pythonforandroid/bootstraps/service_only/build/src/main/res/drawable/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "pythonforandroid/bootstraps/service_only/build/src/main/res/mipmap/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "pythonforandroid/bootstraps/service_only/build/templates/AndroidManifest.tmpl.xml",
"chars": 4480,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n androi"
},
{
"path": "pythonforandroid/bootstraps/service_only/build/templates/Service.tmpl.java",
"chars": 3549,
"preview": "package {{ args.package }};\n\nimport android.os.Binder;\nimport android.os.IBinder;\nimport android.content.Intent;\nimport "
},
{
"path": "pythonforandroid/bootstraps/service_only/build/templates/strings.tmpl.xml",
"chars": 183,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <string name=\"app_name\">{{ args.name }}</string>\n <string name"
},
{
"path": "pythonforandroid/bootstraps/settings.gradle",
"chars": 125,
"preview": "// Java Lint Project Settings\n// This project is used for linting Java source files in CI\nrootProject.name = 'p4a-java-l"
},
{
"path": "pythonforandroid/bootstraps/webview/__init__.py",
"chars": 239,
"preview": "from pythonforandroid.toolchain import Bootstrap\n\n\nclass WebViewBootstrap(Bootstrap):\n name = 'webview'\n\n recipe_d"
},
{
"path": "pythonforandroid/bootstraps/webview/build/blacklist.txt",
"chars": 1507,
"preview": "# prevent user to include invalid extensions\n*.apk\n*.aab\n*.apks\n*.pxd\n\n# eggs\n*.egg-info\n\n# unit test\nunittest/*\n\n# pyth"
},
{
"path": "pythonforandroid/bootstraps/webview/build/jni/Android.mk",
"chars": 37,
"preview": "include $(call all-subdir-makefiles)\n"
},
{
"path": "pythonforandroid/bootstraps/webview/build/jni/Application.mk",
"chars": 242,
"preview": "\n# Uncomment this if you're using STL in your project\n# See CPLUSPLUS-SUPPORT.html in the NDK documentation for more inf"
},
{
"path": "pythonforandroid/bootstraps/webview/build/jni/application/src/Android.mk",
"chars": 461,
"preview": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\n\nLOCAL_MODULE := main\n\n# LOCAL_C_INCLUDES := $(LOCAL_PATH)/$(SDL_PAT"
},
{
"path": "pythonforandroid/bootstraps/webview/build/jni/application/src/Android_static.mk",
"chars": 237,
"preview": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\n\nLOCAL_MODULE := main\n\nLOCAL_SRC_FILES := YourSourceHere.c\n\nLOCAL_ST"
},
{
"path": "pythonforandroid/bootstraps/webview/build/jni/application/src/bootstrap_name.h",
"chars": 75,
"preview": "\n#define BOOTSTRAP_NAME_WEBVIEW\n\nconst char bootstrap_name[] = \"webview\";\n\n"
},
{
"path": "pythonforandroid/bootstraps/webview/build/jni/application/src/pyjniusjni.c",
"chars": 3876,
"preview": "\n#include <pthread.h>\n#include <jni.h>\n\n#define LOGI(...) do {} while (0)\n#define LOGE(...) do {} while (0)\n\n#include \"a"
},
{
"path": "pythonforandroid/bootstraps/webview/build/proguard-project.txt",
"chars": 781,
"preview": "# To enable ProGuard in your project, edit project.properties\n# to define the proguard.config property as described in t"
},
{
"path": "pythonforandroid/bootstraps/webview/build/src/main/assets/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "pythonforandroid/bootstraps/webview/build/src/main/java/org/kivy/android/PythonActivity.java",
"chars": 22507,
"preview": "package org.kivy.android;\n\nimport android.app.Activity;\nimport android.app.AlertDialog;\nimport android.content.Context;\n"
},
{
"path": "pythonforandroid/bootstraps/webview/build/src/main/jniLibs/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "pythonforandroid/bootstraps/webview/build/src/main/res/drawable/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "pythonforandroid/bootstraps/webview/build/src/main/res/layout/main.xml",
"chars": 394,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n andr"
},
{
"path": "pythonforandroid/bootstraps/webview/build/src/main/res/mipmap/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "pythonforandroid/bootstraps/webview/build/src/main/res/mipmap-anydpi-v26/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "pythonforandroid/bootstraps/webview/build/src/main/res/values/strings.xml",
"chars": 157,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <string name=\"app_name\">SDL App</string>\n <string name=\"privat"
},
{
"path": "pythonforandroid/bootstraps/webview/build/templates/AndroidManifest.tmpl.xml",
"chars": 5189,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n androi"
},
{
"path": "pythonforandroid/bootstraps/webview/build/templates/WebViewLoader.tmpl.java",
"chars": 1849,
"preview": "package org.kivy.android;\n\nimport android.util.Log;\n\nimport java.io.IOException;\nimport java.net.Socket;\nimport java.net"
},
{
"path": "pythonforandroid/bootstraps/webview/build/templates/strings.tmpl.xml",
"chars": 809,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <style name=\"KivySupportCutout\">\n <item name=\"android:wind"
},
{
"path": "pythonforandroid/bootstraps/webview/build/templates/test/build.tmpl.xml",
"chars": 3992,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!-- This should be changed to the name of your project -->\n<project name=\"{{ ver"
},
{
"path": "pythonforandroid/bootstraps/webview/build/templates/test/build.xml.tmpl",
"chars": 3992,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!-- This should be changed to the name of your project -->\n<project name=\"{{ ver"
},
{
"path": "pythonforandroid/bootstraps/webview/build/webview_includes/_load.html",
"chars": 370,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<html>\n <head>\n <meta charset=\"utf-8\">\n <link href=\"_loading_style.css"
},
{
"path": "pythonforandroid/bootstraps/webview/build/webview_includes/_loading_style.css",
"chars": 1282,
"preview": "\nh1 {\n font-size: 30px;\n color: blue;\n font-weight: bold;\n text-align:center;\n}\n\nh2 {\n text-align:center;"
},
{
"path": "pythonforandroid/build.py",
"chars": 41851,
"preview": "from contextlib import suppress\nimport copy\nimport glob\nimport os\nimport json\nimport tempfile\nfrom os import environ\nfro"
},
{
"path": "pythonforandroid/checkdependencies.py",
"chars": 2093,
"preview": "from importlib import import_module\nfrom os import environ\nimport sys\n\nfrom packaging.version import Version\n\nfrom pytho"
},
{
"path": "pythonforandroid/distribution.py",
"chars": 11058,
"preview": "import json\nimport glob\nfrom os.path import exists, join\n\nfrom pythonforandroid.logger import (\n debug, info, info_no"
},
{
"path": "pythonforandroid/entrypoints.py",
"chars": 736,
"preview": "from pythonforandroid.recommendations import check_python_version\nfrom pythonforandroid.util import BuildInterruptingExc"
},
{
"path": "pythonforandroid/graph.py",
"chars": 12438,
"preview": "from copy import deepcopy\nfrom itertools import product\n\nfrom pythonforandroid.logger import info\nfrom pythonforandroid."
},
{
"path": "pythonforandroid/includes/arm64-v8a/machine/cpu-features.h",
"chars": 150,
"preview": "#ifndef _ARM64_CPU_FEATURES\n#define _ARM64_CPU_FEATURES\n\n#define __ARM_ARCH__ 8\n#define __ARM_HAVE_HALFWORD_MULTIPLY 1\n\n"
},
{
"path": "pythonforandroid/logger.py",
"chars": 8350,
"preview": "import logging\nimport os\nimport re\nimport sh\nfrom sys import stdout, stderr\nfrom math import log10\nfrom collections impo"
},
{
"path": "pythonforandroid/patching.py",
"chars": 3744,
"preview": "\"\"\"\n Helper functions for recipes.\n\n Recipes must supply a list of patches.\n\n Patches consist of a filename and"
},
{
"path": "pythonforandroid/prerequisites.py",
"chars": 13332,
"preview": "#!/usr/bin/env python3\n\nimport os\nimport platform\nimport shutil\nimport subprocess\nimport sys\n\nfrom pythonforandroid.logg"
}
]
// ... and 389 more files (download for full content)
About this extraction
This page contains the full source code of the kivy/python-for-android GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 589 files (1.9 MB), approximately 507.7k tokens, and a symbol index with 1933 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.