最近想用Python开发APP,选择kivy,记录过程

首先是源码安装,各种蛋疼的报错放弃了。cython高版本有问题。

python3 -m pip  install cython==0.23
python3 -m pip install kivy

测试OK:

Type "help", "copyright", "credits" or "license" for more information.
>>> import kivy
[WARNING] [Config      ] Older configuration version detected (0 instead of 19)
[WARNING] [Config      ] Upgrading configuration in progress.
[INFO   ] [Logger      ] Record log in /root/.kivy/logs/kivy_18-01-26_0.txt
[INFO   ] [Kivy        ] v1.10.0
[INFO   ] [Python      ] v3.6.4 (default, Dec 23 2017, 18:28:55)
[GCC 6.3.0 20170406]

安装打包器:

git clone https://github.com/kivy/buildozer.git
cd buildozer/
python3 setup.py install

一段测试代码:

main.py

from kivy.app import App  # 译者注:这里就是从kivy.app包里面导入App类
from kivy.uix.label import Label # 译者注:这里是从kivy.uix.label包中导入Label控件,这里都注意开头字母要大写 class MyApp(App):
def build(self): # 译者注:这里是实现build()方法
return Label(text='Hello world') # 译者注:在这个方法里面使用了Label控件 if __name__ == '__main__':
MyApp().run() # 译者注:这里就是运行了。

依赖:

python3 -m pip install pygame

顺便记下一个操蛋的问题:

在Pycharm中设置Python环境后发现没有kivy模块,命令行直接输入python3进入的就可以

后来发现Python3不是/usr/bin/python3.6,

在命令行里输入:python3 -c "import os; print( os.sys.executable)"

返回:/usr/local/bin/python3
于是修改Pycharm配置就好了。

成功弹出hello world的窗口。

打包:

在项目目录下:

buildozer init

于是多了一个文件 buildozer.spec

生成apk,记得用代理翻墙

proxychains buildozer -v  android debug

他妈的又卡住(大概一星期前因为同样的原因,放弃了),代理也不行:

# Ensure build layout
# Check configuration tokens
# Read available permissions from api-versions.xml
# Preparing build
# Check requirements for android
# Run 'dpkg --version'
# Cwd None
b"Debian 'dpkg' package management program version 1.18.24 (amd64).\nThis is free software; see the GNU General Public License version 2 or\nlater for copying conditions. There is NO warranty.\n"# Search for Git (git)
#  -> found at /usr/bin/git
# Search for Cython (cython)
#  -> found at /usr/local/bin/cython
# Search for Java compiler (javac)
#  -> found at /opt/Java/jdk1.8.0_121/bin/javac
# Search for Java keytool (keytool)
#  -> found at /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/keytool
# Install platform
# Run 'pip install -q --user "appdirs" "colorama>=0.3.3" "sh>=1.10,<1.12.5" "jinja2" "six"'
# Cwd None
# Apache ANT found at /root/.buildozer/android/platform/apache-ant-1.9.4
# Android SDK found at /root/.buildozer/android/platform/android-sdk-20
# Android NDK found at /root/.buildozer/android/platform/android-ndk-r9c
# Run '/root/.buildozer/android/platform/android-sdk-20/tools/android list sdk -u -e'
# Cwd /root/.buildozer/android/platform

没办法,换个姿势,继续。

用python-for-android 构建APK

参考文档:https://python-for-android.readthedocs.io/en/latest/quickstart/

貌似python-for-android在python3下有问题

重新在python2 下安装kivy环境

apt-get install python-dev
python -m pip install cython==0.23
python -m pip install kivy
python -m pip install pygame

重新编译时:

p4a clean_builds && p4a clean_dists

完整过程:

1、cd 到main.py同级目录

2、设置环境变量

export ANDROIDSDK=/root/Android/android-sdk-linux
export ANDROIDNDK=/root/.buildozer/android/platform/android-ndk-r9c
export ANDROIDAPI=19
export ANDROIDNDKVER=r9c

说明:之前用 buildozer 的时候自动下载了NDK,SDK,但是那个SDK有问题,在tools下执行./android弹出android-manger,但是获取不到xml(这也是buildozer卡住的原因),安装不了platforms,build-tools,即使从其他SDK copy过去的也不行,所以还是指定到新的SDK。NDK没问题,可以用。

如果执行了第4步后改变了以上配置希望重新编译,必须

p4a clean_builds && p4a clean_dists

谨慎使用:p4a clean_all,这个是清空之前所有的缓存,包括那些下载的文件,执行后需要重新下载,一般p4a clean_builds && p4a clean_dists就好了。

,3、安装ant

apt-get install ant

4、执行

p4a apk --private . --package=org.example.myapp --name "My application" --version 0.1 --bootstrap=sdl2 --requirements=python2,kivy

--private 后面指定main.py的所在目录

最后是漫长的等待。。。

可能会报错

File "/root/.local/share/python-for-android/dists/unnamed_dist_5/build.py", line 248, in make_package
    make_tar('src/main/assets/private.mp3', tar_dirs, args.ignore_path)

这他妈是BUG。

需要新建/root/.local/share/python-for-android/dists/unnamed_dist_5/src/main/assets/private.mp3文件(每次的路径不一样)

记得有个mp3,还有个png文件,随便弄两个文件保证读得到就可。

终于成功:

[INFO]:    Selecting java build tool:
[INFO]:    Detected highest available build tools version to be 27.0.1
[INFO]:        Building with ant, as no gradle executable detected
[INFO]:    -> running ant debug
[INFO]:    <- directory context /root/PycharmProjects/firstApp                                                                                       
[INFO]:    # Copying APK to current directory
[INFO]:    # Found APK file: /root/.local/share/python-for-android/dists/unnamed_dist_1/bin/Myapplication-0.1-debug.apk
[INFO]:    -> running cp /root/.local/share/python-for-android/dists/unnamed_dist_1/bin/Myapplication-0.1-debug.apk ./

最后,想着既然找到buildozer的问题所在,为什么不再试试呢,就是这么爱折腾。

于是重新执行上面的操作,buildozer.spec中替换为新的SDK路径

然后默默看着终端输出,结果发现

他妈的跟python-for-android一样,又一次下载那一堆安装包到自己的目录下。

更操的是下了一堆pom,jar,编译还特慢。。。

好在最终编译成功。

所以还是建议使用python-for-android打包。

题外话:

当一件事没有完成的时候,心里总是惦记着,总想努力去完成。有一天终于达成所愿,才明白原来我追求的不是结果,是过程。

这大概就是“有得必有失”吧。

Kivy折腾笔记的更多相关文章

  1. MacBook外置显卡eGPU折腾笔记

    MacBook外置显卡eGPU折腾笔记 硬件选购 当今市场上个人电脑的独立显卡,基本上能选的只有NVIDIA和AMD了,如果你想买外置显卡来打游戏的话,NVIDIA和AMD的都可以,但如果是像我一样准 ...

  2. ASP.NET Core 折腾笔记二:自己写个完整的Cache缓存类来支持.NET Core

    背景: 1:.NET Core 已经没System.Web,也木有了HttpRuntime.Cache,因此,该空间下Cache也木有了. 2:.NET Core 有新的Memory Cache提供, ...

  3. ASP.NET Core 折腾笔记一

    前言: 在ASP.NET Core 1.0时,曾折腾过一次,后因发现不了System.Data而停止. 更因VS2015提示过期Delete掉VS了,其实主要还是笔记本的硬盘空间吃紧. 快双十一了,本 ...

  4. Ubuntu Gnome 14.04.2 lts 折腾笔记

    unity感觉不爽,于是来折腾gnome3 = = 首先去官网下载ubuntu gnome 14.04.2 lts的包(种子:http://cdimage.ubuntu.com/ubuntu-gnom ...

  5. systemtap折腾笔记

    在这货上花费了不少时间,都是受了@agentzh 大神的蛊惑:) 他写的nginx-systemtap-toolkit监测的数据很有价值,对于系统优化实在是利器. 最早折腾systemtap,是在Ub ...

  6. 【转】Kali Linux 新手折腾笔记

    原作者:http://defcon.cn/1618.html 最近在折腾Kali Linux 顺便做一简单整理,至于安装就不再多扯了,估计会出现的问题上一篇文章<VMware虚拟机安装Kali ...

  7. Kali Linux 新手折腾笔记

    http://defcon.cn/1618.html 2014年09月29日 渗透测试 暂无评论 阅读 55,052 次   最近在折腾Kali Linux 顺便做一简单整理,至于安装就不再多扯了,估 ...

  8. 黑苹果+win10双系统折腾笔记

    寒假趁机在家折腾一下黑苹果 笔记本配置:神船K610D I7 4600 ,其他配置思路一样,驱动要自己找 镜像和工具:OS X Yosemite 10.10.3 镜像 WIN10 TLSB 2016 ...

  9. Kali Linux 1.0 新手折腾笔记(2013.3.21更新)

    rootoorotor昨天折腾了 Kali Linux 1.0,把大概的配置过程记录下来,希望对想接触或使用Kali Linux的同学有所帮助. 请注意: 1.本文为面向新手的教程,没技术含量,没事瞎 ...

随机推荐

  1. day12-(jsp&el&jstl)

    回顾: jsp: cookie: 浏览器端会话技术 由服务器产生,生成key=value形式,通过响应头(set-cookie)返回给浏览器,保存在浏览器端 下次访问的时候根据一定的规则携带cooki ...

  2. flask form表单验证

    新建forms.py文件 #!/usr/bin/env python #-*-coding:utf--*- #导入模块 from flask_wtf import FlaskForm #FlaskFo ...

  3. docker swarm(当前官网示例)

    介绍 Docker Swarm 是 Docker 公司推出的官方容器集群平台,基于 Go 语言实现 作为容器集群管理器,Swarm 最大的优势之一就是 100% 支持标准的 Docker API.各种 ...

  4. FastDFS 分布式文件系统部署实战及基本使用

    FastDFS 分布式文件系统部署实战及基本使用 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. FastDFS是一个开源的高性能分布式文件系统.它的主要功能包括:文件存储,文件同步 ...

  5. 跳到IE9的一个坑里了(枚举 JavaScript 属性)

    有一段Json如下 [{"SaleName_ID":"0","SaleName":"","28":& ...

  6. nginx做rails项目web服务器缓存配置方法

    nginx作为Web服务器.或反向代理服务器都可以使用缓存 一.作为Web服务器 nginx可以通过 expires 指令来设置响应头的过期时间,实现浏览器缓存(Browser Caching),即浏 ...

  7. 理解self与this

    刚开始学习Python的类写法的时候觉得很是麻烦,为什么定义时需要而调用时又不需要,为什么不能内部简化从而减少我们敲击键盘的次数?你看完这篇文章后就会明白所有的疑问. self代表类的实例,而非类. ...

  8. hibernate validator【原】

    hibernate validator 功能 在开发中经常做一些字段校验的功能,比如非空,长度限制,邮箱验证等等,为了省掉这种冗长繁琐的操作,hibernate validator提供了一套精简的注释 ...

  9. linux kill 命令【待完善】【转】

    kill 命令用来处理进程, 在linux中即可使用kill -9 pid 杀死进程 , 也可使用kill -KILL pid 等价的命令来执行. HUP 1 终端断线 INT 2 中断(同 Ctrl ...

  10. 简:Spring中Bean的生命周期及代码示例

    (重要:spring bean的生命周期. spring的bean周期,装配.看过spring 源码吗?(把容器启动过程说了一遍,xml解析,bean装载,bean缓存等)) 完整的生命周期概述(牢记 ...