利用python开发app实战的方法


Posted in Python onJuly 09, 2019

我很早之前就想开发一款app玩玩,无奈对java不够熟悉,之前也没有开发app的经验,因此一直耽搁了。最近想到尝试用python开发一款app,google搜索了一番后,发现确实有路可寻,目前也有了一些相对成熟的模块,于是便开始了动手实战,过程中发现这其中有很多坑,好在最终依靠google解决了,因此小记一番。

说在前面的话

python语言虽然很万能,但用它来开发app还是显得有点不对路,因此用python开发的app应当是作为编码练习、或者自娱自乐所用,加上目前这方面的模块还不是特别成熟,bug比较多,总而言之,劝君莫轻入。

准备工作

利用python开发app需要用到python的一个模块?kivy,kivy是一个开源的,跨平台的Python开发框架,用于开发使用创新的应用程序。简而言之,这是一个python桌面程序开发框架(类似wxpython等模块),强大的是kivy支持linux、mac、windows、android、ios平台,这也是为什么开发app需要用到这个模块。

虽然kivy是跨平台的,但是想要在不同的平台使用python代码,还需要将python代码打包成对应平台的可执行程序,好在kivy项目下有个打包工具项目?buildozer,这是官方推荐的打包工具,因为相对比较简单,自动化程度高,其他项目比如:python-for-android也能起到类似的作用,这里不展开介绍。

搭建kivy开发环境

需要在pc上安装kivy开发环境,这里演示下mac与linux下的安装过程。

install kivy for mac

安装一些依赖包:

brew install pkg-config sdl2 sdl2_image sdl2_ttf sdl2_mixer gstreamer

安装cython以及kivy:

pip install cython==0.25
pip install kivy

如果安装kivy报错,则使用下面的方式安装kivy:

git clone https://github.com/kivy/kivy
python setup.py install

安装后测试:

$python
Python 2.7.10 (default, Jul 15 2017, 17:16:57)
[GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.31)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> import kivy
[INFO  ] [Logger   ] Record log in /Users/didi/.kivy/logs/kivy_18-05-08_4.txt
[INFO  ] [Kivy    ] v1.10.1.dev0, git-5f6c66e, 20180507
[INFO  ] [Python   ] v2.7.10 (default, Jul 15 2017, 17:16:57)
[GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.31)]

说明:导入kivy模块没有报错则说明安装成功。

install kivy for centos7

先安装依赖:

yum install \
  make \
  mercurial \
  automake \
  gcc \
  gcc-c++ \
  SDL_ttf-devel \
  SDL_mixer-devel \
  khrplatform-devel \
  mesa-libGLES \
  mesa-libGLES-devel \
  gstreamer-plugins-good \
  gstreamer \
  gstreamer-python \
  mtdev-devel \
  python-devel \
  python-pip \
  java-devel

安装cython以及kivy:

pip install Cython==0.20
pip install kivy

centos安装kivy参考:https://kivy.org/docs/installation/installation-linux.html#using-software-packages

说明:其他安装kivy方式可移步:https://kivy.org/#download(需要FQ)

用kivy开发第一个python app

安装完kivy就可以开发app程序了,这里演示下hello-world程序,关于kivy更复杂的用法不是本文重点,后面再成文介绍。

1) 创建一个main.py文件,写入:

#! -*- coding:utf-8 -*-
from kivy.app import App
class HelloApp(App):
  pass
if __name__ == '__main__':
  HelloApp().run()

2)创建一个hello.kv文件,写入:

Label:
  text: 'Hello, World! I am nMask'

简单说明:main.py是入口函数,定义了一个HelloApp类,该类继承kivy.app;hello.kv文件是kivy程序,相当于定义界面风格等,该文件命名规则为类名小写且去除app。

运行第一个python app

python main.py

运行结果:

利用python开发app实战的方法

安装buildozer工具

通过以上的编码,我创建了自己的第一个python app程序,该程序可以直接在mac、linux、windows平台下运行,那么如何让它在安卓或者苹果手机上运行呢?我们知道在安卓上运行,需要将其打包成apk安装程序,因此就需要用到前面提到过的buildozer工具,(buildozer工具可以打包kivy程序,支持android、ios等),buildozer的安装过程比较简单:

pip install buildozer

使用buildozer工具将kivy程序打包成apk

在python项目目录下运行:

buildozer init

运行成功将会创建一个配置文件buildozer.spec,可以通过修改配置文件更改app的名称等,然后运行:

buildozer android debug deploy run

运行以上命令将会生成跨平台的安装包,可适用安卓、ios等,如果用于安卓,则是利用python-for-android项目。

在第一次运行以上命令的时候,会自动在系统中下载安卓sdk等必要文件,如下图。(过程需要FQ,而且有很多依赖需要下载)

利用python开发app实战的方法

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python查找第k小元素代码分享
Dec 18 Python
Python if语句知识点用法总结
Jun 10 Python
Django组件cookie与session的具体使用
Jun 05 Python
django中forms组件的使用与注意
Jul 08 Python
处理python中多线程与多进程中的数据共享问题
Jul 28 Python
Python循环实现n的全排列功能
Sep 16 Python
浅谈python元素如何去重,去重后如何保持原来元素的顺序不变
Feb 28 Python
Python通过正则库爬取淘宝商品信息代码实例
Mar 02 Python
keras多显卡训练方式
Jun 10 Python
python的json包位置及用法总结
Jun 21 Python
Python如何读取、写入CSV数据
Jul 28 Python
浅谈Python列表嵌套字典转化的问题
Apr 07 Python
python设置环境变量的作用和实例
Jul 09 #Python
python版百度语音识别功能
Jul 09 #Python
利用Python实现Shp格式向GeoJSON的转换方法
Jul 09 #Python
python实现集中式的病毒扫描功能详解
Jul 09 #Python
python 图片去噪的方法示例
Jul 09 #Python
python 使用plt画图,去除图片四周的白边方法
Jul 09 #Python
浅谈Python小波分析库Pywavelets的一点使用心得
Jul 09 #Python
You might like
3种平台下安装php4经验点滴
2006/10/09 PHP
无刷新动态加载数据 滚动条加载适合评论等页面
2013/10/16 PHP
PHP实现文件上传与下载实例与总结
2016/03/13 PHP
详解php中的implements 使用
2017/06/13 PHP
网站被黑的假象--ARP欺骗之页面中加入一段js
2007/05/16 Javascript
Highslide.js是一款基于js实现的网页中图片展示插件
2020/03/30 Javascript
extjs4 treepanel动态改变行高度示例
2013/12/17 Javascript
JSON中双引号的轮回使用过程中一定要小心
2014/03/05 Javascript
你所不了解的javascript操作DOM的细节知识点(一)
2015/06/17 Javascript
jQuery+canvas实现简单的球体斜抛及颜色动态变换效果
2016/01/28 Javascript
JS Ajax请求如何防止重复提交
2016/06/13 Javascript
JavaScript简单获取系统当前时间完整示例
2016/08/02 Javascript
使用微信小程序开发前端【快速入门】
2016/12/05 Javascript
微信小程序 Canvas增强组件实例详解及源码分享
2017/01/04 Javascript
input file样式修改以及图片预览删除功能详细概括(推荐)
2017/08/17 Javascript
JS实现小球的弹性碰撞效果
2017/11/11 Javascript
JavaScript+Canvas实现彩色图片转换成黑白图片的方法分析
2018/07/31 Javascript
cdn模式下vue的基本用法详解
2018/10/07 Javascript
深入了解响应式React Native Echarts组件
2019/05/29 Javascript
Layui事件监听的实现(表单和数据表格)
2019/10/17 Javascript
利用JS如何获取form表单数据
2019/12/19 Javascript
[53:03]Optic vs TNC 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
[52:06]FNATIC vs NIP 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
wxpython中自定义事件的实现与使用方法分析
2016/07/21 Python
关于python pyqt5安装失败问题的解决方法
2017/08/08 Python
Python中注释(多行注释和单行注释)的用法实例
2019/08/28 Python
使用matplotlib的pyplot模块绘图的实现示例
2020/07/12 Python
使用CSS3设计地图上的雷达定位提示效果
2016/04/05 HTML / CSS
html5 localStorage本地存储_动力节点Java学院整理
2017/07/06 HTML / CSS
英国天然宝石首饰购买网站:Gemondo Jewellery
2018/10/23 全球购物
几道Java和数据库的面试题
2013/05/30 面试题
学校安全工作制度
2014/01/19 职场文书
中学生获奖感言
2014/02/04 职场文书
金融系应届毕业生求职信
2014/05/26 职场文书
2015年学校总务工作总结
2015/07/20 职场文书
试用1103暨1103、1101同门大比武 [ DAIWEI ]
2022/04/05 无线电