【问题标题】:Cannot compile an APK using Buildozer无法使用 Buildozer 编译 APK
【发布时间】:2019-08-06 14:53:31
【问题描述】:

我正在尝试使用 buildozer 将 python 文件编译成 APK。安装所有依赖项(包括 SDK 和 NDK)并运行 buildozer android deploy run 后,我收到以下错误:

/home/caliph/.buildozer/android/platform/android-sdk
Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema
    at com.android.repository.api.SchemaModule$SchemaModuleVersion.<init>(SchemaModule.java:156)
    at com.android.repository.api.SchemaModule.<init>(SchemaModule.java:75)
    at com.android.sdklib.repository.AndroidSdkHandler.<clinit>(AndroidSdkHandler.java:81)
    at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:73)
    at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:48)
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.annotation.XmlSchema
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    ... 5 more
# Command failed: /home/caliph/.buildozer/android/platform/android-sdk/tools/bin/sdkmanager tools platform-tools
# 
# 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

我的 python 代码是一个名为 main.py 的文件中的简单类:

__version__ = '1.1'

class MyNewClass:
    '''This is a docstring. I have created a new class'''
    pass

我怎样才能克服这个问题并创建一个 APK。请帮忙!

【问题讨论】:

    标签: java python-3.x kivy buildozer


    【解决方案1】:

    原因

    该错误是由于 buildozer 和使用的 Java 版本不兼容造成的。在 Parrot OS 中,默认的 Java 版本是 openJDK11。

    解决方案

    1. 安装openJDK8:sudo apt install openjdk-8jdk
    2. 将 JDK8 设置为 java 的活动版本:sudo update-alternatives --config java
    3. 将 JDK8 设置为 javac 的活动版本:sudo update-alternatives --config javac

    Ubuntu 操作系统

    在 Buildozer v0.39 的新版本中,CrystaX 已被弃用。

    升级 Buildozer

    Ubuntu / Linux - Python 3

    pip3 install --upgrade buildozer
    

    Ubuntu 18.04(64 位)

    sudo pip install --upgrade cython==0.28.6
    sudo dpkg --add-architecture i386
    sudo apt update
    sudo apt install build-essential ccache git libncurses5:i386 libstdc++6:i386 libgtk2.0-0:i386 libpangox-1.0-0:i386 libpangoxft-1.0-0:i386 libidn11:i386 python2.7 python2.7-dev openjdk-8-jdk unzip zlib1g-dev zlib1g:i386
    

    Ubuntu 16.04(64 位)

    sudo pip install --upgrade cython==0.21
    sudo dpkg --add-architecture i386
    sudo apt-get update
    sudo apt-get install build-essential ccache git libncurses5:i386 libstdc++6:i386 libgtk2.0-0:i386 libpangox-1.0-0:i386 libpangoxft-1.0-0:i386 libidn11:i386 python2.7 python2.7-dev openjdk-8-jdk unzip zlib1g-dev zlib1g:i386
    

    【讨论】:

    • 感谢您的回复。我试过了,但它仍然给我同样的错误。我运行的是 Parrot 而不是 Ubuntu。
    【解决方案2】:

    你需要使用jdk 8。我在linux上使用openjdk-8-jdk。

    您可以使用以下方法切换 jdk: sudo update-alternatives --config java

    最重要的是,为了避免 jdk 的一些问题,我们将使用 JVM 的选项

    1. 在编辑器中打开 sdkmanager 文件。
    2. 查找定义了 DEFAULT_JVM_OPTIONS 或类似变量的位置。像这样:

    DEFAULT_JVM_OPTS='"-Dcom.android.sdklib.toolsdir=$APP_HOME" -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'

    然后用 : buildozer android 清理

    然后重新制作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-13
      • 2014-11-26
      • 2020-12-22
      • 2014-08-14
      • 2020-08-31
      • 2020-08-13
      • 1970-01-01
      相关资源
      最近更新 更多