【问题标题】:Problem to convert a kivy file to a .apk file in Google Colab在 Google Colab 中将 kivy 文件转换为 .apk 文件的问题
【发布时间】:2022-12-10 22:21:21
【问题描述】:

我制作了一个 kivy 应用程序,我想将其转换为 .apk 文件以便能够在我的 android 手机中使用它。我知道互联网上有很多教程解释了如何在 Google Colab 中执行此操作。我使用了您可以在此处找到的文章中给出的说明:https://towardsdatascience.com/3-ways-to-convert-python-app-into-apk-77f4c9cd55af

我使用的kivy文件很简单,我做它只是为了尝试将它转换为.apk文件的方法:

import kivy
from kivy.app import App
from kivy.uix.label import Label

class TestApp(App):
    def build(self):
        L = Label(text = "Hi !")
        return L

if __name__ == '__main__':
    TestApp().run()"

但是,我无法将此脚本转换为 .apk ...

当我执行“!buildozer init”命令时,在 Colab 的当前目录中创建了一个名为“Buildozer.spec”的脚本,我在其中上传了我的 kivy 脚本。我只修改了我的应用程序的标题并指定了我想使用的 kivy 版本,即这些行:

[app]

# (str) Title of your application
title = My App1

# (str) Package name
package.name = MyApp1

# (list) Application requirements
# comma separated e.g. requirements = sqlite3,kivy
requirements = python3,kivy==1.9.1

然后我执行“!buildozer -v android debug”,等待几分钟后,我收到以下错误:

    Exception in thread background thread for pid 38813:
Traceback (most recent call last):
  File "/usr/lib/python3.7/threading.py", line 926, in _bootstrap_inner
    self.run()
  File "/usr/lib/python3.7/threading.py", line 870, in run
    self._target(*self._args, **self._kwargs)
  File "/usr/local/lib/python3.7/dist-packages/sh.py", line 1683, in wrap
    fn(*rgs, **kwargs)
  File "/usr/local/lib/python3.7/dist-packages/sh.py", line 2662, in background_thread
    handle_exit_code(exit_code)
  File "/usr/local/lib/python3.7/dist-packages/sh.py", line 2349, in fn
    return self.command.handle_command_exit_code(exit_code)
  File "/usr/local/lib/python3.7/dist-packages/sh.py", line 905, in handle_command_exit_code
    raise exc
sh.ErrorReturnCode_1: 

  RAN: /usr/bin/python3 '-cimport sys; from Cython.Compiler.Main import setuptools_main; sys.exit(setuptools_main());' ./kivy/graphics/opengl.pyx

  STDOUT:
/usr/local/lib/python3.7/dist-packages/Cython/Compiler/Main.py:369: FutureWarning: Cython directive 'language_level' not set, using 2 for now (Py2). This will change in a later release! File: /content/.buildozer/android/platform/build-arm64-v8a_armeabi-v7a/build/other_builds/kivy/armeabi-v7a__ndk_target_21/kivy/kivy/graphics/opengl.pyx
  tree = Parsing.p_module(s, pxd, full_module_name)

Error compiling Cython file:
------------------------------------------------------------
...
def glCheckFramebufferStatus(GLenum target):
    '''See: `glCheckFramebufferStatus() on Kronos website
    <http://www.khronos.org/opengles/sdk/docs/man/xhtml/glCheckFramebufferStatus.xml>`_
    '''
    cdef GLenum result
    result = c_opengl.CheckFramebufferStatus(target)
                    ^
------------------------------------------------------------

kivy/graphics/opengl.pyx:544:21: cimported module has no attribute 'CheckFramebufferStatus'


  STDERR:


Traceback (most recent call last):
  File "/usr/lib/python3.7/runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "/usr/lib/python3.7/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/content/.buildozer/android/platform/python-for-android/pythonforandroid/toolchain.py", line 1294, in <module>
    main()
  File "/content/.buildozer/android/platform/python-for-android/pythonforandroid/entrypoints.py", line 18, in main
    ToolchainCL()
  File "/content/.buildozer/android/platform/python-for-android/pythonforandroid/toolchain.py", line 728, in __init__
    getattr(self, command)(args)
  File "/content/.buildozer/android/platform/python-for-android/pythonforandroid/toolchain.py", line 151, in wrapper_func
    build_dist_from_args(ctx, dist, args)
  File "/content/.buildozer/android/platform/python-for-android/pythonforandroid/toolchain.py", line 213, in build_dist_from_args
    args, "ignore_setup_py", False
  File "/content/.buildozer/android/platform/python-for-android/pythonforandroid/build.py", line 596, in build_recipes
    recipe.build_arch(arch)
  File "/content/.buildozer/android/platform/python-for-android/pythonforandroid/recipe.py", line 1059, in build_arch
    self.build_cython_components(arch)
  File "/content/.buildozer/android/platform/python-for-android/pythonforandroid/recipe.py", line 1084, in build_cython_components
    self.cythonize_build(env=env)
  File "/content/.buildozer/android/platform/python-for-android/pythonforandroid/recipes/kivy/__init__.py", line 18, in cythonize_build
    super().cythonize_build(env, build_dir=build_dir)
  File "/content/.buildozer/android/platform/python-for-android/pythonforandroid/recipe.py", line 1132, in cythonize_build
    self.cythonize_file(env, build_dir, join(root, filename))
  File "/content/.buildozer/android/platform/python-for-android/pythonforandroid/recipes/kivy/__init__.py", line 39, in cythonize_file
    super().cythonize_file(env, build_dir, filename)
  File "/content/.buildozer/android/platform/python-for-android/pythonforandroid/recipe.py", line 1123, in cythonize_file
    filename, *self.cython_args, _env=cyenv)
  File "/content/.buildozer/android/platform/python-for-android/pythonforandroid/logger.py", line 167, in shprint
    for line in output:
  File "/usr/local/lib/python3.7/dist-packages/sh.py", line 953, in next
    self.wait()
  File "/usr/local/lib/python3.7/dist-packages/sh.py", line 879, in wait
    self.handle_command_exit_code(exit_code)
  File "/usr/local/lib/python3.7/dist-packages/sh.py", line 905, in handle_command_exit_code
    raise exc
sh.ErrorReturnCode_1: 

  RAN: /usr/bin/python3 '-cimport sys; from Cython.Compiler.Main import setuptools_main; sys.exit(setuptools_main());' ./kivy/graphics/opengl.pyx

  STDOUT:
/usr/local/lib/python3.7/dist-packages/Cython/Compiler/Main.py:369: FutureWarning: Cython directive 'language_level' not set, using 2 for now (Py2). This will change in a later release! File: /content/.buildozer/android/platform/build-arm64-v8a_armeabi-v7a/build/other_builds/kivy/armeabi-v7a__ndk_target_21/kivy/kivy/graphics/opengl.pyx
  tree = Parsing.p_module(s, pxd, full_module_name)

Error compiling Cython file:
------------------------------------------------------------
...
def glCheckFramebufferStatus(GLenum target):
    '''See: `glCheckFramebufferStatus() on Kronos website
    <http://www.khronos.org/opengles/sdk/docs/man/xhtml/glCheckFramebufferStatus.xml>`_
    '''
    cdef GLenum result
    result = c_opengl.CheckFramebufferStatus(target)
                    ^
------------------------------------------------------------

kivy/graphics/opengl.pyx:544:21: cimported module has no attribute 'CheckFramebufferStatus'


  STDERR:




# Command failed: /usr/bin/python3 -m pythonforandroid.toolchain create --dist_name=MyApp1 --bootstrap=sdl2 --requirements=python3,kivy==1.9.1 --arch arm64-v8a --arch armeabi-v7a --copy-libs --color=always --storage-dir="/content/.buildozer/android/platform/build-arm64-v8a_armeabi-v7a" --ndk-api=21 --ignore-setup-py --debug
# ENVIRONMENT:
#     CUDNN_VERSION = '8.0.5.39'
#     PYDEVD_USE_FRAME_EVAL = 'NO'
#     LD_LIBRARY_PATH = '/usr/local/nvidia/lib:/usr/local/nvidia/lib64'
#     CLOUDSDK_PYTHON = 'python3'
#     LANG = 'en_US.UTF-8'
#     ENABLE_DIRECTORYPREFETCHER = '1'
#     HOSTNAME = 'ccdae318878b'
#     OLDPWD = '/'
#     CLOUDSDK_CONFIG = '/content/.config'
#     USE_AUTH_EPHEM = '1'
#     NVIDIA_VISIBLE_DEVICES = 'all'
#     DATALAB_SETTINGS_OVERRIDES = '{"kernelManagerProxyPort":6000,"kernelManagerProxyHost":"172.28.0.3","jupyterArgs":["--ip=172.28.0.2"],"debugAdapterMultiplexerPath":"/usr/local/bin/dap_multiplexer","enableLsp":true}'
#     ENV = '/root/.bashrc'
#     PAGER = 'cat'
#     NCCL_VERSION = '2.7.8'
#     TF_FORCE_GPU_ALLOW_GROWTH = 'true'
#     JPY_PARENT_PID = '41'
#     NO_GCE_CHECK = 'False'
#     PWD = '/content'
#     HOME = '/root'
#     LAST_FORCED_REBUILD = '20220628'
#     CLICOLOR = '1'
#     DEBIAN_FRONTEND = 'noninteractive'
#     LIBRARY_PATH = '/usr/local/cuda/lib64/stubs'
#     GCE_METADATA_TIMEOUT = '3'
#     GLIBCPP_FORCE_NEW = '1'
#     TBE_CREDS_ADDR = '172.28.0.1:8008'
#     TERM = 'xterm-color'
#     SHELL = '/bin/bash'
#     GCS_READ_CACHE_BLOCK_SIZE_MB = '16'
#     PYTHONWARNINGS = 'ignore:::pip._internal.cli.base_command'
#     MPLBACKEND = 'module://ipykernel.pylab.backend_inline'
#     CUDA_VERSION = '11.1.1'
#     NVIDIA_DRIVER_CAPABILITIES = 'compute,utility'
#     SHLVL = '1'
#     PYTHONPATH = '/env/python'
#     NVIDIA_REQUIRE_CUDA = ('cuda>=11.1 brand=tesla,driver>=418,driver<419 '
 'brand=tesla,driver>=440,driver<441 brand=tesla,driver>=450,driver<451')
#     TBE_EPHEM_CREDS_ADDR = '172.28.0.1:8009'
#     COLAB_GPU = '0'
#     GLIBCXX_FORCE_NEW = '1'
#     PATH = '/root/.buildozer/android/platform/apache-ant-1.9.4/bin:/opt/bin:/usr/local/nvidia/bin:/usr/local/cuda/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/tools/node/bin:/tools/google-cloud-sdk/bin'
#     LD_PRELOAD = '/usr/lib/x86_64-linux-gnu/libtcmalloc.so.4'
#     GIT_PAGER = 'cat'
#     _ = '/usr/local/bin/buildozer'
#     PACKAGES_PATH = '/root/.buildozer/android/packages'
#     ANDROIDSDK = '/root/.buildozer/android/platform/android-sdk'
#     ANDROIDNDK = '/root/.buildozer/android/platform/android-ndk-r19c'
#     ANDROIDAPI = '27'
#     ANDROIDMINAPI = '21'
# 
# Buildozer failed to execute the last command
# The error might be hidden in the log above this error
# Please read the full log, and search for it before
# raising an issue with buildozer itself.
# In case of a bug report, please add a full log with log_level = 2

如果有人能帮助我,我将不胜感激。

【问题讨论】:

  • 尝试将您的 Cython 降级到 0.25.2 并重建 apk。
  • 不起作用...当我尝试命令“!pip install cython==0.25.2”时,出现错误:错误:cython 的构建轮失败。最后,colab 安装了 cython 0.29.30 版本,不幸的是它不适用于这个......

标签: python android python-3.x kivy google-colaboratory


【解决方案1】:

我现在面临同样的问题,你找到解决方案了吗?

【讨论】:

    猜你喜欢
    • 2022-12-10
    • 2016-12-30
    • 2023-02-03
    • 2020-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-18
    • 2013-02-02
    相关资源
    最近更新 更多