Unreal发布Android App如何面对混乱的Android SDK开发环境

news2025/1/11 14:17:00

Unreal发布Android App如何面对混乱的Android SDK开发环境

  • 混乱的Android SDK开发环境
  • Unreal 4可以借用Unity3D安装的Android环境
  • Unreal 5需要安装Android Studio开发环境
  • Android Studio的DK版本目录
  • 处理gradle和java版本
  • gradle提示错误
  • 总结

混乱的Android SDK开发环境

Unreal编译Android App需要配置SDK开发环境
在这里插入图片描述

其中包含了Android SDK NDK JDK,非常混乱,几个DK之间的版本不匹配,编译出错,报错信息很笼统,很难定位具体问题。一般来说,借用其他软件自动安装的DK一般为兼容的一套,如果可以直接使用,会减少很多我们自己配置SDK出现版本兼容的问题。
在这里插入图片描述

Unreal 4可以借用Unity3D安装的Android环境

Unity 3D使用Unity HUB安装Android开发环境时会自动安装一套配套的Android SDK NDK JDK,Unreal可以借用版本匹配的Unity3D的Android开发环境。
比如Unreal 4.27就可以使用Unity3D 2021.3.33f1c1的开发环境,路径如下:
SDK:D:\Program Files\Unity Hub\Editor\2021.3.33f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\SDK
NDK:D:\Program Files\Unity Hub\Editor\2021.3.33f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\NDK
JDK:D:\Program Files\Unity Hub\Editor\2021.3.33f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\OpenJDK

Unreal 5需要安装Android Studio开发环境

Unreal 5需要使用SDK的版本为r25b,这个和Unity3D安装的Android SDK并不匹配,而且Unreal会验证系统是否安装了Android Studio,没有安装则直接报错退出编译。

有人说可以建一个空目录欺骗Unreal,因为输出Android Apk时只需要用到3个DK,完全没有用到Android Studio的其他组件。

Android Studio给人很混乱的一个感觉,就是各种版本。前面说的Unreal需要Android SDK版本为r25b,高于或者低于这个版本都是不行的。

UATHelper: Packaging (Android (ETC2)): Android: (Status=Invalid, Allowed_Sdk=r25b, Current_Sdk=r23b, Allowed_AutoSdk=r25b, Current_AutoSdk=, Flags="InstalledSdk_InvalidVersionExists, Platform_ValidHostPrerequisites")

但是打开Android Studio的SDK Manager管理器,可以看到各种版本号
在这里插入图片描述
Android Studio的SDK Manager管理器中显示了很多版本号,有API的版本,有Android系统的版本,唯独没有我们要的r25b这个版本,让我们无从下手。
实际上,这里说的r25b实际上是Android SDK Build-Tools和NDK的版本。
在这里插入图片描述
默认情况下,我们是看不到这个版本号的,需要点击右下角的Show Package Details复选框
在这里插入图片描述
在这里插入图片描述
这个时候我们才能看到SDK Tools的版本(SDK和NDK版本),这个才是Unreal需要的版本号,Unreal 5.3安装对应的25版本即可。

Android Studio的DK版本目录

Android SDK和NDK目录在SDK Manager管理器中有显示
在这里插入图片描述
SDK:C:\Users\wlf\AppData\Local\Android\sdk
NDK:C:\Users\wlf\AppData\Local\Android\sdk\ndk\25.1.8937393

在这里插入图片描述
NDK目录下有我们安装的多个版本,选择Unreal要求的版本。
但JDK的版本不在这个目录下。AAndroid Studio内置了一个JDK,没有通过SDK Manager进行管理,位置位于Android Studio的安装目录下。
JDK:C:\Program Files\Android\Android Studio\jre

处理gradle和java版本

Unreal打包Android APK需要用到gradle,gradle是安卓的打包工具,需要和IDE配套,一般会自动下载,但由于墙的存在,可能会下载失败。
在这里插入图片描述
Unreal提示出错信息

UATHelper: Packaging (Android (ETC2)): Creating rungradle.bat to work around commandline length limit (using unused drive letter Z:)
UATHelper: Packaging (Android (ETC2)): Making .apk with Gradle...
UATHelper: Packaging (Android (ETC2)): Downloading https://services.gradle.org/distributions/gradle-7.5-all.zip

gradle的建构目录位于:C:\Users\wlf\.gradle\wrapper\dists
在这里插入图片描述
目录下有不同IDE用到的不同gradle版本。如果没有对应的版本或者下载失败(0字节zip),可以手动下载并解压覆盖。

gradle提示错误

gradle是IDE最终合成apk的阶段,提示错误一般很笼统,很难看明白。

UATHelper: Packaging (Android (ETC2)): FAILURE: Build failed with an exception.
UATHelper: Packaging (Android (ETC2)): BUILD FAILED in 5s
UATHelper: Packaging (Android (ETC2)): cmd.exe failed with args /c "H:\Coding\Unreal\ARStream5.3\Intermediate\Android\arm64\gradle\rungradle.bat" :app:assembleDebug
UATHelper: Packaging (Android (ETC2)): BUILD FAILED

可以手动运行Unreal安装目录下的setupandroid.bat来检查具体出错信息。
在这里插入图片描述
如果有错误,会提示具体错误。

PS D:\Program Files\Epic Games\UE_5.3\Engine\Extras\Android> .\setupandroid.bat

Android Studio Path: C:\Program Files\Android\Android Studio Android Studio SDK Path: 
C:\Users\wlf\AppData\Local\Android\Sdk Using sdkmanager: 
C:\Users\wlf\AppData\Local\Android\Sdk\cmdline-tools\latest\bin\sdkmanager.bat 
Error: A JNI error has occurred, please check your installation and try again Exception in thread "main" java.lang.UnsupportedClassVersionError: 
com/android/sdklib/tool/sdkmanager/SdkManagerCli has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 52.0 at 
java.lang.ClassLoader.defineClass1(Native Method) at 
java.lang.ClassLoader.defineClass(ClassLoader.java:757) at 
java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) at 
java.net.URLClassLoader.defineClass(URLClassLoader.java:468) at 
java.net.URLClassLoader.access$100(URLClassLoader.java:74) at 
java.net.URLClassLoader$1.run(URLClassLoader.java:369) at 
java.net.URLClassLoader$1.run(URLClassLoader.java:363) at java.security.AccessController.doPrivileged(Native Method) at 
java.net.URLClassLoader.findClass(URLClassLoader.java:362) at 
java.lang.ClassLoader.loadClass(ClassLoader.java:419) at 
sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352) at 
java.lang.ClassLoader.loadClass(ClassLoader.java:352) at 
sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:495) Update failed. Please check the Android Studio install.

chatGPT解释一下错误
在这里插入图片描述
其实就是jdk版本问题,IDE需要的gradle 7.5需要java-17,而我安装的Android Studio自带的jdk是java-8的,不能编译java文件造成的。
单独安装java-17并配置环境变量JAVA_HOME
在这里插入图片描述

按说明文档只要配置Unreal的Project Setting的SDK目录即可,但保险起见还需要配置JAVA_HOME目录,因为Unreal调用命令行执行外部命令时可能会使用系统环境变量而不使用Unreal配置的SDK目录

配置Unreal/Project Setting/Android SDK目录
在这里插入图片描述

总结

总的来说,Unreal编译Android APK需要用到Android SDK NDK,JDK和gradle。
其中Android SDK是安卓开发环境的编译器,NDK是Android编译C/C++代码需要的工具,SDK和NDK的版本需要和Unreal需求的特定版本一致,比如Unreal 5.3需要r25b版本,安装Android SDK/NDK 25版即可。
JDK是JAVA语言开发包,也就是java的编译环境,是安卓开发的基础。gradle是IDE(也就是Unreal编辑器)打包Android APK的工具,运行在java开发环境下,gradle的版本是IDE规定的(比如Unreal 5.3需要gradle 7.5),而确定的gradle需要特定的java开发环境,也就是特定JDK版本,比如gradle 7.5需要java-17,安装并配置java-17版本即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1520147.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ubuntu安装zsh及环境配置

ubuntu安装zsh及环境配置 MacBook 安装 zsh 个人很喜欢使用zsh,它的终端显示很清晰,命令都很友好,使用git时,直接可以看到当前分支和修改状态 zsh安装 1.查看当前系统装了哪些shellcat /etc/shells 2.当前正在运行的是哪个版本的shellecho $SHELL 3.安装zshsudo apt-get -y …

深入理解TCP:序列号、确认号和自动ACK的艺术

深入理解TCP:序列号、确认号和自动ACK的艺术 在计算机网络的世界里,TCP(传输控制协议)扮演着至关重要的角色。它确保了数据在不可靠的网络环境中可靠地、按顺序地传输。TCP的设计充满智慧,其中序列号(Seq&a…

html和winform webBrowser控件交互并播放视频(包含转码)

1、 为了使网页能够与winform交互 将com的可访问性设置为真 [System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name "FullTrust")][System.Runtime.InteropServices.ComVisibleAttribute(true)] 2、在webBrow…

MS08-067 漏洞利用与安全加固

文章目录 环境说明1 MS08_067 简介2 MS08_067 复现过程3 MS08_067 安全加固 环境说明 渗透机操作系统:2024.1漏洞复现操作系统: Windows XP Professional with Service Pack 2- VL (English)安全加固复现操作系统:Windows XP Professional with Service …

一文让您读懂实时数仓(Apache Doris)

引言: 随着大数据时代的来临,实时数据处理与分析成为企业核心竞争力的关键因素之一。在这场数据革命中,SelectDB成为引领者。从百度自研的实时数仓平台 Palo,到开源项目 Apache Doris,再到飞轮科技研发的 SelectDB&am…

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:ListItem)

用来展示列表具体item,必须配合List来使用。 说明: 该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。该组件的父组件只能是List或者ListItemGroup。 子组件 可以包含单个子组件。 接口 从API…

19113133262(微信同号)【征稿进行时|见刊、检索快速稳定】2024年区块链、物联网与复合材料与国际学术会议 (ICBITC 2024)

【征稿进行时|见刊、检索快速稳定】2024年区块链、物联网与复合材料与国际学术会议 (ICBITC 2024) 大会主题: (主题包括但不限于, 更多主题请咨询会务组苏老师) 区块链: 区块链技术和系统 分布式一致性算法和协议 块链性能 信息储存系统 区块链可扩展性 区块…

[云原生] Prometheus之部署 Alertmanager 发送告警

一、Alertmanager 发送告警的介绍 Prometheus 对指标的收集、存储与告警能力分属于 Prometheus Server 和 AlertManager 两个独立的组件,前者仅负责定义告警规则生成告警通知, 具体的告警操作则由后者完成。 Alertmanager 负责处理由 Prometheus Serve…

SQLiteC/C++接口详细介绍之sqlite3类(九)

返回目录:SQLite—免费开源数据库系列文章目录 上一篇:SQLiteC/C接口详细介绍之sqlite3类(八) 下一篇:​​SQLiteC/C接口详细介绍之sqlite3类(十)(未发表)​​​​ 27…

机器学习概念(一)

机器学习 是一门使计算机在没有明确编程的情况下具备学习能力的研究领域。 监督学习(Supervised learning) 监督学习算法 通过学习输入(x)到输出(y)的映射关系。在监督学习中,你需要为算法提…

AI日报:欧盟人工智能法案通过后行业面临合规障碍

文章目录 人工智能新规对web爬网的影响对英国的影响。 人工智能新规 立法者已经通过了欧盟人工智能法案。企业现在必须确保其人工智能应用程序符合规则。 全面的新规定对可能影响公民权利的人工智能系统实施制裁,并有可能彻底禁止某些系统。 违反规定的公司可能面…

stable diffusion上安装数字人sadtalker插件

数字人无论是在营销还是品牌推广的作用都非常重要,很多企业和个人都正在使用数字为自己创作财富,市面上的数字人生成网站包括某讯智影、D-ID或者是Heygen收费都比较昂贵。 那么如何才能拥有一个免费的数字人生成工具呢?其实很简单你只需要在…

基于LBP和KNN的人面表情识别,Matlab实现

博主简介: 专注、专一于Matlab图像处理学习、交流,matlab图像代码代做/项目合作可以联系(QQ:3249726188) 个人主页:Matlab_ImagePro-CSDN博客 原则:代码均由本人编写完成,非中介,提供…

Unity类银河恶魔城学习记录10-10 p98 UI health bar源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili HealthBar_UI.cs using System.Collections; using System.Collections.G…

AJAX学习(四)

版权声明 本文章来源于B站上的某马课程,由本人整理,仅供学习交流使用。如涉及侵权问题,请立即与本人联系,本人将积极配合删除相关内容。感谢理解和支持,本人致力于维护原创作品的权益,共同营造一个尊重知识…

NodeJs利用腾讯云实现手机发送验证码

本文介绍如何在nodejs实现短信发送,以腾讯云的短信验证为例。 腾讯云中准备工作 首先需要腾讯云的个人或者企业认证的账号,个人会赠送一百条,企业赠送一千条,可以用于测试,地址:腾讯云短信服务。然后需要…

k8s helm 删除 tiller

kuberneter 上面装了 helm 想卸载还并不是那么简单, 参考 stackoverflow 回复 kubectl get -n kube-system secrets,sa,clusterrolebinding -o name|grep tiller|xargs kubectl -n kube-system delete kubectl get all -n kube-system -l apphelm -o name|xargs kubectl dele…

前端实例:页面布局1(后端数据实现)

效果图 注&#xff1a;这里用到后端语言php&#xff08;页面是.php文件&#xff09;,提取纯html也可以用 inemployee_index.php <?php include(includes/session.inc); $Title _(内部员工首页); $ViewTopic 内部员工首页; $BookMark 内部员工首页; include(includes/…

FFmepg--音频编码流程--pcm编码为aac

文章目录 基本概念流程apicode(核心部分) 基本概念 从本地⽂件读取PCM数据进⾏AAC格式编码&#xff0c;然后将编码后的AAC数据存储到本地⽂件。 PCM样本格式&#xff1a;未经压缩的⾳频采样数据裸流 参数&#xff1a; Sample Rate : 采样频率Sample Size : 量化位数Number o…

14 stack和queue的使用

stack的介绍 stack文档 1.stack是一种容器适配器&#xff0c;专门用在具有后进先出操作的上下文环境中&#xff0c;其删除只能从容器的一端进行元素的插入和提取操作 2.stack是作为容器适配器被实现的&#xff0c;容器适配器是对特定类封装作为其底层的容器&#xff0c;并提供…