在buildozer上使用android上的python3

时间:2016-04-10 23:47:12

标签: android python-3.x kivy buildozer

我在python 3和kivy中编写了一个小程序。现在我想使用buildozer构建一个.apk并在我的Android手机上测试应用程序。一切正常,我能够在手机上安装应用程序,但应用程序在启动时崩溃。

错误日志显示,apk的python环境是python 2.7而不是3。 因此我的问题是:是否有可能在android上使用python 3环境构建一个带有buildozer的apk?或者我是否必须在python2中重写应用程序?是否有可能强迫buildozer使用python3?

编辑:我按照inclement建议的步骤操作,并收到以下错误:

 Traceback (most recent call last):
File "/usr/lib64/python2.7/runpy.py", line 162, in _run_module_as_main
  "__main__", fname, loader, pkg_name)
File "/usr/lib64/python2.7/runpy.py", line 72, in _run_code
  exec code in run_globals
File "/home/micha/python/ZugGit/ZugAppFahrt/.buildozer/android/platform/python-for-android-master/pythonforandroid/toolchain.py", line 747, in <module>
  main()
File "/home/micha/python/ZugGit/ZugAppFahrt/.buildozer/android/platform/python-for-android-master/pythonforandroid/toolchain.py", line 744, in main
  ToolchainCL()
File "/home/micha/python/ZugGit/ZugAppFahrt/.buildozer/android/platform/python-for-android-master/pythonforandroid/toolchain.py", line 323, in __init__
  getattr(self, args.command)(unknown)
File "/home/micha/python/ZugGit/ZugAppFahrt/.buildozer/android/platform/python-for-android-master/pythonforandroid/toolchain.py", line 105, in wrapper_func
  build_dist_from_args(ctx, dist, dist_args)
File "/home/micha/python/ZugGit/ZugAppFahrt/.buildozer/android/platform/python-for-android-master/pythonforandroid/toolchain.py", line 142, in build_dist_from_args
  build_recipes(build_order, python_modules, ctx)
File "pythonforandroid/build.py", line 560, in build_recipes
  recipe.build_arch(arch)
File "pythonforandroid/recipe.py", line 910, in build_arch
  self.build_cython_components(arch)
File "pythonforandroid/recipe.py", line 919, in build_cython_components
  command = sh.Command('python{}'.format(self.ctx.python_recipe.version))
File "/usr/lib/python2.7/site-packages/sh.py", line 788, in __init__
  raise CommandNotFound(path)
sh.CommandNotFound: python3.5
# Command failed: python -m pythonforandroid.toolchain create --dist_name=zugFart --bootstrap=sdl2 --requirements=kivy==1.9.1,python3crystax --arch armeabi-v7a --copy-libs

编辑2:这似乎是一个永无止境的故事。安装了python3.5后,我遇到了这个错误:

collect2: error: ld returned 1 exit status
error: command 'arm-linux-androideabi-gcc' failed with exit status 1

随着我以前从错误发展到错误的时间,将代码更改为python2.7会更加明智,但现在我投入了大量时间,我只想最终实现它。 : - )

那么有人知道如何解决这个问题吗?

最后编辑:我最终投降并更改了我的代码以使用python 2.7。我在此过程中监督的一个好建议:如果您使用期货,则必须将其添加到buildozer文件的要求中。否则,应用程序会在&#34;空模块&#34;开始时崩溃错误信息。

既然我的应用程序在手机上正常工作,我终于开心了:-)感谢恶意尝试帮助解决我的问题。

2 个答案:

答案 0 :(得分:0)

首先(至少几周前)kivy没有正确使用python 3.5,而是使用3.4代替;检查您的导入有时可能是完整模块导入的问题;例如 - 不要使用导入数学,而是使用数学导入......;最好的是使用预先构建的buildozer图像,您可以从kivy页面下载;我使用它并且从来没有任何问题,除了完全导入和shebang行也应该在构建之前从代码中删除(有时会出问题)

答案 1 :(得分:0)

如果您从源代码而不是pip编译buildozer,则2018年的自述文件声称支持python3:

https://github.com/kivy/buildozer/blob/master/README.rst

我会提供构建说明,但可能会在几个月后更改