社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

用 Python 写一个安卓 APP

Python之禅 • 4 年前 • 547 次点击  

作者:youerning
http://youerning.blog.51cto.com/10513771/1733534

前言

用 Python 写安卓 APP 肯定不是最好的选择,目前用Java和 kotlin 写的居多,但是肯定也是一个很偷懒的选择,而且实在不想学习 Java,再者,就编程而言已经会的就 Python与Golang(注:Python,Golang水平都一般),那么久Google了一下Python 写安卓的 APP 的可能性,还真行。

既然要写个APP,那么总得要有个想法吧。其实想做两个APP来着,一个是自己写着好玩的,一个是关于运维的。关于运维的APP,设计应该如下

可能长这样

  然后设计应该是这样。

如果觉得可行的话,评论留言一下你觉得应该写进这个APP的运维常用命令吧^_^,笔者暂时想到的是top,free -m,df –h,uptime,iftop,iotop,如果有什么好的想法就狠狠的砸过来吧,笔者到时应该也会把这个写成一个项目放到github上,大家一起用嘛,开源才是王道,哈哈。

        

开发安卓APP

我们使用kivy开发安卓APP,Kivy是一套专门用于跨平台快速应用开发的开源框架,使用Python和Cython编写,对于多点触控有着非常良好的支持,不仅能让开发者快速完成简洁的交互原型设计,还支持代码重用和部署,绝对是一款颇让人惊艳的NUI框架。

因为跨平台的,所以只写一遍代码,就可以同时生成安卓及IOS的APP,很酷吧。


本文会带大家写一个Hello world并瞧一瞧 Python 版的2048的代码


kivy安装


环境说明:笔者在用的是Python2.7.10

这里仅介绍windows平台安装

所有平台参考: https://kivy.org/#download

更新pip,setuptools


python -m pip install --upgrade pip wheel setuptools


然后是安装所需要的依赖


python -m pip install docutils pygmentspypiwin32 kivy.deps.sdl2 kivy.deps.glew
kivy.deps.gstreamer --extra-index-url https://kivy.org/downloads/packages/simple/


值得注意的是,上面的安卓需要访问Google,所以请自备梯子,而且kivy.deps.gstreamer这个包比较(95MB)可以单独本地安装,http://pan.baidu.com/s/1o7mlxNk


然后就是安装kivy了


python -m pip install kivy


至此,安装就已经完毕了,值得注意的是64位系统没有开启虚拟化支持,在导入kivy的时候会报错,如果是64位系统就设置一下机器的BIOS,开启虚拟化支持吧。

注:这里只是kivy的运行环境,这样我就能直接在windows机器上直接调试了,怎么将代码编译成APK文件我们会在后面讲到。


如果kivy在python中应该就能导入了。


按照世界惯例,我们”hello”一下吧。

新建一个.py文件


from kivy.app import Appfrom kivy.uix.button importButton
class TestApp(App):
   def build(self):
       return Button(text='Hello,kivy')
TestApp().run()

 

运行

然后会弹出一个框,大概如下,点击”hello,kivy”会变颜色

点击窗口并按“F1”会这个窗口的一些属性

然后我们回过头看一看代码。

##导入App,然后让TestApp这个类继承
from kivy.app import App##导入一个Button,运维有这个button,当你点击的时候才会有所反应
from kivy.uix.button
importButton
###定义类,名字必须是xxxAppclass TestApp(App):
   ###build一个Button
   def build(self):
       ###返回一个Button,文字内容是“Hello,kivy”
       return Button(text='Hello,kivy')
##运行,因为继承了App,所以才有的run这个方法TestApp().run()


上面就是我们的Hello了

在windows上运行当然没有什么太大的意义,怎么在安卓手机上运行才是我们想要的,

 这时我们需要一个编译环境。

官方说明的环境,如下:

You’ll need:

  • A     linux computer or a virtual machine

  • Java

  • Python     2.7 (not 2.6.)

  • Jinja2     (python module)

  • Apache     ant

  • Android     SDK

虽然官方提供了一个似乎还不错的虚拟机镜像,但是还是有很多内容需要翻出去,所以笔者在这里提供相对而言更加完善的镜像

下载地址:http://pan.baidu.com/s/1geyAY7x

注:virtualbox,vmware需自行下载

root密码:kivy

默认使用账户kivy,密码:kivy123

当然你也可以下载官方镜像,因为第一次编译需要去国外下一大堆东西,所以请自行去下载。


Virtual Machine


A Virtual Machine with Android SDK and NDK and all otherpre-requisites pre installed to ease apk generation:

  • Kivy Buildozer VM

  • Or select the Torrent

 

在笔者提供的镜像里,桌面上有一个dev_and,只要将上面写的代码,放入这个文件夹即可(当然也可以在其他目录,后面会讲到 )

cd Desktop/dev_and/


初始化会在当前目录生成一个buildozer.spec文件 用于配置生成的apk相关信息

buildozer init


###修改buildozer.spec文件

vi buildozer.spec

至少修改下面三项

# (str) Title of your applicationtitle = helloworld
# (str) Package namepackage.name = helloapp
# (str) Package domain (needed for android/ios packaging)package.domain = youer.com


然后注释

# (str) Application versioning (method 1)#version.regex = __version__ = ['"](.*)['"]#version.filename = %(source.dir)s/main.py


下面这行改为非注释
version = 1.2.0


最后我们生成我们需要的apk文件

buildozer -v android debug

buildozer.spec更详细的相关参数配置参考:

http://buildozer.readthedocs.org/en/latest/specifications.html

buildozer命令会在当前文件夹创建一个bin,该文件夹里面有我们想要的apk文件

helloapp-1.2.0-debug.apk


helloapp-1.2.0-debug.apk

 安装以后是这样:


  

话说在编译的时候可能出现空间不足的情况,根据虚拟机的不同(vmware或virtualbox)自行扩容吧。


最后我们来瞧瞧简易版Python开发的2048这个游戏的源代码。

代码:

https://github.com/mvasilkov/kb/tree/master/6_2048

先看效果图:


 试玩了一下,还是蛮流畅的,有兴趣的可以下载玩一下。

 下载地址:http://pan.baidu.com/s/1eQZACDW

 这个游戏代码虽然不长,但是还是蛮占篇幅的,所以简要的说明一下流程。



主要由三部分组成,一是素材,图片音频之类的文件,二是Python代码,三是kv文件,这个kv文件有点像 html 中的css。

Python代码的文件名一般命名为 main.py

然后一定有一个叫做 XXXApp 的类,并继承 App。

比如该类叫做GameApp,那么该目录下的kv文件则必须为Game,如上图所示,如果不是,那么kv文件中的一些设定就不会生效。

比如设定一个标签




    
Label:
       id: time
       text: 'xxxx'
       font_size: 60


id为time,text文本内容为'xxxx',然后字体为60

好吧,点到为止吧,不过似乎什么都没点到。

推荐阅读:

微软官方上线了Python教程,7个章节就把Python说通了!

谁偷偷删了你的微信?别慌!Python 帮你都揪出来了


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/37516
 
547 次点击