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

article/2025/9/16 11:29:02

在学习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

 游戏作截图:

 

 

 


http://chatgpt.dhexx.cn/article/F3k23CAk.shtml

相关文章

【安卓开发】

adb 查看Android版本号和SDK版本号 获取系统版本: adb devices adb usbadb shell getprop ro.build.version.release获取系统api版本: adb shell getprop ro.build.version.sdk争做数字极简主义,从买一台多亲2pro老年机开始 进入开发者&…

AndroidStudio连接安卓手机开发与调试

由于最近需要出去做学习汇报,本人就想着做一个简单的成品进行展示(入门级),又通过这段时间的学习发现,用安卓手机进行调试代码,不仅可观还方便展示哈哈哈,,但是连接手机调试的过程中…

Android开发板

由于公司要做智能自助设备,因此需要在Android开发板上开发,记录一下经验 一、Android开发板应用 Android开发板应用: 商业应用:机顶盒、广告机,自助机,售卖机,多媒体教学,人脸识别…

0.1.2 arduinodroid安卓手机版开发工具

原料: 能联网的手机1个 OTG转接头1个 开发板1个 数据线1根 目的: 在没有电脑的环境下码代码、编译、debug、update固件 首先手机上下载安装【arduinodroid】应用 然后用数据线连接OTG手机和开发板, 打开软件在右上角的【...】打开设置…

Android开发技术

Android 开发技术 1.RecycleView 设置监听器2.TimepickerView使用3.EditText隐藏下划线 1.RecycleView 设置监听器 步骤: 1、在Adapter中新建一个接口,定义接口内部的方法,并将该接口在adapter中实现 编写回调接口的基本步骤: 1…

安卓手机APP 开发

最近在准备开题报告,已经很久没再写博客了,明天要开题答辩了,十分紧张,写个博客,放松一下,祝自己明天顺利通过。哈哈!!!!! 前一阵子,…

利用手机、平板开发安卓APP(入门篇)

在这之前,开发安卓APP的开发者们只能依赖PC端的eclipse或Android studio等IDE开发软件,至少在您打开这篇文章时就已经证明您从未使用手机开发过安卓APP。如果您继续往下读就会相信并且确信:单纯使用手机、平板也能构建一个十全十美的APP应用。…

Android开发入门

文章目录 基础认识 Android作业:利用百度LBS定位期末作业:Android(仿QQ登入网易新闻)其他自学 基础认识 Android 开发:用于安卓手机APP开发 PHP:动态网页 Android Android系统是由Andy Rubin创建的&…

【Android开发】

系列文章目录 软工课设学习记录贴 基于android原生Java(后端)pythondjango 文章目录 系列文章目录一、Android Studio布局2.Activity活动2.1 活动的生命周期 3、底部导航BottomNavigationViewFragment3.1 Fragment3.2 Frame Layout 4.Intent4.1 显示Int…

android软件开发

安卓开发笔记 第一课xmlmach_parent 文件夹组成新建导入程序页面 第一课xml Linear layout:线性布局 android:orientation“vertical”(垂直布局) 布局属性 background"#ff0000"(设置背景色) layout_width“200dp” (dp类似像素单位) 其中字…

Android手机端编程开发软件合集(一)

【2022-05-14链接已更新】在网上搜索了很久才找到的编程IDE高级解锁版, 在这里记录并分享一下吧! 一、合集地址: 蓝奏云:https://huanxingke.lanzoux.com/b0203kqjg 密码:flyingdream 二、软件合集截图如下&#xff…

python实现Gabor滤波器

Gabor 函数表示 复数表示: 实数部分: 虚数部分: 其中: 代码中参数和Gabor函数参数对应关系 代码实现了Gabor滤波器的实数部分。代码中参数和Gabor函数实数部分参数对应如下: 对应 看上去是不是感觉很容易实现Gabor…

gabor特征 gabor滤波器

gabor特征 Gabor 特征是一种可以用来描述图像纹理信息的特征,Gabor 滤波器的频率和方向与人类的视觉系统类似,特别适合于纹理表示与判别。Gabor 特征主要依靠 Gabor 核在频率域上对信号进行加窗,从而能描述信号的局部频率信息。Gabor 核靠傅…

Log-Gabor Filters

原文转自:http://www.csse.uwa.edu.au/~pk/research/matlabfns/PhaseCongruency/Docs/convexpl.html What Are Log-Gabor Filters and Why Are They Good? Gabor filters are a traditional choice for obtaining localised frequency information. They offer the…

Gabor

出处:http://zhenyulu.cnblogs.com/articles/325968.html 二、Gabor函数 Gabor变换属于加窗傅立叶变换,Gabor函数可以在频域不同尺度、不同方向上提取相关的特征。另外Gabor函数与人眼的生物作用相仿,所以经常用作纹理识别上,并取…

Gabor滤波器与特征提取

一、Gabor滤波器 Gabor滤波器,最主要使用优势体现在对物体纹理特征的提取上。 二维Gabor基函数能够很好地描述哺乳动物初级视觉系统中一对简单视觉神经元的感受野特性。随着小波变换和神经生理学的发展,Gabor变换逐渐演变成二维Gabor小波的形式。Gabor…

【图像处理】Gabor滤波器

Gabor的核函数参考的wiki 使用实数Real的公式计算核函数代码&#xff1a; Mat getGaborFilter(float lambda, float theta, float sigma2,float gamma, float psi 0.0f){if(abs(lambda-0.0f)<1e-6){lambda 1.0f;} float sigma_x sigma2;float sigma_y sigma2/(gamma*gam…

生物特征识别中的Gabor滤波器

Daugman&#xff08;1980&#xff09;提出的2D Gabor滤波器&#xff08;以下简称Gabor滤波器&#xff09;&#xff0c;在纹理分类、纹理分割、生物特征识别中取得了广泛的应用。本文首先简要介绍Gabor滤波器&#xff0c;然后列举它在生物特征识别方面的代表性应用。 2D Gabor滤…

matlab的gabor类解读

为什么要进行解析&#xff0c;因为自带的gabor函数有个小坑&#xff0c; 转opencv的时候&#xff0c;因为没有完全理解自带的gabor源码被小小的坑了一下&#xff0c; 所以做一下记录&#xff0c; 以方便后人。‘ 版本是2016B 文章目录 Matlab gabor函数解析1 gabor基本公式2 m…

Gabor滤波 + 多尺度问题

Gabor函数 Gabor变换属于加窗傅立叶变换&#xff0c;Gabor函数可以在频域不同尺度、不同方向上提取相关的特征。另外Gabor函数与人眼的生物作用相仿&#xff0c;所以经常用作纹理识别上&#xff0c;并取得了较好的效果。二维Gabor函数可以表示为&#xff1a; 其中&#xff1a;…