簡體   English   中英

在buildozer上使用android上的python3

[英]Using python3 on android with 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文件的要求中。 否則,應用程序崩潰時會出現“空模塊”錯誤消息。

現在,我的應用程序在手機上工作,我終於高興:-)感謝惡意嘗試幫助我解決我的問題。

我不確定buildozer是否有python3的構建選項,但python-for-android通過實驗支持它。 您可以通過從其主分支安裝buildozer並使用android_new目標( buildozer android_new debug )來使用新版本的python-for-android。 如果buildozer可以使用它的python3選項,你需要在需求中添加python3crystax (如果它在那里替換python2),手動下載CrystaX NDK,並設置buildozer的NDK路徑選項指向它。 也許有必要在要求中寫kivy==1.9.1而不僅僅是kivy

Python3版本仍在開發中,具有python2的所有功能,需要一些清理,包括修剪包含的文件和壓縮更多。 有些食譜也不適用於python3,盡管大部分都是如此。

編輯:除非您的腳本很復雜並且大量使用主要的py2 / py3差異(例如unicode處理),否則使用python2可能並不困難。 由於它們幾乎是同一種語言,因此您可能不需要“重寫”,只需進行一些小的更改。

首先(至少幾周前)kivy沒有正確使用python 3.5,而是使用3.4代替; 檢查您的導入有時可能是完整模塊導入的問題; 示例 - 不要使用import math,而是使用math import ...; 最好的是使用預先構建的buildozer圖像,您可以從kivy頁面下載; 我正在使用它並且從來沒有任何問題,除了完全導入和shebang行也應該在構建之前從代碼中刪除(有時會產生問題)

如果你從源代碼編譯buildozer,那么2018年的自述文件聲稱支持python3,而不是來自pip:

https://github.com/kivy/buildozer/

我會包含構建說明,但它們可能會在幾個月內發生變化

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM