5

Python 3 と kivy で小さなプログラムを作成しました。ここで、buildozer を使用して .apk をビルドし、Android フォンでアプリをテストしたいと考えています。すべてが機能し、電話にアプリをインストールできましたが、起動時にアプリがクラッシュしました。

エラー ログは、apk の python 環境が 3 ではなく python 2.7 であったことを明らかにしました。したがって、私の質問は、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 ファイルの要件に追加することが必須です。そうしないと、起動時にアプリがクラッシュし、「空のモジュール」エラー メッセージが表示されます。

私のアプリが電話で動作するようになったので、私はついに満足しています:-) 私の問題を解決しようとしている inclement に感謝します。

4

3 に答える 3

3

buildozer に python3 用のビルド オプションがまだあるかどうかはわかりませんが、python-for-android は実験的にサポートしています。master ブランチから 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 で動作しないレシピもあります。

編集: スクリプトが複雑で、Unicode 処理などの py2/py3 の主要な違いを大幅に使用しない限り、代わりに python2 を使用することはおそらく難しくありません。それらはほとんど同じ言語であるため、おそらく「書き直し」は必要なく、いくつかの小さな変更のみが必要です。

于 2016-04-11T09:39:11.080 に答える
0

最初(少なくとも数週間前)、kivy は python 3.5 で正しく動作しませんでした。代わりに 3.4 を使用してください。インポートも確認してください。完全なモジュールのインポートに問題がある場合があります。例 - import math を使用しないで、代わりに from math import ...; を使用します。最良の方法は、kivy ページからダウンロードできるビルド済みの buildozer イメージを使用することです。私はそれを使用していますが、完全なインポートとシバン行もビルド前にコードから削除する必要があることを除いて、問題はありませんでした(時々問題が発生します)

于 2016-04-12T12:17:45.743 に答える