使用 buildozer 打包我的 kivy 应用程序时如何修复“java.lang.module.FindException:找不到模块 java.se.ee”错误

Posted

技术标签:

【中文标题】使用 buildozer 打包我的 kivy 应用程序时如何修复“java.lang.module.FindException:找不到模块 java.se.ee”错误【英文标题】:How to fix 'java.lang.module.FindException: module java.se.ee not found' error when packaging my kivy application with buildozer 【发布时间】:2019-09-08 03:55:48 【问题描述】:

我正在尝试打包我的 kivy 应用程序 (python3),但是当我运行命令 buildozer -v android debug 时看到此错误

# Cwd /home/javier/.buildozer/android/platform/android-sdk
Error occurred during initialization of boot layer
java.lang.module.FindException: Module java.se.ee not found
# Command failed: /home/javier/.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

我有这个 Java 版本

$ java --version
openjdk 11.0.2 2019-01-15
OpenJDK Runtime Environment (build 11.0.2+9-Ubuntu-3ubuntu118.04.3)
OpenJDK 64-Bit Server VM (build 11.0.2+9-Ubuntu-3ubuntu118.04.3, mixed mode, sharing)

我只下载了 sdkmanager 命令行工具from here 并将它放在我的根路径中,但我没有成功。

我在this post 中看到了一个解决方案,我做到了,但我没有解决错误。

我有一个安装了所有依赖项的 virtualenv。我还编辑了buildozer.spec 并且我自定义了它

Virtualenv 是:

(envAppSinapsis)~/AppSin$ pip freeze
certifi==2019.3.9
chardet==3.0.4
Cython==0.28.2
docutils==0.14
idna==2.8
Kivy==1.10.1
Kivy-Garden==0.1.4
psycopg2==2.7.6.1
psycopg2-binary==2.7.6.1
pygame==1.9.4.dev0
Pygments==2.3.1
requests==2.21.0
urllib3==1.24.1

我认为该错误与 JAVA 相关,但我不知道是什么。非常感谢您的帮助,请原谅我的英语不好。

我在 Ubuntu 18 中工作

更新 Print Screen Error

【问题讨论】:

您使用的是 OpenJDK 11,您可以尝试使用 8 来代替吗? 自 JDK 9 起,se.ee 包被标记为已弃用,因此您需要相应地包含 EE 包。或者只是将您的 JAVA 降级到 9 或 8 docs.oracle.com/javase/10/docs/api/java.se.ee-summary.html 【参考方案1】:

您可以通过降级 Java 或在终端中执行以下命令来解决此错误。

export JAVA_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'

另外,不要自己下载平台工具,让 buildozer 来处理。

如果上述命令不起作用,请尝试从您的应用中删除 buildozer 文件并重新构建您的应用。

【讨论】:

我执行了上面指示的命令,但不起作用。我正在下载 Java 10 Linux x64 JDK (.tar.gz) 如何在第一个答案中告诉我@steve 并且我等待它的工作...我将具体化这个问题,在打印屏幕 启动层初始化时出错java.lang.module.FindException:找不到模块java.se.ee 我在执行你的答案时犯了错误,现在当我执行时:(flutter doctor --android-licenses),..我有这个错误:启动层java.lang初始化期间发生错误。 module.FindException:找不到模块 java.se.ee。我怎样才能恢复这个?【参考方案2】:

直到几天前,如果您从 Ubuntu 存储库安装了 openjdk-11-jdk/jre,您会发现它实际上是 Java 10 的一个版本 (https://askubuntu.com/questions/1037646/why-is-openjdk-10-packaged-as-openjdk-11)。

java.se.ee 在 Java 9、10 中已弃用,在 Java 11 中删除 (https://www.oracle.com/technetwork/java/javase/11-relnote-issues-5012449.html)

不幸的是,目前还没有简单的方法可以让 sdkmanager 或 avdmanager 等 Android 工具在 Java 11 上运行。

我能够使用 Java 10 在 Ubuntu 上再次运行 buildozer:

从http://jdk.java.net/java-se-ri/10 下载 Java 10 Linux x64 JDK (.tar.gz) 解压:tar -xzvf jdk-10_linux-x64_bin_ri.tar.gz 设置路径:export PATH=/path/to/inflated/jdk-10/bin:$PATH

【讨论】:

【参考方案3】:

收到错误许可不接受 SDK 构建工具等

通过安装解决

    SDK 命令行工具 Google Play 许可服务

在 SDK 管理器 > SDK 工具中

在沮丧了 2 小时后帮助了我,并听到大家说唯一的方法是降级 Java

【讨论】:

需要说明的是,如果您之前使用'export JAVA_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee''编辑了JAVA_OPTS,那么您需要将其设置回:导出 JAVA_OPTS = ''

以上是关于使用 buildozer 打包我的 kivy 应用程序时如何修复“java.lang.module.FindException:找不到模块 java.se.ee”错误的主要内容,如果未能解决你的问题,请参考以下文章

Python/Kivy/Buildozer - 应用程序在 Android 中崩溃,但在 PC 上运行良好

Buildozer 编译简单的 android kivy 应用程序,但在打包时失败

Kivy buildozer Firestore 错误 - ModuleNotFoundError:没有名为“google.cloud”的模块

如何从我的 kivy 应用程序(Pyinstaller)获取 Windows 可执行文件?

《Buildozer打包实战指南》实战打包requests

《Buildozer打包实战指南》实战打包pillow