在学习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
游戏作截图:


关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
我试过重新启动apache,缓存的页面仍然出现,所以一定有一个文件夹在某个地方。我没有“公共(public)/缓存”,那么我还应该查看哪些其他地方?是否有一个URL标志也可以触发此效果? 最佳答案 您需要触摸一个文件才能清除phusion,例如:touch/webapps/mycook/tmp/restart.txt参见docs 关于ruby-如何在Ubuntu中清除RubyPhusionPassenger的缓存?,我们在StackOverflow上找到一个类似的问题:
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。
什么是ruby的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht
华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o
之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m
我想解析一个已经存在的.mid文件,改变它的乐器,例如从“acousticgrandpiano”到“violin”,然后将它保存回去或作为另一个.mid文件。根据我在文档中看到的内容,该乐器通过program_change或patch_change指令进行了更改,但我找不到任何在已经存在的MIDI文件中执行此操作的库.他们似乎都只支持从头开始创建的MIDI文件。 最佳答案 MIDIpackage会为您完成此操作,但具体方法取决于midi文件的原始内容。一个MIDI文件由一个或多个音轨组成,每个音轨是十六个channel中任何一个上的
本文主要介绍在使用Selenium进行自动化测试或者任务时,对于使用了iframe的页面,如何定位iframe中的元素文章目录场景描述解决方案具体代码场景描述当我们在使用Selenium进行自动化测试的时候,可能会遇到一些界面或者窗体是使用HTML的iframe标签进行承载的。对于iframe中的标签,如果直接查找是无法找到的,会抛出没有找到元素的异常。比如近在咫尺的例子就是,CSDN的登录窗体就是使用的iframe,大家可以尝试通过F12开发者模式查看到的tag_name,class_name,id或者xpath来定位中的页面元素,会抛出NoSuchElementException异常。解决
在VMware16.2.4安装Ubuntu一、安装VMware1.打开VMwareWorkstationPro官网,点击即可进入。2.进入后向下滑动找到Workstation16ProforWindows,点击立即下载。3.下载完成,文件大小615MB,如下图:4.鼠标右击,以管理员身份运行。5.点击下一步6.勾选条款,点击下一步7.先勾选,再点击下一步8.去掉勾选,点击下一步9.点击下一步10.点击安装11.点击许可证12.在百度上搜索VM16许可证,复制填入,然后点击输入即可,亲测有效。13.点击完成14.重启系统,点击是15.双击VMwareWorkstationPro图标,进入虚拟机主
@作者:SYFStrive @博客首页:HomePage📜:微信小程序📌:个人社区(欢迎大佬们加入)👉:社区链接🔗📌:觉得文章不错可以点点关注👉:专栏连接🔗💃:感谢支持,学累了可以先看小段由小胖给大家带来的街舞👉微信小程序(🔥)目录自定义组件-behaviors 1、什么是behaviors 2、behaviors的工作方式 3、创建behavior 4、导入并使用behavior 5、behavior中所有可用的节点 6、同名字段的覆盖和组合规则总结最后自定义组件-behaviors 1、什么是behaviorsbehaviors是小程序中,用于实现