kivy踩坑记

该教程已作废,最新最权威教程请移步:

https://blog.csdn.net/ghking1/article/details/79644694

背景及目标

kivy是一套跨平台(windows,linux,osx,android,ios)的GUI开发解决方案。我这次主要配置了linux,android,osx,ios四端,其中linux,osx是开发调试端,android和ios是最终要部署到的地方。

环境配置

切记!这里python一定要用2.7的,绝对不要用3,否则会出很多无法解决的问题。linux用的是ubuntu16.04,osx用的是10.11.6,xcode7和8我都有用。

重要提示!在安装的过程中,会自动从国外网站下载很多东西,由于国内网络原因,很多东西可能需要翻墙才能访问到。这里提醒下大家,当出现卡壳的时候,考虑下是否是这个原因造成的。另外,这里因为要将终端中的所有进程都代理出去,所以最好直接将vmware虚拟机整个网络都设置成代码模式,可以使用proxycap,请参考下文:
https://wenku.baidu.com/view/f40875637cd184254b353589.html

linux,osx安装可以参考:

https://github.com/cycleuser/Kivy-CN/blob/master/01-Kivy-Installation.md
注意这一步安装完以后就可以运行自带的一些demo了,但这里安装的只是运行环境,也就意味着你的代码目前只能在电脑上运行。

android打包环境安装:

这个可以参考:
https://github.com/cycleuser/Kivy-CN/blob/master/15-Kivy-Pack-Android.md
https://buildozer.readthedocs.io/en/latest/installation.html#targeting-android

1.这里我遇到了一个无关紧要的错误,大家如果遇到了不要沮丧:
这个错误说找不到最终的apk文件,我大概看了下源码,应该是他路径写错了,真正的apk在.buildozer/android/platform/build/dists/myapp/bin文件夹里,所以大家忽略这个错误就好了。

IOError: [Errno 2] No such file or directory: u'/home/osboxes/Desktop/kivy/.buildozer/android/platform/build/dists/myapp/build/outputs/apk/myapp-debug.apk'

2.如果你实在无法把这个打包环境配置起来,那就将就着用一下别人已经配好环境的虚拟机吧,不过这个上面的版本肯定有点老了:
https://github.com/cycleuser/Kivy-CN/blob/master/21-Kivy-VMS.md

ios打包环境安装:

https://github.com/cycleuser/Kivy-CN/blob/master/18-Kivy-Pack-iOS.md
1.因为编译时要下载很多依赖包,但国内的网确实不行,于是你必须得在每次卡住的时候把对应的包手动下下来,并放到~/kivy-ios/.cache目录下,然后一次次的试,直到完成。
2.环境编译时一定要用xcode7,我这里拥有xcode8编译时会报关于cython的错误。但是实际打包的时候可以使用高一些的版本,这要对应一些新的设备兼容性好一点,功能也全面一点。关于多版本xcode安装可以自己百度。

应用开发

一般来说如果没有涉及到平台特殊独有特性的话,你在电脑上能跑到程序,在手机上也能跑。但我因为要接入微信分享功能,所以就又要继续踩坑了。在这些平台上踩坑,你就不得不对平台底层东西有一些简单了解了:

android的坑

http://www.jianshu.com/p/e1a3f6844079
http://blog.csdn.net/Reed_CSDN/article/details/50987794
http://www.jb51.net/article/65542.htm
https://open.weixin.qq.com/

1.微信分享这块有大量的坑,首先要确保在微信开放平台上正确的申请到了应用的APP_ID,然后包名和签名都要和申请时一致,否则一切的尝试都是徒劳。

2.要想用python来调用weixinSDK的分享功能就必须得用pyjnius,他是一个python调用java的工具包。但是微信分享功能比较复杂,所以如果直接完全用python来调用,会需要大量的跨代码交互,这过程中难免会遇到很多问题,有些甚至无法实现。
所以我不得用java把weixinSDK又这对我需要的功能封装了一次,这样只需要用python调用一次我封装好的接口便可以了。

3.微信在分享完以后,会返回返回一个状态码,但这不是通过分享函数执行后直接返回的,而是通过intent向你预先定义的activity发送通知。这就需要了解一点安卓知识了,具体细节可以参考:
https://github.com/kivy/kivy/wiki/Deep-Linking-with-iOS-and-Android

4.下面的是别人集成AdBuddiz-SDK的方法,有很大的参考意义:
https://github.com/kivy/kivy/wiki/AdBuddiz-Android-advertisements-integration-for-Kivy-apps

ios的坑

http://www.jb51.net/article/102549.htm
http://www.jianshu.com/p/c9b688fdb961
https://open.weixin.qq.com/

1.因为weixinSDK必须要实现WXApiDelegate接口,而且要在分享前注册APP_ID。这一切都最佳解决办法就是在ios的uiapplicationdelegate中实现。
但是,kivy的这个代理是在SDL2库中就实现了的,于是你得修改SDL2的源码,直接修改,然后点运行是不行的。因为SDL2是在安装环境的时候被编译成静态链接库了,这里改动它的文件是不会触发它的重新编译的。
于是你肯定想到要在~/kivy-ios/build/sdl2/every-platform/slime…/src/video/uikit/SDL_uikitappdelegate.m中去修改。
但是这又没有用,因为你重新编译得执行
./toolchain.py build sdl2
但是执行上面这个又必须得先执行
./toolchain.py cliean sdl2
而这又会覆盖你所有修改,然后重新编译的还是原版的
于是我修改压缩包里的代码,还记得上面~/kivy-ios/.cache中你下的安装包吧,每次build的时候都会把这里对应的包解压出来,然后编译,但是clean又不会清空这里的包,于是你先把包解压出来,然后修改好,再打包放回去,以后每次解压出来的就是你的新代码了。具体这里要修改的就是sdl2-iOS-improvements.tar.gz这个包,文件路径是包里的slime…/src/video/uikit/SDL_uikitappdelegate.m

2.如果你把微信分享的调用配好了,接下来就要配置参数接收了,ios的app之间是通过schemeURL进行交互的,可以参考:
https://github.com/kivy/kivy/wiki/Deep-Linking-with-iOS-and-Android

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值