先贴3个库的链接 : kivy, buildozer, p4a(python-for-android)
buildozer 是 kivy 开发小组基于自家的 python-for-android 开发的傻瓜式 android 编译工具,用于将 python 项目编译成为 .apk 文件。
本文记录了整个折腾过程(不完全整理,非线性时间顺序),建议读完再操作,因为前面可能是我踩过的坑 .... (时间是 2019年6月22日21:31:38 )
配置
OS : UBUNTU 18.04 LTS (官方 buildozer 虚拟机 XUBUNTU 由于无法换到可以用的源,被替换了)
python : python3
buildozer : 0.39 ( 通过 812 ISSUE 升级到了 0.40.dev0)
python-for-android: master
kivy: 1.11.0
先按照官方步骤完成 buildozer 虚拟机的安装,buildozer 虚拟机安装的是 xubuntu 系统。
首先建议将 buildozer 使用开发分支重新安装,可以解决一个 'Buildozer' object has no attribute 'translate_target' 的问题。
pip install --upgrade https://github.com/kivy/buildozer/archive/4c2152b.zip
在 xubuntu 系统中切换至 项目目录,执行
buildozer init
一个名为 buildozer.spec 的文本文件会被自动生成,里面的内容将指导整个编译过程
我这里的 main.py 内容很简单,只有一个按钮
from kivy.app import App
from kivy.uix.button import Button
class SimpleApp(App):
def build(self):
return Button(text='joke')
if '__main__' == __name__:
SimpleApp().run()
那么将问题简化为编译一个带有 kivy 的程序为 .apk 文件,不包含其他任何依赖
bin 和 build_area 目录分别是编译结果输出目录和编译中间目录,在 buildozer.spec 文件中分别指定到 bin_dir 和 build_dir
按照 README 中所说,从 https://www.crystax.net/en/download 下载了 ndk 并解压,对 buildozer.spec 做如下修改
# (str) Title of your application
title = SimpleAppTitle
# (str) Package name
package.name = SimpleApp
# (str) Package domain (needed for android/ios packaging)
package.domain = dav.test
...
# Require python3crystax:
requirements = python3crystax,kivy
# Point to the directory where you extracted the crystax-ndk:
android.ndk_path = /home/kivy/Desktop/Projects/android/android-ndk-r17c/
另外,你一定有需求的就是打开调试日志
# (int) Log level (0 = error only, 1 = info, 2 = debug (with command output))
log_level = 2
于是就可以按照示例进行编译了,按如下即可,后面俩(deploy run)是部署和运行,需要连接 android 设备
buildozer android debug
那么发现下载过程非常慢,于是就去 p4a(python-for-android) 克隆库下来,指定到目录,同时指定为 master(master 会包含 python3 编译所遇到的一些已知问题的处理)
# (str) python-for-android git clone directory (if empty, it will be automatically cloned from github)
p4a.source_dir = /home/kivy/Desktop/Projects/python-for-android
# (str) python-for-android branch to use, defaults to master
p4a.branch = master
其他的包怎么办呢????我能有的思路就是自己通过比较快速的方法下载好包,替换到 buildozer 执行过程的目录中。那么问题就变成该怎么完成替换了(下载我已经解决好了 ^_^)
那么首先我们看日志