CSDN删减版,2023年1月11日
Kivy和Buildozer是什么自行百度。本文主要介绍如何打通从配置Kivy、在Win10(没测试别的,但应该别太离谱就行)中的VBox上安装Ubuntu及配套必要步骤、安装Buildozer、app编译上线一条龙的过程。上述内容除Win10安装外均会从头演示一遍(部分步骤没有图,因为没有截屏或没必要放图)。
之所以要安装这俩是因为Buildozer不支持Windows系统,想要在Win10上使用需要安装虚拟机。当然如果你的开发环境本身就是Linux,或者你有VMware或其它安装了Ubuntu的虚拟机,在不影响后续的前提下可以跳过此步骤。下文也如此,请自行选择执行的步骤。
VBox全称Oracle VM Virtual Box,是一款虚拟机软件,类似VMware,但是是免费的。有关内容详见其官网和CSDN站内教程。安装过程本身不复杂,按照安装包(可在官网下载,但我是在别处搞的,理论上区别不大)指导进行即可,此处不易遇到问题。安装完成后打开截图如下。
其中PC1是我已经安装好的虚拟机,刚安装好的VBox左侧“工具”下方应该是空的。P.S.:我刚刚才发现我之前安了VMware。
1、你应该去Ubuntu官网下载.iso文件,我使用的版本是18.04,刚开始尝试使用20.04但不知为何在首次启动输入用户名和密码时死活输不进去(测试了键盘正常),故换用18.04。注意,不需要把.iso文件写入光盘映像到U盘中!
2、点击“新建”,出现如下图所示界面,按照图中选择即可。其中“文件夹”是你虚拟机的保存路径,VBox会自动在此路径下创建一个和“名称”同名的文件夹,故不需要手动新建一个。
3、下一步,给虚拟机分配内存,默认是1024M,如果你电脑配置较高可分高点,我分配的是2048M。
4、下一步,创建虚拟硬盘,选择“现在创建虚拟硬盘”,随后默认VDI即可。选择“动态分配”或“固定大小”,我选的是固定大小,分配时间较长但可加快虚拟机速度。虚拟硬盘的位置默认即可,但大小应尽量大,因为Buildozer及其依赖工具将占用大量空间,默认是10G,我选的是64G。
5、此时应该出现如下画面。其中参数可能和上述参数不同,因为是演示,并未仔细设置。
需要注意的是显存刚刚并没有设置,默认是16M。你需要把显存改成128M,否则开机后会奇卡无比。具体修改方法为“设置”→“显示”→“屏幕”→“显存大小”,如下图。
如果电脑有余裕,可以把CPU数目也设置高点,具体方法为“设置”→“系统”→“处理器”,默认是1核,我由于是笔记本性能有限,设置的是2核。
6、为了能够正常地与主机共用剪切板,你需要进行几个额外的设置。
①“设置”→“存储”→“属性”,勾选“使用主机输入输出(I/O)缓存”。
②选中你刚刚创建的虚拟硬盘,属性中勾选“固态驱动器”,如下图。
③“常规”→“高级”,将共享粘贴板选为“双向”,下面的拖放也顺手改成双向。随后OK保存。绝大部分网上的教程到这一步就没了,但仍然无法使用粘贴板。
④接9。
7、启动虚拟机,第一次启动时VBox会让你选择.iso文件,这时选择你刚刚下载好的.iso文件即可。稍等一会你就可以看见巴掌大小的屏幕了,这是因为VBox的默认分辨率是几百乘几百(具体忘了),如果你不习惯这个大小,在第8步中会有处理方法。
接下来的步骤是在虚拟机内部操作,正常的安装步骤,如果你之前安装过Ubuntu系统应该很熟悉,不熟悉的话按照系统提示也可以完成。安装耗时因电脑而异,且主机需要联网。安装完成后Ubuntu要求你弹出光盘映像并重启,但你无法弹出,故直接右上角×,选择强制退出即可。需要注意的是,安装好虚拟机并第二次启动时不会让你选择.iso文件,但默认启动顺序还是该文件,你需要调整启动顺序。具体方法为“设置”→“系统”→“主板”,在“启动顺序”中把“硬盘”移动到最上方。
8、你需要调节屏幕大小,当然如果你习惯的话可以不调。启动虚拟机,在虚拟机窗口左上角“管理”→“全局设定”→“显示”,把“最大屏幕尺寸”,改成“提示”,随后你就可以自己调节下方的宽度和高度了,你也可以在这里看到默认的宽高。我调的是1280*960。如下图。
OK保存。此时你再去Ubuntu中调节屏幕尺寸(具体方法自行百度)便可以改变屏幕大小了。
9、我们需要解决6中④的遗留问题,即粘贴板仍然无法使用的问题。在虚拟机窗口选择“设备”→“安装增强功能”,稍等一会可以看到你的Ubuntu桌面上出现了一张光盘,随后会自动让你输入密码,这个密码就是你第7步安装Ubuntu时设置的密码,下同。此步也不易出现问题,按照提示操作完成即可。重启后(如果要求重启)便可正常使用粘贴板,如果你看到光盘还在你的桌面上,右键弹出即可。此时你也可以发现Ubuntu桌面分辨率可以自适应你的窗口大小了,不知道这和第8步有没有关系,但总归是好事。
10、为了后期传输文件方便,你应该在虚拟机窗口“设备”→“共享文件夹”中按提示设置共享文件夹,如下图,其中红圈圈出的按钮即为添加共享文件夹。
添加成功后该共享文件夹会出现在你Ubuntu的桌面上,此文件夹中的文件在Ubuntu和主机(Win10)中均可访问。到此虚拟机安装完成。
随后在Ubuntu中安装Anaconda,配置虚拟环境,因为要在虚拟环境中安装Buildozer,也方便管理和出问题回滚(删除虚拟环境即可)。
安装Anaconda的教程实际上已经有很多了,且流程较为固定,不再赘述。我百度了几个基本没问题教程贴在下面。
Ubuntu安装Anaconda详细步骤(Ubuntu21.10,Anaconda3)
Ubuntu安装Anaconda(Ubuntu18.04,Anaconda3)
之所以说基本没问题,是因为到教程中在命令行输入conda list或者类似的conda命令验证安装是否成功时,可能显示找不到conda,或者conda没有权限不可执行之类的问题。可按需进行如下操作。
1、找不到conda大概率是没有把conda添加到路径。此文章把在Ubuntu中如何添加到路径讲的很详细,可以参考。我选择修改profile文件添加到路径。在终端下输入如下命令打开编辑profile文件。每个终端第一次使用sudo时回车后需要输入一次密码,输入并回车即可。
sudo gedit /etc/profile
在文件末尾添加如下文本。
export PATH=/your/path/anaconda3/bin:$PATH
其中的“/your/path/anaconda3/bin”替换为你的conda对应位置的路径,下同。随后保存并关闭文件,重启虚拟机即添加完成。
2、没有权限一般是你的conda文件权限没有可执行一项。若一切正常,conda文件的权限应该如下图所示。其中“执行”右侧应该勾选,上方应该均为读写。
但你无法在此界面更改权限,需要使用chmod更改,在终端输入如下代码。
sudo chmod -R 777 /your/path/anaconda3/
其中“-R”代表递归更改该目录及其文件和子目录的权限,777为读写执行。深入了解chmod指令含义可自行百度。
3、此时再输入conda list应该成功显示conda安装的包,conda安装成功。
有关conda虚拟环境的操作可以参照此博文,也可自行百度,难度不大。从头创建虚拟环境,你需要在命令行中执行如下命令。
conda create -n your_env_name python=X.X
其中“your_env_name”为你虚拟环境的名称,“X.X”为你的python版本,我使用的是3.8。随后按照conda的英文提示描述按需操作即可。
创建完环境之后,执行如下命令验证创建是否成功。
conda env list
若一切正常,返回信息应该如下图所示。
图中显示我创建了一个名为“python38_kivy”的环境,其所在路径为“/home/pc1/anaconda3/envs/python38_kivy”。为了一会执行的便利性,你需要将该路径的“./bin”子路径添加到Ubuntu路径中,即在profile文件末尾添加如下文本并保存。
export PATH=/your/path/anaconda3/envs/your_env_name/bin:$PATH
随后进入该路径下,把名为“python”的可执行文件改名为你虚拟环境的名称,即“your_env_name”(我的习惯,为了在命令行中调用方便)。重启电脑,此时在命令行输入如下命令,应该会打印出该虚拟环境下安装的包列表。
your_env_name -m pip list
随后你需要在虚拟环境下安装Kivy,按照其教程说明,命令行执行如下代码。根据你的需要选择Kivy依赖的量,我为以后方便安装了全部依赖,即“full”。
your_env_name -m pip install "kivy[full]" kivy_examples -i https://pypi.tuna.tsinghua.edu.cn/simple
到此虚拟环境创建完成。
由于【censored】,在安装Buildozer之前有两个前置项,即Ubuntu换源和Linux【censored】。当然,如果你人在海外则不用进行此操作。
如果你不换源,你可以享受到【censored】提供的优质上网速度和连接质量,但我们这种【censored】没有资格使用使用如此【censored】的服务,故我们需要自觉换源,为国家节省资源。同理,Ubuntu换源的教程也有很多,我选择了几个较为靠谱的贴在下方,按照操作即可。需要注意的是,不同版本的Ubuntu源的细节有差异,需要按照你的版本操作。
Ubuntu 18.04 更换国内源
如何为你的 Ubuntu 20.04 换源
今天我们的任务不是发表评论,而是搞app,故懂的都懂,不懂的说了也不懂。你最好会基础的Windows【censored】技术,故此部分安排稍显滑稽,因为有此技术的人应该能自行解决Linux下的【censored】问题。具体操作可参照【censored】、询问熟人或直接【censored】搜索选用自己喜欢的方法,能达到目的均可。
你应该参考Buildozer文档给的安装步骤操作。首先在你的虚拟环境中安装Buildozer项目,在命令行运行如下命令。
your_env_name -m pip install buildozer -i https://pypi.tuna.tsinghua.edu.cn/simple
如果你按照我“创建虚拟环境”中此步进行了重命名,“your_env_name”即为你的目标虚拟环境名(下同,不再赘述),若没有,请自行想办法安装。随后安装必要的Ubuntu包,在命令行依次运行如下命令。
sudo apt update
sudo apt install -y git zip unzip openjdk-17-jdk python3-pip autoconf libtool pkg-config zlib1g-dev libncurses5-dev libncursesw5-dev libtinfo5 cmake libffi-dev libssl-dev
如果你已经为Ubuntu换了源,你将节省大量时间。随后运行如下命令。
your_env_name -m pip install --upgrade Cython==0.29.19 virtualenv
至此Buildozer安装完成。
由于构建Android app要安装大量依赖包,包括NDK、JDK之类的玩意,第一次运行Buildozer时它会试图下载它们。这是全流程最容易出问题的环节,也是对网络要求最高的环节,这就是要【censored】的原因。当然,这个下载环节是一次性的,第二次构建app及以后均不需要此流程。此流程所需代码并不多,但重点在遇到Bug随机应变。
首先在合适位置创建一个main.py文件用于Buildozer构建入口,注意,所有由Buildozer构建的app都应该是以“main.py”为入口。作为测试,在该文件内部输入如下代码并保存,其运行效果是在屏幕中心显示一个“Hello world”。
import kivy
from kivy.app import App
from kivy.uix.label import Label
class MyApp(App):
def build(self):
return Label(text='Hello world')
if __name__ == '__main__':
MyApp().run()
在该文件路径下打开命令行(或者直接cd到其目录下),运行如下命令。
buildozer init
此时该目录下会生成一个“buildozer.spec”文件,打开文件可以看到里面有很多可供编辑的选项及其对应的英文解释。日后想定制app相关具体内容可根据其意义自行调整,但本次运行没必要调整(当然你愿意可以自行调整一些内容,只要不影响app构建就行)。继续运行如下命令。
buildozer android debug
此时Buildozer开始第一次构建app,过一会可能会让你同意若干次Google的协议,输入“yes”即可继续下载。依据网速区别,首次运行时间(不计排除错误)可能在数十分钟到数小时不等。尽管已经提前【censored】,也可能遇到网络问题。可能遇到的问题各种各样,如下为几个例子,但最重要的是依据其错误信息随机应变。
1、“Error in the pull function”或下载进度卡死不动
网络问题,Ctrl+C,再次运行构建命令。
2、“fatal: unable to access ‘https://github.com/…/”
此问题常出现在某个和sdl2(没记错的话)相关的“external”文件夹下的几个图像相关的文件夹,本质是Buildozer此部分下载网址有缺陷。遇到此问题你需要先把这几个文件夹删了,再运行构建命令,否则会报错文件夹已存在。
3、无aidl
百度或Google自行安装aidl即可。
如果你觉得哪都有问题,想重来一遍,只需要删除“main.py”根目录下的“bin”和“.buildozer”文件夹、删除主文件夹(“./home/虚拟机名称”,或者说“~”)下的“.buildozer”文件夹,此时相当于把进度回滚到运行构建命令之前。
若最后显示如下图,说明你构建成功了。你可以在成功运行完成后在“main.py”根目录“bin”文件夹下找到构建好的.apk文件。
把该文件拷贝到手机中,安装运行,可以得到结果如下。恭喜你,到此全部结束了。
替换“main.py”文件,删除其同目录下其它文件,再次输入“buildozer init”并调整生成的“buildozer.spec”文件,再次构建即可。注意,千万不要动主文件夹下的“.buildozer”文件夹,否则你又要重来一遍!
此过程前前后后摸索了两天,不得不说【censored】内互联网是真的坑,一堆教程都是瞎讲或者复制粘贴,好多bug都是【censored】解决的。还是那句话,能【censored】早【censored】,应【censored】尽【censored】。