mpython安卓_在Android上使用python3与buildozer

1586010002-jmsa.png

I have written a little program in python 3 and kivy. Now I want to build an .apk using buildozer and test the app on my android phone. Everything worked and I was able to install the app on the phone but the app crashed on startup.

The error log revealed, that the python enviroment of the apk was python 2.7 instead of 3.

My question is therefore: Is it possible to build an apk with buildozer using a python 3 enviroment on android? Or do I have to rewrite the app in python2? Is there perhaps a possible hack to force buildozer to use python3?

Edit: I followed the steps suggested by inclement and got the following error:

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

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

Edit 2: This seems to be a never ending story. With python3.5 installed I ran into this error:

collect2: error: ld returned 1 exit status

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

With the time I used to advance from error to error it would be much smarter to simply change the code to python2.7 but now that I have so much time invested I just want to finally make it. :-)

So does somebody have an idea how to solve this issue?

Last Edit: I finally surrendered and changed my code to work with python 2.7. A good advice I have overseen during this process: If you using futures it is mandatory to add it to the requirements of the buildozer file. Otherwise the app crash on start with the "empty module" error message.

Now that my app works on the phone I'm finally happy :-) Thanks to inclement trying to help me with my problem.

解决方案

I'm not sure if buildozer has a build option for python3 yet, but python-for-android supports it experimentally. You can use the new version of python-for-android by installing buildozer from its master branch and using the android_new target (buildozer android_new debug). If buildozer will work with its python3 option, you'd need to add python3crystax in the requirements (replace python2 if it's there), download the CrystaX NDK manually, and set buildozer's NDK path option to point to it. It might also be necessary to write kivy==1.9.1 in the requirements rather than just kivy.

Python3 builds are still in development to have all the features of the python2 ones, and need some clearing up including trimming the included files and compressing more. Some recipes also will no yet work with python3, though most do.

Edit: Unless your script is complicated and makes significant use of the major py2/py3 differences such as unicode handling, it probably wouldn't be difficult to use python2 instead. Since they're almost the same language, you probably don't need a 'rewrite', just a few small changes.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值