Ich habe ein kleines Programm in Python 3 und Kivy geschrieben. Jetzt möchte ich eine .apk mit Buildozer bauen und die App auf meinem Android-Handy testen. Alles funktionierte und ich konnte die App auf dem Telefon installieren, aber die App stürzte beim Start ab.Verwendung von Python3 auf Android mit Buildozer
Das Fehlerprotokoll ergab, dass die Python-Umgebung der Apk Python 2,7 statt 3 war. Meine Frage ist daher: Ist es möglich, eine APK mit Buildozer mit einer Python 3-Umgebung auf Android zu bauen? Oder muss ich die App in python2 neu schreiben? Gibt es vielleicht einen Hack, der buildozer dazu zwingt, python3 zu benutzen?
Edit: Ich folgte den von rauem vorgeschlagenen Schritte und bekam folgende Fehlermeldung:
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
Edit 2: Dies ist eine unendliche Geschichte zu sein scheint. Mit installiert python3.5 lief ich in diesen Fehler:
collect2: error: ld returned 1 exit status
error: command 'arm-linux-androideabi-gcc' failed with exit status 1
Mit der Zeit habe ich von Fehler voran verwendet, um zu Fehler wäre es viel klüger sein, einfach den Code zu python2.7 zu ändern, aber jetzt, dass ich so viel habe investierte Zeit möchte ich es endlich schaffen. :-)
Hat also jemand eine Idee, wie man dieses Problem lösen kann?
Letzte Änderung: Ich habe schließlich aufgegeben und meinen Code geändert, um mit Python 2.7 zu arbeiten. Ein guter Rat, den ich während dieses Prozesses überwachte: Wenn Sie Futures verwenden, ist es obligatorisch, es den Anforderungen der buildozer Datei hinzuzufügen. Ansonsten stürzt die App beim Start mit der Fehlermeldung "Leeres Modul" ab.
Jetzt, wo meine App am Telefon funktioniert, bin ich endlich glücklich :-) Danke an ruchloses Versuchen, mir bei meinem Problem zu helfen.
Ich hatte das gleiche Problem, wurde mit dem Unterschied in Division Betreiber erwischt, also habe ich gerade hinzugefügt: aus \ _ \ _ future \ _ \ _ import division, und stellte sicher, dass meine Klassenvererbung sowohl mit 2.7 als auch mit 3. arbeitete. Aber ich würde gerne wissen, ob wir in Python 3 mit Kivy arbeiten können und erwarten mach es zu einer App ... –