无法编译 Android 应用程序

Posted

技术标签:

【中文标题】无法编译 Android 应用程序【英文标题】:Failure to compile Android application 【发布时间】:2021-11-01 19:43:30 【问题描述】:

我使用的是 Linux Mint 20.X 发行版。

我使用online installer 安装了开源Qt Creator,主要针对使用C/C++ 构建原生android 应用程序。

我没有使用 Qt Creator 的经验,所以我花了几天时间试图弄清楚如何安装、什么版本、版本中是否存在错误等。

由于使用 C++ 构建原生 Android 应用程序需要使用包含许多子组件的 Qt Creator,我意识到会有很多不同的配置和它们之间可能的不兼容。

首先,我附上我的 Qt Creator 设置的基本信息屏幕截图:

关于对话框:基于 Qt 5.15.2(GCC 7.3.1 20180303,Red hat 7.3.1-5 64 位)

我正在使用 Oracle Java JDK 16.0.2 64 位,但也尝试了发行版存储库中的 openJDK。

工具->选项->工具包:

在 Tools->Options->Qt Versions 中,我可以在 auto-detected 部分看到 6.13,在手册中看到 5.12.8(可能是以前的安装尝试遗留下来的)

在 Tools->Options->Devices->Android 中我可以看到 Java 被报告为 OK,SDK 位置是我在安装过程中被 Qt 创建者提示后定义的位置,NDK 列表是 /home/manos/Android /sdk/ndk/21.3.6528147。我可以看到一个绿色勾号,上面写着“Android 设置正常(SDK 版本 5.0,NDK 版本 21.3.6528147)”

我在 AVD 选项卡下的同一对话框底部创建了两个 Android 虚拟设备,并在 SDK 选项卡下勾选并安装了适用于 Android 10 和 11 的 SDK 平台和 API。

安装 Qt Creator 后,我直接进入工具->选项,在那里我可以下载 Qt Creator 所需的所有组件。

确认许可证后一切顺利。

接下来,我创建了一个桌面电脑新应用程序,该应用程序也顺利构建,没有错误。

然后我按照以下屏幕截图创建了我的第一个 Android 应用程序:

在新建项目对话框中,我选择了 Qt Quick Application - Empty。

在项目位置中,我将项目文件夹命名为“new-mobile-app-ARM64-v8a”,并在字段值中创建为 /home/manos/Projects/Qt-Creator。

在定义构建系统对话框中,我选择了 qmake。

在必需的 Qt 版本中 - 我选择了版本。 6 从包含 5.12、5.13、5.14、5.15 和 6.0 的下拉列表中选择。

在套件选择对话框中,我选择了 ARM64-v8a clang 编译器。

创建项目后,我没有收到任何错误。 尝试构建它时出现以下错误:

无法初始化类 org.codehaus.groovy.runtime.InvokerHelper

完整的错误日志:

FAILURE:构建失败并出现异常。

出了什么问题: 无法初始化类 org.codehaus.groovy.runtime.InvokerHelper

尝试: 运行 & ndash; stacktrace 选项来获取堆栈跟踪。运行 & ndash;信息或 & ndash;调试选项以获得更多日志输出。运行 & ndash;扫描以获得完整的见解。

通过https://help.gradle.org获得更多帮助

在 326 毫秒内构建失败 构建 Android 包失败! & N破折号;有关更多信息,请使用 & ndash; 运行此命令。详细。

    03:49:进程“/home/manos/.programs/qt6/6.1.3/gcc_64/bin/androiddeployqt”退出,代码为 14。 构建/部署项目 new-mobile-app-ARM64-v8a 时出错(套件:Android Qt 6.1.3 Clang ARM64-v8a) 执行步骤“构建 Android APK”时

    03:49:经过时间:00:02。

后来我注意到这个错误涉及到gradle。

我在 S.O 中搜索,发现其中一个建议是更改 distributionUrl 值到另一个大于 6.3 的版本。我的是 5.6.4。 我去https://gradle.org/releases/看到最新的是7.2 所以我尝试了: distributionUrl=HTTPS://services.gradle.org/distributions/gradle-7.2-bin.zip

我尝试再次构建,但出现此错误:

任务“:processDebugManifest”执行失败。

完整的错误日志:

FAILURE:构建失败并出现异常。 此版本中使用了已弃用的 Gradle 功能,使其与 Gradle 8.0 不兼容。

您可以使用 ' & ndash; warning-mode all' 显示个别弃用警告并确定它们是否来自您自己的脚本或插件。

见https://docs.gradle.org/7.2/userguide/command_line_interface.html#sec:command_line_warnings 9 个可操作的任务:9 个已执行

出了什么问题: 任务“:processDebugManifest”执行失败。 无法使字段私有 final java.lang.String java.io.File.path 可访问:模块 java.base 不会“打开 java.io”到未命名模块 @289b717

尝试: 运行 & ndash; stacktrace 选项来获取堆栈跟踪。运行 & ndash;信息或 & ndash;调试选项以获得更多日志输出。运行 & ndash;扫描以获得完整的见解。

通过https://help.gradle.org获得更多帮助

在 701 毫秒内构建失败 构建 Android 包失败! & N破折号;有关更多信息,请使用 & ndash; 运行此命令。详细。

    14:59:进程“/home/manos/.programs/qt6/6.1.3/gcc_64/bin/androiddeployqt”退出,代码为 14。 构建/部署项目 new-mobile-app-ARM64-v8a 时出错(套件:Android Qt 6.1.3 Clang ARM64-v8a) 执行步骤“Build Android APK”时。

    14:59:经过时间:00:02。

即使我搜索了,我也找不到任何简单的解决方案。

在创建新项目时,我尝试了几种不同的 qt 版本和工具包组合。 我总是遇到同样的错误。

至少整整 2 天,我一直在努力完成这项工作。

【问题讨论】:

【参考方案1】:

问题已通过将我的 java 版本降级到 ver 来解决。 11.

原来我连续 2 天看错地方了。

有一张gradle和java兼容性的综合表。

看这里:https://docs.gradle.org/current/userguide/compatibility.html。

不幸的是,我在构建文件夹中的 gradle-wrapper.properties 文件中发现使用的 gradle 的默认版本是 5.6.4,该文件将在您尝试构建项目后创建。

有一行:

distributionUrl=https://services.gradle.org/distributions/gradle-5.6.4-bin.zip

其中 5.6.4 必须替换为有效版本。

选择Build后,您会在日志中注意到将下载新的 gradle zip 文件。

我尝试了使用 gradle 5.6.4(默认)的 java open jdk 11,它有效。 然后我尝试使用 gradle 6.5 的 java open jdk 13 也可以。 所以这里的结论是对于gradle必须使用正确的java版本。

不要忘记在菜单工具->选项->设备,选项卡Android->JDK位置更新java版本:/usr/lib/jvm/java-XX-openjdk-amd64/(适用于openJDK。将 XX 替换为您要使用的版本。

在 linux 中,您必须通过键入以下命令来安装您想要使用的 java:sudo apt install openjdk-XX-jdk,这可能在您的发行版中有所不同。

【讨论】:

以上是关于无法编译 Android 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

我无法通过 ndk 在 android studio 中编译和 android 应用程序

无法编译 WebRtc AppRTCDemo android 应用程序

android N 无法在应用计费 AIDL 中编译

使用 Ant 编译的 Android 项目无法编译,非法字符错误

无法构建 Android NDK 项目致命错误:android/configuration.h:没有此类文件或目录编译终止

jitsi-android 无法编译构建