首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法使用Buildozer编译APK

无法使用Buildozer编译APK
EN

Stack Overflow用户
提问于 2019-03-15 13:49:11
回答 2查看 1.1K关注 0票数 0

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

代码语言:javascript
运行
复制
/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的文件中的一个简单类:

代码语言:javascript
运行
复制
__version__ = '1.1'

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

我如何克服这个问题并创建一个APK。请帮帮我!

EN

回答 2

Stack Overflow用户

发布于 2019-03-15 15:01:57

原因

该错误是由于使用的buildozer和Java版本不兼容造成的。在Parrot中,默认的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 /3

代码语言:javascript
运行
复制
pip3 install --upgrade buildozer

Ubuntu 18.04 (64位)

代码语言:javascript
运行
复制
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位)

代码语言:javascript
运行
复制
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
票数 1
EN

Stack Overflow用户

发布于 2019-07-01 04:48:22

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

您可以使用: sudo update-alternatives config java切换jdk。

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

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

DEFAULT_JVM_OPTS='"-Dcom.android.sdklib.toolsdir=$APP_HOME“-XX:+IgnoreUnrecognizedVMOptions --添加模块java.se.ee'

然后用: buildozer android清理你的东西

然后重新制作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55184079

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档