实例介绍
python-for-android(p4a)是一个开发工具,将Python应用程序打包为可以在Android设备上运行的二进制文件。它可以生成Android Package(APK)文件,可在设备上本地安装,特别适用于测试。此格式被许多应用商店使用,但不包括Google Play商店。它还可以生成可在Google Play商店共享的Android App Bundle(AAB)文件,以及可用作其他项目资源可重用捆绑包的Android Archive(AAR)文件。
该工具支持多个CPU架构,支持使用Kivy框架开发的应用程序,但设计灵活,可通过“引导”支持后端库,还支持PySDL2和带有Python Web服务器的WebView。它会自动支持大多数纯Python软件包的依赖关系。对于其他依赖于C代码的软件包,必须编写特殊的“配方”以支持交叉编译。python-for-android内置了许多最受欢迎库(如numpy和SQLAlchemy)的配方。
python-for-android通过为Android设备交叉编译Python解释器及其依赖项,并将其与应用程序捆绑在一起来实现功能。
【实例截图】
【核心代码】
文件清单
└── python-for-android-5dc17e16217620daf76d58ac6d20e4f9a9d4ff8b
├── CHANGELOG.md
├── ci
│ ├── constants.py
│ ├── __init__.py
│ ├── makefiles
│ │ ├── android.mk
│ │ └── osx.mk
│ └── rebuild_updated_recipes.py
├── CODE_OF_CONDUCT.md
├── CONTACT.md
├── CONTRIBUTING.md
├── distribute.sh
├── doc
│ ├── make.bat
│ ├── Makefile
│ ├── requirements.txt
│ └── source
│ ├── 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
│ ├── _static
│ ├── testing_pull_requests.rst
│ └── troubleshooting.rst
├── Dockerfile
├── FAQ.md
├── LICENSE
├── Makefile
├── MANIFEST.in
├── pythonforandroid
│ ├── androidndk.py
│ ├── archs.py
│ ├── bdistapk.py
│ ├── bootstrap.py
│ ├── bootstraps
│ │ ├── 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
│ │ │ │ │ ├── PythonService.java
│ │ │ │ │ └── PythonUtil.java
│ │ │ │ └── renpy
│ │ │ │ └── android
│ │ │ │ ├── AssetExtract.java
│ │ │ │ ├── Hardware.java
│ │ │ │ └── ResourceManager.java
│ │ │ ├── templates
│ │ │ │ ├── build.properties
│ │ │ │ ├── build.tmpl.gradle
│ │ │ │ ├── build.tmpl.xml
│ │ │ │ ├── custom_rules.tmpl.xml
│ │ │ │ ├── gradle.tmpl.properties
│ │ │ │ ├── kivy-icon.png
│ │ │ │ ├── kivy-presplash.jpg
│ │ │ │ ├── lottie.xml
│ │ │ │ └── Service.tmpl.java
│ │ │ └── whitelist.txt
│ │ ├── empty
│ │ │ ├── build
│ │ │ └── __init__.py
│ │ ├── __init__.py
│ │ ├── qt
│ │ │ ├── build
│ │ │ │ ├── blacklist.txt
│ │ │ │ ├── jni
│ │ │ │ │ ├── application
│ │ │ │ │ │ └── src
│ │ │ │ │ │ ├── Android.mk
│ │ │ │ │ │ ├── Android_static.mk
│ │ │ │ │ │ └── bootstrap_name.h
│ │ │ │ │ └── Application.mk
│ │ │ │ ├── src
│ │ │ │ │ └── main
│ │ │ │ │ ├── assets
│ │ │ │ │ ├── java
│ │ │ │ │ │ └── org
│ │ │ │ │ │ └── kivy
│ │ │ │ │ │ └── android
│ │ │ │ │ │ └── PythonActivity.java
│ │ │ │ │ ├── jniLibs
│ │ │ │ │ ├── libs
│ │ │ │ │ └── res
│ │ │ │ │ ├── drawable
│ │ │ │ │ └── mipmap
│ │ │ │ └── templates
│ │ │ │ ├── AndroidManifest.tmpl.xml
│ │ │ │ ├── libs.tmpl.xml
│ │ │ │ └── strings.tmpl.xml
│ │ │ └── __init__.py
│ │ ├── sdl2
│ │ │ ├── build
│ │ │ │ ├── blacklist.txt
│ │ │ │ ├── jni
│ │ │ │ │ ├── application
│ │ │ │ │ │ └── src
│ │ │ │ │ │ ├── Android_static.mk
│ │ │ │ │ │ └── bootstrap_name.h
│ │ │ │ │ └── Application.mk
│ │ │ │ ├── src
│ │ │ │ │ ├── main
│ │ │ │ │ │ ├── assets
│ │ │ │ │ │ ├── java
│ │ │ │ │ │ │ └── org
│ │ │ │ │ │ │ └── kivy
│ │ │ │ │ │ │ └── android
│ │ │ │ │ │ │ ├── GenericBroadcastReceiverCallback.java
│ │ │ │ │ │ │ ├── GenericBroadcastReceiver.java
│ │ │ │ │ │ │ ├── launcher
│ │ │ │ │ │ │ │ ├── ProjectAdapter.java
│ │ │ │ │ │ │ │ ├── ProjectChooser.java
│ │ │ │ │ │ │ │ └── Project.java
│ │ │ │ │ │ │ └── PythonActivity.java
│ │ │ │ │ │ ├── jniLibs
│ │ │ │ │ │ ├── libs
│ │ │ │ │ │ └── res
│ │ │ │ │ │ ├── drawable
│ │ │ │ │ │ ├── drawable-hdpi
│ │ │ │ │ │ │ └── ic_launcher.png
│ │ │ │ │ │ ├── drawable-mdpi
│ │ │ │ │ │ │ └── ic_launcher.png
│ │ │ │ │ │ ├── drawable-xhdpi
│ │ │ │ │ │ │ └── ic_launcher.png
│ │ │ │ │ │ ├── drawable-xxhdpi
│ │ │ │ │ │ │ └── ic_launcher.png
│ │ │ │ │ │ ├── layout
│ │ │ │ │ │ │ ├── chooser_item.xml
│ │ │ │ │ │ │ ├── main.xml
│ │ │ │ │ │ │ ├── project_chooser.xml
│ │ │ │ │ │ │ └── project_empty.xml
│ │ │ │ │ │ ├── mipmap
│ │ │ │ │ │ └── mipmap-anydpi-v26
│ │ │ │ │ └── patches
│ │ │ │ │ └── SDLActivity.java.patch
│ │ │ │ └── templates
│ │ │ │ ├── AndroidManifest.tmpl.xml
│ │ │ │ └── strings.tmpl.xml
│ │ │ └── __init__.py
│ │ ├── service_library
│ │ │ ├── build
│ │ │ │ ├── jni
│ │ │ │ │ └── application
│ │ │ │ │ └── src
│ │ │ │ │ └── bootstrap_name.h
│ │ │ │ ├── src
│ │ │ │ │ └── main
│ │ │ │ │ ├── java
│ │ │ │ │ │ └── org
│ │ │ │ │ │ └── kivy
│ │ │ │ │ │ └── android
│ │ │ │ │ │ ├── GenericBroadcastReceiverCallback.java
│ │ │ │ │ │ ├── GenericBroadcastReceiver.java
│ │ │ │ │ │ └── PythonActivity.java
│ │ │ │ │ └── res
│ │ │ │ │ └── mipmap
│ │ │ │ └── templates
│ │ │ │ ├── AndroidManifest.tmpl.xml
│ │ │ │ └── Service.tmpl.java
│ │ │ └── __init__.py
│ │ ├── service_only
│ │ │ ├── build
│ │ │ │ ├── blacklist.txt
│ │ │ │ ├── jni
│ │ │ │ │ ├── Android.mk
│ │ │ │ │ ├── application
│ │ │ │ │ │ └── src
│ │ │ │ │ │ ├── Android.mk
│ │ │ │ │ │ ├── Android_static.mk
│ │ │ │ │ │ ├── bootstrap_name.h
│ │ │ │ │ │ └── pyjniusjni.c
│ │ │ │ │ └── Application.mk
│ │ │ │ ├── src
│ │ │ │ │ └── main
│ │ │ │ │ ├── assets
│ │ │ │ │ ├── java
│ │ │ │ │ │ └── org
│ │ │ │ │ │ └── kivy
│ │ │ │ │ │ └── android
│ │ │ │ │ │ └── PythonActivity.java
│ │ │ │ │ ├── jniLibs
│ │ │ │ │ └── res
│ │ │ │ │ ├── drawable
│ │ │ │ │ └── mipmap
│ │ │ │ └── templates
│ │ │ │ ├── AndroidManifest.tmpl.xml
│ │ │ │ ├── Service.tmpl.java
│ │ │ │ └── strings.tmpl.xml
│ │ │ └── __init__.py
│ │ └── webview
│ │ ├── build
│ │ │ ├── blacklist.txt
│ │ │ ├── jni
│ │ │ │ ├── Android.mk
│ │ │ │ ├── application
│ │ │ │ │ └── src
│ │ │ │ │ ├── Android.mk
│ │ │ │ │ ├── Android_static.mk
│ │ │ │ │ ├── bootstrap_name.h
│ │ │ │ │ └── pyjniusjni.c
│ │ │ │ └── Application.mk
│ │ │ ├── proguard-project.txt
│ │ │ ├── src
│ │ │ │ └── main
│ │ │ │ ├── assets
│ │ │ │ ├── java
│ │ │ │ │ └── org
│ │ │ │ │ └── kivy
│ │ │ │ │ └── android
│ │ │ │ │ ├── GenericBroadcastReceiverCallback.java
│ │ │ │ │ ├── GenericBroadcastReceiver.java
│ │ │ │ │ └── PythonActivity.java
│ │ │ │ ├── jniLibs
│ │ │ │ └── res
│ │ │ │ ├── drawable
│ │ │ │ │ └── icon.png
│ │ │ │ ├── layout
│ │ │ │ │ └── main.xml
│ │ │ │ ├── mipmap
│ │ │ │ ├── mipmap-anydpi-v26
│ │ │ │ └── values
│ │ │ │ └── strings.xml
│ │ │ ├── templates
│ │ │ │ ├── AndroidManifest.tmpl.xml
│ │ │ │ ├── strings.tmpl.xml
│ │ │ │ ├── test
│ │ │ │ │ ├── build.tmpl.xml
│ │ │ │ │ └── build.xml.tmpl
│ │ │ │ └── WebViewLoader.tmpl.java
│ │ │ └── webview_includes
│ │ │ ├── _load.html
│ │ │ └── _loading_style.css
│ │ └── __init__.py
│ ├── build.py
│ ├── checkdependencies.py
│ ├── distribution.py
│ ├── entrypoints.py
│ ├── graph.py
│ ├── includes
│ │ └── arm64-v8a
│ │ └── machine
│ │ └── cpu-features.h
│ ├── __init__.py
│ ├── logger.py
│ ├── patching.py
│ ├── prerequisites.py
│ ├── pythonpackage.py
│ ├── recipe.py
│ ├── recipes
│ │ ├── aiohttp
│ │ │ └── __init__.py
│ │ ├── android
│ │ │ ├── __init__.py
│ │ │ └── src
│ │ │ ├── android
│ │ │ │ ├── activity.py
│ │ │ │ ├── _android_billing_jni.c
│ │ │ │ ├── _android_billing.pyx
│ │ │ │ ├── _android_jni.c
│ │ │ │ ├── _android.pyx
│ │ │ │ ├── _android_sound_jni.c
│ │ │ │ ├── _android_sound.pyx
│ │ │ │ ├── billing.py
│ │ │ │ ├── broadcast.py
│ │ │ │ ├── _ctypes_library_finder.py
│ │ │ │ ├── display_cutout.py
│ │ │ │ ├── __init__.py
│ │ │ │ ├── loadingscreen.py
│ │ │ │ ├── mixer.py
│ │ │ │ ├── permissions.py
│ │ │ │ ├── runnable.py
│ │ │ │ └── storage.py
│ │ │ └── setup.py
│ │ ├── apsw
│ │ │ └── __init__.py
│ │ ├── argon2-cffi
│ │ │ └── __init__.py
│ │ ├── atom
│ │ │ └── __init__.py
│ │ ├── audiostream
│ │ │ └── __init__.py
│ │ ├── av
│ │ │ └── __init__.py
│ │ ├── av_codecs
│ │ │ └── __init__.py
│ │ ├── bcrypt
│ │ │ └── __init__.py
│ │ ├── boost
│ │ │ ├── disable-so-version.patch
│ │ │ ├── fix-android-issues.patch
│ │ │ ├── __init__.py
│ │ │ ├── use-android-libs.patch
│ │ │ └── user-config.jam
│ │ ├── brokenrecipe
│ │ │ └── __init__.py
│ │ ├── cffi
│ │ │ ├── disable-pkg-config.patch
│ │ │ └── __init__.py
│ │ ├── coincurve
│ │ │ ├── coincurve.patch
│ │ │ └── __init__.py
│ │ ├── coverage
│ │ │ ├── fallback-utf8.patch
│ │ │ └── __init__.py
│ │ ├── cryptography
│ │ │ └── __init__.py
│ │ ├── cymunk
│ │ │ └── __init__.py
│ │ ├── cython
│ │ │ └── __init__.py
│ │ ├── decorator
│ │ │ └── __init__.py
│ │ ├── enaml
│ │ │ ├── 0001-Update-setup.py.patch
│ │ │ └── __init__.py
│ │ ├── ethash
│ │ │ └── __init__.py
│ │ ├── evdev
│ │ │ ├── evcnt.patch
│ │ │ ├── evdev-permissions.patch
│ │ │ ├── include-dir.patch
│ │ │ ├── __init__.py
│ │ │ ├── keycnt.patch
│ │ │ └── remove-uinput.patch
│ │ ├── feedparser
│ │ │ └── __init__.py
│ │ ├── ffmpeg
│ │ │ ├── __init__.py
│ │ │ └── patches
│ │ │ └── configure.patch
│ │ ├── ffpyplayer
│ │ │ └── __init__.py
│ │ ├── ffpyplayer_codecs
│ │ │ └── __init__.py
│ │ ├── flask
│ │ │ └── __init__.py
│ │ ├── fontconfig
│ │ │ └── __init__.py
│ │ ├── freetype
│ │ │ └── __init__.py
│ │ ├── freetype-py
│ │ │ ├── fall-back-to-distutils.patch
│ │ │ └── __init__.py
│ │ ├── genericndkbuild
│ │ │ └── __init__.py
│ │ ├── gevent
│ │ │ ├── cross_compiling.patch
│ │ │ └── __init__.py
│ │ ├── greenlet
│ │ │ └── __init__.py
│ │ ├── groestlcoin_hash
│ │ │ └── __init__.py
│ │ ├── harfbuzz
│ │ │ └── __init__.py
│ │ ├── hostpython3
│ │ │ ├── __init__.py
│ │ │ └── patches
│ │ │ └── pyconfig_detection.patch
│ │ ├── icu
│ │ │ ├── disable-libs-version.patch
│ │ │ └── __init__.py
│ │ ├── ifaddr
│ │ │ ├── getifaddrs.patch
│ │ │ └── __init__.py
│ │ ├── ifaddrs
│ │ │ └── __init__.py
│ │ ├── __init__.py
│ │ ├── jedi
│ │ │ ├── fix_MergedNamesDict_get.patch
│ │ │ └── __init__.py
│ │ ├── jpeg
│ │ │ ├── Application.mk
│ │ │ ├── build-static.patch
│ │ │ ├── __init__.py
│ │ │ └── remove-version.patch
│ │ ├── kivy
│ │ │ ├── __init__.py
│ │ │ └── sdl-gl-swapwindow-nogil.patch
│ │ ├── kivy3
│ │ │ └── __init__.py
│ │ ├── kiwisolver
│ │ │ └── __init__.py
│ │ ├── lapack
│ │ │ └── __init__.py
│ │ ├── leveldb
│ │ │ └── __init__.py
│ │ ├── libbz2
│ │ │ ├── __init__.py
│ │ │ └── lib_android.patch
│ │ ├── libcurl
│ │ │ └── __init__.py
│ │ ├── libexpat
│ │ │ └── __init__.py
│ │ ├── libffi
│ │ │ ├── Application.mk
│ │ │ ├── disable-mips-check.patch
│ │ │ ├── __init__.py
│ │ │ └── remove-version-info.patch
│ │ ├── libgeos
│ │ │ └── __init__.py
│ │ ├── libglob
│ │ │ ├── glob.patch
│ │ │ └── __init__.py
│ │ ├── libiconv
│ │ │ └── __init__.py
│ │ ├── liblzma
│ │ │ └── __init__.py
│ │ ├── libmysqlclient
│ │ │ ├── add-custom-platform.patch
│ │ │ ├── disable-soname.patch
│ │ │ ├── disable-soversion.patch
│ │ │ ├── __init__.py
│ │ │ ├── Linux.cmake
│ │ │ └── p4a.cmake
│ │ ├── libogg
│ │ │ └── __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
│ │ │ ├── disable-so-version.patch
│ │ │ ├── __init__.py
│ │ │ ├── setup-lib-name.patch
│ │ │ ├── user-config-openssl.patch
│ │ │ └── use-soname-python.patch
│ │ ├── libtribler
│ │ │ └── __init__.py
│ │ ├── libvorbis
│ │ │ └── __init__.py
│ │ ├── libvpx
│ │ │ ├── __init__.py
│ │ │ └── patches
│ │ │ └── 0001-android-force-neon-runtime.patch
│ │ ├── libwebp
│ │ │ └── __init__.py
│ │ ├── libx264
│ │ │ └── __init__.py
│ │ ├── libxml2
│ │ │ ├── add-glob.c.patch
│ │ │ ├── glob.c
│ │ │ ├── glob.h
│ │ │ └── __init__.py
│ │ ├── libxslt
│ │ │ ├── fix-dlopen.patch
│ │ │ └── __init__.py
│ │ ├── libzbar
│ │ │ ├── __init__.py
│ │ │ └── werror.patch
│ │ ├── libzmq
│ │ │ └── __init__.py
│ │ ├── lxml
│ │ │ └── __init__.py
│ │ ├── m2crypto
│ │ │ └── __init__.py
│ │ ├── materialyoucolor
│ │ │ └── __init__.py
│ │ ├── matplotlib
│ │ │ ├── __init__.py
│ │ │ ├── libfreetype.pc.template
│ │ │ ├── setup.cfg.template
│ │ │ └── skip_macos.patch
│ │ ├── msgpack-python
│ │ │ └── __init__.py
│ │ ├── ndghttpsclient
│ │ ├── netifaces
│ │ │ ├── fix-build.patch
│ │ │ └── __init__.py
│ │ ├── 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
│ │ │ ├── disable-sover.patch
│ │ │ └── __init__.py
│ │ ├── pandas
│ │ │ ├── fix_numpy_includes.patch
│ │ │ └── __init__.py
│ │ ├── pil
│ │ │ └── __init__.py
│ │ ├── Pillow
│ │ │ ├── __init__.py
│ │ │ └── setup.py.patch
│ │ ├── png
│ │ │ ├── build_shared_library.patch
│ │ │ └── __init__.py
│ │ ├── preppy
│ │ │ ├── fix-setup.patch
│ │ │ └── __init__.py
│ │ ├── protobuf_cpp
│ │ │ ├── fix-python3-compatibility.patch
│ │ │ └── __init__.py
│ │ ├── psycopg2
│ │ │ └── __init__.py
│ │ ├── py3dns
│ │ │ ├── __init__.py
│ │ │ └── patches
│ │ │ └── android.patch
│ │ ├── pyaml
│ │ │ └── __init__.py
│ │ ├── pybind11
│ │ │ └── __init__.py
│ │ ├── pycparser
│ │ │ └── __init__.py
│ │ ├── pycrypto
│ │ │ ├── add_length.patch
│ │ │ └── __init__.py
│ │ ├── pycryptodome
│ │ │ └── __init__.py
│ │ ├── pydantic-core
│ │ │ └── __init__.py
│ │ ├── pygame
│ │ │ └── __init__.py
│ │ ├── pyicu
│ │ │ ├── __init__.py
│ │ │ └── locale.patch
│ │ ├── pyjnius
│ │ │ ├── genericndkbuild_jnienv_getter.patch
│ │ │ └── __init__.py
│ │ ├── pyleveldb
│ │ │ ├── bindings-only.patch
│ │ │ └── __init__.py
│ │ ├── pymunk
│ │ │ └── __init__.py
│ │ ├── pynacl
│ │ │ └── __init__.py
│ │ ├── pyogg
│ │ │ ├── __init__.py
│ │ │ └── patches
│ │ │ └── fix-find-lib.patch
│ │ ├── pyopenal
│ │ │ ├── __init__.py
│ │ │ └── patches
│ │ │ └── fix-find-lib.patch
│ │ ├── pyopenssl
│ │ │ ├── fix-dlfcn.patch
│ │ │ └── __init__.py
│ │ ├── pyproj
│ │ │ └── __init__.py
│ │ ├── pyreqwest_impersonate
│ │ │ └── __init__.py
│ │ ├── pyrxp
│ │ │ └── __init__.py
│ │ ├── pysdl2
│ │ │ └── __init__.py
│ │ ├── pysha3
│ │ │ └── __init__.py
│ │ ├── python3
│ │ │ ├── __init__.py
│ │ │ └── patches
│ │ │ ├── cpython-311-ctypes-find-library.patch
│ │ │ ├── py3.7.1_fix_cortex_a8.patch
│ │ │ ├── py3.7.1_fix-ctypes-util-find-library.patch
│ │ │ ├── py3.7.1_fix-zlib-version.patch
│ │ │ ├── py3.8.1_fix_cortex_a8.patch
│ │ │ ├── py3.8.1.patch
│ │ │ ├── pyconfig_detection.patch
│ │ │ └── reproducible-buildinfo.diff
│ │ ├── pyusb
│ │ │ ├── fix-android.patch
│ │ │ └── __init__.py
│ │ ├── pyzbar
│ │ │ └── __init__.py
│ │ ├── pyzmq
│ │ │ └── __init__.py
│ │ ├── regex
│ │ │ └── __init__.py
│ │ ├── reportlab
│ │ │ ├── __init__.py
│ │ │ └── patches
│ │ │ └── fix-setup.patch
│ │ ├── ruamel.yaml
│ │ │ ├── disable-pip-req.patch
│ │ │ └── __init__.py
│ │ ├── scipy
│ │ │ ├── __init__.py
│ │ │ └── setup.py.patch
│ │ ├── scrypt
│ │ │ ├── __init__.py
│ │ │ └── remove_librt.patch
│ │ ├── sdl2
│ │ │ └── __init__.py
│ │ ├── sdl2_image
│ │ │ ├── enable-webp.patch
│ │ │ └── __init__.py
│ │ ├── sdl2_mixer
│ │ │ └── __init__.py
│ │ ├── sdl2_ttf
│ │ │ └── __init__.py
│ │ ├── secp256k1
│ │ │ ├── cross_compile.patch
│ │ │ ├── drop_setup_requires.patch
│ │ │ ├── find_lib.patch
│ │ │ ├── __init__.py
│ │ │ ├── no-download.patch
│ │ │ └── pkg-config.patch
│ │ ├── setuptools
│ │ │ └── __init__.py
│ │ ├── shapely
│ │ │ ├── __init__.py
│ │ │ └── setup.patch
│ │ ├── six
│ │ │ └── __init__.py
│ │ ├── snappy
│ │ │ └── __init__.py
│ │ ├── spine
│ │ │ └── __init__.py
│ │ ├── sqlalchemy
│ │ │ ├── __init__.py
│ │ │ └── zipsafe.patch
│ │ ├── sqlite3
│ │ │ ├── Android.mk
│ │ │ └── __init__.py
│ │ ├── storm
│ │ │ └── __init__.py
│ │ ├── sympy
│ │ │ ├── fix_android_detection.patch
│ │ │ ├── fix_pretty_print.patch
│ │ │ ├── fix_timeutils.patch
│ │ │ └── __init__.py
│ │ ├── tflite-runtime
│ │ │ ├── build_with_cmake.patch
│ │ │ ├── CMakeLists.patch
│ │ │ └── __init__.py
│ │ ├── twisted
│ │ │ ├── incremental.patch
│ │ │ ├── __init__.py
│ │ │ └── remove_tests.patch
│ │ ├── ujson
│ │ │ └── __init__.py
│ │ ├── uvloop
│ │ │ └── __init__.py
│ │ ├── vispy
│ │ │ ├── disable_font_triage.patch
│ │ │ ├── disable_freetype.patch
│ │ │ ├── disable_freetype.patch_backup
│ │ │ ├── __init__.py
│ │ │ ├── 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
│ │ ├── fix-init.patch
│ │ ├── __init__.py
│ │ └── no_tests.patch
│ ├── recommendations.py
│ ├── toolchain.py
│ ├── tools
│ │ ├── biglink
│ │ ├── liblink
│ │ └── liblink.sh
│ └── util.py
├── README.md
├── setup.py
├── testapps
│ ├── on_device_unit_tests
│ │ ├── buildozer.spec
│ │ ├── README.rst
│ │ ├── 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
│ │ │ │ ├── coloursinv.png
│ │ │ │ ├── colours.png
│ │ │ │ └── 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
│ │ │ ├── Qt6AndroidBindings.jar
│ │ │ └── Qt6Android.jar
│ │ └── recipes
│ │ ├── PySide6
│ │ │ └── __init__.py
│ │ └── shiboken6
│ │ └── __init__.py
│ ├── setup_testapp_python3_sqlite_openssl.py
│ ├── setup_vispy.py
│ ├── testapp_sqlite_openssl
│ │ ├── colours.png
│ │ └── main.py
│ ├── testapp_vispy
│ │ └── main.py
│ ├── testlauncherreboot_setup
│ │ └── sdl2.py
│ └── testlauncher_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_libmysqlclient.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_bootstrap_build.py
│ ├── test_bootstrap.py
│ ├── test_build.py
│ ├── test_distribution.py
│ ├── test_graph.py
│ ├── test_logger.py
│ ├── test_prerequisites.py
│ ├── test_pythonpackage_basic.py
│ ├── test_pythonpackage.py
│ ├── test_recipe.py
│ ├── test_recommendations.py
│ ├── test_toolchain.py
│ └── test_util.py
└── tox.ini
311 directories, 528 files
标签:
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论