24 Mar 2017 | Python
kivy 是 python 的一个UI库,可以在多平台运行。这里用 python-for-android (p4a)生成 基于kivy的android apk。
用 python-for-android 0.1 ducumentation 中给的官方例程运行会报错。
p4a apk --private $HOME/code/myapp --package=org.example.myapp --name "My application" --version 0.1 --bootstrap=sdl2 --requirements=python2,kivy
根据报错信息指定 android-sdk 和 android-ndk 的安装目录和版本号以及所使用的 api 。此处我使用的android api 是19 , ndk 是 r14。
--sdk_dir PATH as an equivalent of $ANDROIDSDK
--ndk_dir PATH as an equivalent of $ANDROIDNDK
--android_api VERSION as an equivalent of $ANDROIDAPI
--ndk_ver PATH as an equivalent of $ANDROIDNDKVER
在末尾加上
--arch=armeabi-v7a
继续报错,显示
Android NDK: WARNING: APP_PLATFORM android-19 is larger than android:minSdkVersion 12
stackoverflow 上有解释说是使用的 sdk 的版本问题,要修改sdk版本, 修改
$HOME/.local/share/python-for-android/build/bootstrap_builds/sdl2-python2/AndroidManifest.xml
将其中的 minSdkVersion
和 targetSdkVersion
由 12 修改为 19。
报错
Android NDK: Module main depends on undefined modules: python_shared
参照报错信息,修改
$HOME/.local/share/python-for-android/build/bootstrap_builds/sdl2-python2/jni/src/Android.mk
将其中的 python-shared
去掉。
继续报错
name is too long
stackoverflow 上的解释是项目目录中含有别的文件,清除别的文件后仍报错。 修改
/usr/lib/python2.7/tarfile.py
将其中的LENGTH_NAME 由 100 改为 1000 。
后又报错
linkname is too long
同理,修改上述文件,将 LENGTH_LINK
由 100 修改为 1000 。
完整命令:
p4a apk --private $HOME/code/myapp --package=org.example.test --name "test" --version 0.1 --sdk_dir /home/xwt/.buildozer/android/platform/android-sdk-20 --android_api 19 --ndk_dir /home/xwt/android-ndk-r14 --ndk_ver r14 --bootstrap=sdl2 --requirements=python2,kivy --arch=armeabi-v7a
最后,终于可以生成apk。
参考资料 : python-for-android 0.1 ducumentation
《 kivy documentation Release 1.9.2-dev0》