实战用Python+Pygame+Kivy(Buildozer)+Ubuntu开发安卓android手机端apk游戏及踩坑分享

Posted alixixi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实战用Python+Pygame+Kivy(Buildozer)+Ubuntu开发安卓android手机端apk游戏及踩坑分享相关的知识,希望对你有一定的参考价值。

在学习Python过程中,第一个接触到了Pygame和Pygame ZERO两个库,学完Pygame的基础知识后,就开始研究如何让程序在手机端运行,于是就开始了无尽的踩坑过程。

游戏的编写和设计就一笔略过,基础的源代码网上下载的,基于原思路做了很多改进。开发环境是用PyChram,代码工作完成后,很轻松就打包成了EXE游戏软件,这一步相对于打包APK手机端程序来说简直不要太简单,通过PyInstaller轻松打包运行,这里就不详细说了。至于打包安卓APK的过程本人也是挑常见的踩坑重点来给大家分享!

Python打包APK的环境及配置过程在网上已经有很多文章,此处简要概括:

开发环境:

1、本机PYTHON版本:3.8.10,虚拟机:3.6.9 

 2、操作系统:WIN7 64位 + Ubuntu 18.04.6

3、开发机和虚拟机都是用的 Pygame 2.1.2

4、虚拟机Kivy版本:V2.1.0 + Python 3.6.9

 5、Buildozer版本1.4.0

通过以上配置好打包环境后(配置教程参考网上很多文章),我们就可以开始把自己电脑里开发好的Python程序打包安卓app应用了。

对了,个人建议除了以上的开发环境,我们还需要一个调试环境,有可能您使用的苹果手机,就算是用安卓手机,来回的传打包好的apk进行调试也是相当麻烦,我在做这个程序的时候,本机电脑PC端安装了逍遥模拟器来测试调试打包好的apk程序。非常的方便,兼容性也不错,能快速的安装apk模拟在安卓手机运行apk的情况,极力推荐。

打开界面如下,通过右侧的安装apk选项,可以快整安装apk程序。

安装完后直接点击运行即可。

 

 接着往下说,在环境配置好以后,个人建议先制作一个Hello Wolrd!之类的简单Python程序来先测试打包环境。

重点来了,下面开始排坑教程:

1、在本机开发好的Python程序,主程序文件名勿必更改为main.py,不要问我为什么。

2、虚拟机中设置共享文件夹,把开发好的Python程序及相关图片资源目录复制到共享文件夹里。

 然后通过Ubuntu虚拟机的mnt/hgfs目录内读取共享的文件

 

 直接复制文件,回到虚拟机的HOME目录层下,新建一个存放Python打包项目的文件。这里我建立的文件夹名为airgame。

 

这一步我们就把要打包的程序成功复制到了HOME下的airgame文件夹。新建议的文件里是没在bin和buildozer.spec配置文件的,这里忽略,后面会讲到。

3、 复制到Ubuntu虚拟机后,运行Python程序验证是否正常运行。

为了验证一下您的Python程序是否能在虚拟机里正常运行,打开Ubuntu的终端命令行模式,快捷键CTRL+ALT+T,或者通过左侧菜单打开。打开后,终端默认的目录是HOME下,我们通过cd airgame 进入到我们新建的项目文件夹,通过python3 main.py运行我们的Python程序,验证是否可以正常运行,避免直接打包踩坑。

OK,如果不能正常运行,那就跪自己的键盘吧,回本机检查调试好再来!

废话不多说,程序正常运行后, 我们开始通过Kivy的Buildozer创建一个打包项目的配置文件。

4、通过虚拟机终端创建Buildozer打包apk的配置文件

刚才我们已经通过终端进入到项目文件夹里并验证了Python程序正常运行,这时我们在终端命令行里输入:buildozer init ,回车。然后通过左侧菜单返回到界面窗口的项目文件夹,这里是airgame,这时,就能看到一个标准初始化的Buildozer.spec配置文件和bin空目录。我们先需要对配置文件进行简单的修改,再进行下一步打包操作。

5、针对Python程序项目的具体情况,修改配置文件内容(很重要!)

Tips: 如果你仅仅是简单的测试Hello World!代码程序,这步你可以先略过,直接进入打包命令环节,正式项目打包时再看。

虚拟机中我们通过鼠标右击,直接用系统的文本编辑器打开spec配置文件:

 打开后如下图,需要修改的重要几行都做红框备注,没有提到的尽量不要修改!

 

 以上就是配置文件修改的内容,可根据实际情况配置你的项目。在修改完成后,CTRL+S保存配置文件,然后回到终端命令行窗口。

6、运行Buildozer打包程序。

在终端命令行下输入:buildozer android debug ,回车!

如果您之前的环境搭建正常,那很这一步会很顺利。网上的搭建教程有各种版本,说起来头大,有说需要建VPN的,有说无法下载到某些依赖资源包的,众说纷云各中问题百出,其实去按Kivy的官网简单配置搭建一下就OK了,根本没有那么多问题。

回到刚才说的回车运行,如果你是第一次运行,的确需要等待十几分钟甚至更长的时间 ,如果你的环境搭配不正确,期间还会各种中断,当然都会有错误日志提示,你可以复制error的信息到百度寻求答案,也可以本文下方留言咨询。

但是如果你正常运行过一次后,进行Python或资源文件目录的改动等等操作是不需要那么长时间的,只需要一两分钟,就可以打包好apk,轻松的反复打包生成。

如果你修改了spec配置文件的打包名或app名,可能需要更长一些时间。

这一步的坑是最多的,就算你的环境配置没有问题,能正常打包出Hello Wrold!简单的apk,但在进行正式项目的打包时,仍会跳出很多的问题。比如正式项目打包成功出apk文件后,在安卓系统里运行出现闪退这类情况,针对这些这里再列举一些常见的问题。

6.1 配置文件没有引入第三方库或者引入了内置库,都会出错。

6.2 Python里的目录名,文件名大小写与文件夹实际的名称大小写不一致导致出错。

6.3 配置文件没有添加所有项目文件的类型,比如音乐 .wav。

6.4 配置文件没有资源文件夹名称,导致打包时不会复制文件夹内容。

6.5 Python代码的资源目录路径不正确!这是最常见也是个人花最多时间排除的BUG。在Python中,我们调用图片或音乐等文件时,通过都用相对主程序的根路径比如"./images/"或"images/",而当我们进行apk打包时,都需要对这些路径进行修改,对应在Python源代码里改成"app/images/",否则肯定打包失败。

6.6 引用的图片或音乐等外部文件不全,漏复制,找不到代码中的任何一个资源文件都会出错。就算你在虚拟机中测试打开Python正常,都可能会有Bug导致出错。

6.7 Python文件名没有改成main.py,这是低级错误,但也有人犯。

6.8 Python代码冲突或Bug导致无法打包成功的问题,关于这个错误,个人建议是分段打包调试,在本地节取或删除部分复杂或有可能出错的代码,简化程序排除法,这是最笨的方法,也是最有效的。在本地电脑可以复制粘贴到虚拟机的main.py里进行修改保存打包调试,只要你已经成功打包过Hello World!简单的程序后,这个方法可靠。

其实在做这个程序时,个人踩过的坑比以上列举的要多得多,暂时能想起的就这些了,如果你遇到其它没解决的问题,欢迎留言,有空会及时回复!

7、在成功打包并在安卓系统运行后,其实还会有很多需要调节自己Python程序的地方最常见的我也简单列举一下:

7.1 程序运行的窗口大小和分辨率匹配的问题。

在电脑上开发Python会有视窗口大小的概念,而放到安卓系统运行app时,你会发现在手机里,程序完全变了样。这里你需要处理图片,窗口,等等的设计问题,比如在Pygame里,你要得到整个屏幕大小来做程序的适应和调节:

info = pygame.display.Info()
SCR_WIDTH = info.current_w
SCR_HEIGHT = info.current_h

更多的图片位置应该使用相对路径,比如self.rect.x = SCR_WIDTH/2,而不是self.rect.x = 100之类的。

7.2 分辨率问题,导致程序运行的速度和效果差错。

在电脑中运行很流畅的Python程序,在打包apk运行在安卓手机里时,会发现一些动态和移动效果变得非常慢,这是因为安卓手机普遍现在都是高分辨率,Python程序中一些self.rect.x +=1之类的代码,需要做一些适应修改。

7.3 Pygame在安卓手机中运行非常卡顿。

Pygame的游戏运行机制是通过高刷来实际一些动画动态效果,相对一些使用大量图片或滚动背景图片的动态效果程序来说,在手机里运行是非常鸡肋的,只能在电脑中流畅的运行。

本人开发的这款游戏,就是使用了多背景图滚动显示,就会让游戏运行有些卡顿,必竟程序要在如此高分辨率的手机屏上反复的去高刷,真的太难了。所以Python开发手机游戏或一些功能,真是不太适合,只能说可以学习练手玩玩!

这里附上作者完成的游戏成品apk分享给大家,如果大家也想尝试做类似的app,可以下载观摩:) 遇到本文相关的打包问题,可以留言。

游戏资源站内下载链接:

https://download.csdn.net/download/alixixi/86761366

 游戏作截图:

 

 

 

《Buildozer打包实战指南》第二节 安装Kivy和Buildozer

目录

2.1 安装Kivy

2.2 安装Buildozer

2.3 验证安装

2.4 一点建议


Python是Ubuntu系统中自带的,我们在桌面上右键打开终端,然后输入python3 --version就可以看到Ubuntu系统中的Python版本了。

可以看到,Python的版本是3.10.6。虽然Python已经有了,但是还没有pip,所以我们也下载不了其他第三方库。在终端中输入以下命令安装pip:

sudo apt install python3-pip

注:如果大家在安装时出现“无法获得锁/var/lib/dpkg/lock-frontend”的错误,可以在终端中输入以下两条命令后再安装pip:

sudo rm /var/lib/dpkg/lock-frontend
sudo rm /var/cache/apt/archives/lock

pip已经有了,那就可以下载安装Kivy和Buildozer了。

2.1 安装Kivy

因为要开发手机端应用,那Kivy自然必不可少。将纯Kivy开发的应用打包成安卓apk是本教程的最基本目标,笔者也会带大家学会如何去打包其他第三方库,如requests、opencv-python、numpy等等。

现在我们在终端中输入以下命令开始下载并安装Kivy库:

pip3 install Kivy -i https://pypi.tuna.tsinghua.edu.cn/simple

如果最后出现“Successfully installed XXXXXX”字样的话,就表明安装成功。可以看到,本教程中使用的Kivy版本是2.1.0

2.2 安装Buildozer

在终端中输入以下命令开始下载并安装Buildozer库:

pip3 install buildozer -i https://pypi.tuna.tsinghua.edu.cn/simple

如果最后出现“Successfully installed XXXXXX”字样的话,就表明安装成功。可以看到,本教程中使用的Buildozer版本是1.4.0

2.3 验证安装

在安装成功后我们需要看下库能否在程序中正常导入。在终端中输入python3打开python命令行模式,然后输入import kivy,如果没有报错,则可以正常使用kivy。

 同样,如果输入import buildozer后,没有报错的话,则可以正常使用buildozer。

2.4 一点建议

虽然新版本的库会比较诱惑,但建议读者下载和本教程中一样版本的库,这样可以规避很多新问题。能熟练掌握本教程内容后,再去使用更新版本的库也不迟。

以上是关于实战用Python+Pygame+Kivy(Buildozer)+Ubuntu开发安卓android手机端apk游戏及踩坑分享的主要内容,如果未能解决你的问题,请参考以下文章

在 Kivy 中使用 sdl2 而不是 pygame

kivy这个单词啥意思

kivy和pyqt5哪个简单

python及pygame雷霆战机游戏项目实战14 游戏开始结束界面

Python入门 —— 2048实战(字符界面和图形界面)

Python、Kivy 和 Android 游戏 [关闭]