加入收藏 | 设为首页 | 会员中心 | 我要投稿 拼字网 - 核心网 (https://www.hexinwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

mac系统中kivy打包为apk安装包流程

发布时间:2022-06-16 20:43:22 所属栏目:教程 来源:互联网
导读:Kivy是一套专门用于跨平台快速应用开发的开源框架,使用Python和Cython编写,对于多点触控有着非常良好的支持了,下文就介绍一个在mac系统中kivy打包为apk安装包过程,希望能帮助到各位同学哦. 没有网上说的那么麻烦,也不用去下载他的那个 ubuntu 的镜像,就是坑
  Kivy是一套专门用于跨平台快速应用开发的开源框架,使用Python和Cython编写,对于多点触控有着非常良好的支持了,下文就介绍一个在mac系统中kivy打包为apk安装包过程,希望能帮助到各位同学哦.
 
  没有网上说的那么麻烦,也不用去下载他的那个 ubuntu 的镜像,就是坑有点多,另外要下载的东西多.整整一天,估计有一半的时间浪费在等待下载上了,没有边弄边写, 所有有些地方就囫囵说一下了,如果有读者照着做过不去的,留言给我吧.
 
  准备工作:我的环境是 mac, 安装了 brew 以及 python 的 pip,安装好 kivy. mac 下有 dmg,直接装了就可以了,稳定的翻墙工具是必须的,大量的依赖软件都是要翻墙才能安装,我用的 shadownsocks,基于自己的 vps.

  步骤:官方有文档,但是说的不详细:http://kivy.org/docs/guide/packaging-android.html,重点介绍下 Buildozer 这个神器,省的很多功夫完全靠这个了.
 
  一开始我还傻乎乎的自己去下载 android sdk ndk..
 
  啥都不用管,首先安装 Buildozer,代码如下:
 
  git clone https://github.com/kivy/buildozer.git
 
  cd buildozer
 
  sudo python setup.py install
 
  随意建立一个文件夹,名字就叫 test 吧.初始化为 buildozer 项目,代码如下:
 
  mkdir test
 
  cd test
 
  buildozer init
 
  里面会生成配置文件buildozer.spec,暂时什么都不用管,也不用改,写个 hello world,代码如下:
 
  #!/usr/bin/env python
 
  # -*- coding: utf-8 -*-
 
  import kivy
 
  from kivy.app import App
 
  from kivy.uix.label import Label
 
  __version__ = '0.1'
 
  class MyApp(App):
 
      def build(self):
 
          return Label(text='Hello world')
 
  //phpfensi.com
 
  if __name__ == '__main__':
 
      MyApp().run()
 
  注意 __version__ = '0.1'必须有,文件名保存为 main.py(和配置文件一致)
 
  kivy main.py
 
  看到可以正常运行就 ok 了.开始编译:buildozer -v android debug
 
  第一个坑(cython版本问题),编译到后面,反正报了一个错误,类似是:
 
  error Do not use this file, it is the result of a failed Cython compilation
 
  各种误解,日志也没有更多信息..出错位置似乎是在 cython 编译时候.于是我把 cython 从当时的 Cython version 0.21 降级到了 Cython version 0.20,于是就过去了..
 
  sudo pip install cython=0.20 --upgrade
 
  命令对不对不太记得了,反正是这个意思,我完全是有神灵保佑才能过去的啊...哭!!!

  第二个坑(license 乱码),执行上面的编译,就会开始下载各种依赖了. android sdk ndk 什么都,你都不用管,然后突然的报了一个 python 的编码错误,停下来了.
 
  貌似是 unicodeerro 什么的,根据堆栈信息,我进到 expect.py,把报错那段的内容 print 出来了,结果竟然是 sdk 或者是 ndk 的 license 的声明,我擦,里面没中文啊,各种地方我都没用中文,咋个?
 
  expect.py 也做了 utf-8 的编码解码.
 
  最后仔细看了 license,竟然中间有一段不知道是什么鬼字符, print 出来是????
 
  google 程序员是不是头晕了,敲错了.
 
  我在各个地方都加了 reload(sys) utf-8 那个..木有用,几乎要绝望了,突然想到,那说那个字符用 utf-8 根本没法 decode 和 encode,expect.py 自行主张搞了一把,本来是好意,结果弄巧成拙了.
 
  直接修改 expect.py,把报错地方的 decode encode 全部去掉,让其直接操作原始字符串..然后就过去了....

  第三个坑(编译工具不齐全),眼瞅着是要开始打包了,结果报了似乎是这样一个错误,代码如下:
 
  Traceback (most recent call last):
 
    File "build.py", line 412, in <module>
 
      make_package(args)
 
    File "build.py", line 336, in make_package
 
      subprocess.check_call([ANT, arg])
 
    File "/usr/lib64/python2.7/subprocess.py", line 542, in check_call
 
      raise CalledProcessError(retcode, cmd)
 
  subprocess.CalledProcessError: Command '['ant', 'debug']' returned non-zero exit status 1  //phpfensi.com
 
  让人欲哭无泪了,错误信息基本没有.这个错误信息上面是在执行这个,代码如下:
 
  # Run "/usr/bin/python build.py --name 'My Application' --version 0.1 --package org.test.myapp --private /Users/bigzhu/android/.buildozer/android/app --sdk 14 --minsdk 8 --permiss
 
  ion BLUETOOTH --orientation landscape debug"
 
  你个蛋蛋的,执行失败敢把信息再清晰一点么?于是我想手工执行了看看错误,终于在项目文件夹下的:
 
  .buildozer/android/platform/python-for-android/dist
 
  找到了 build.py,一执行,说是android sdk platform-tools不存在...我擦!!!找到buildozer安装了 sdk 在这里:~/.buildozer/android/platform/android-sdk-21/tools/
 
  运行 android ,把 platform-tools 装上去(我之前还装了一个 sdk. 还加了环境变量,导致我装错地方,又重新装了一次)
 
  完成:期间还有其他的坑.这三个比较大,也比较坑人,小的我 google 下就过去了.所以闯关的勇士,有问题记得给我留言,因为细节我记不得了.原创是 bigzhu: http://www.phpfensi.com 哦.
 
  插上手机,执行:buildozer android debug deploy run,在手机上看到 hello world 的时候,我几乎都要热泪盈眶了.
 

(编辑:拼字网 - 核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!