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

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.batAndroid 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.mzph.cn/news/747668.shtml

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

相关文章

Python爬虫 Day1

要注意看网页的请求方式是request还是get 一、小型爬虫 (爬百度首页) from urllib.request import urlopen url "https://www.baidu.com" resp urlopen(url) print(resp.read().decode(utf-8)) print("over!") //!&am…

【Hadoop】Hadoop概述与核心组件

目录 Hadoop概述Hadoop 发展历史Hadoop 三大发行版本1.Apache Hadoop(常用)2.Cloudera Hadoop3.Hortonworks Hadoop优势优势总结——4高(高可靠、高扩展、高效、高容错) Hadoop组成1.HDFS管理者:NameNode(n…

css3 实现html样式蛇形布局

文章目录 1. 实现效果2. 实现代码 1. 实现效果 2. 实现代码 <template><div class"body"><div class"title">CSS3实现蛇形布局</div><div class"list"><div class"item" v-for"(item, index) …

音视频如何快速转二维码?在线生成音视频活码的教程

音频文件的二维码制作步骤是什么样的呢&#xff1f;扫描二维码来展现内容是很流行的一种方式&#xff0c;基本上日常生活中经常会用的图片、音频、视频等都可以使用生成二维码的方式。现在很多的幼儿园或者学校会录制孩子的音频或者视频内容用来展示&#xff0c;那么二维码制作…

鸿蒙开发实战:【音频组件】

简介 音频组件用于实现音频相关的功能&#xff0c;包括音频播放&#xff0c;录制&#xff0c;音量管理和设备管理。 图 1 音频组件架构图 基本概念 采样 采样是指将连续时域上的模拟信号按照一定的时间间隔采样&#xff0c;获取到离散时域上离散信号的过程。 采样率 采样…

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

相对布局组件&#xff0c;用于复杂场景中元素对齐的布局。 说明&#xff1a; 该组件从API Version 9开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 规则说明 容器内子组件区分水平方向&#xff0c;垂直方向&#xff1a; 水平方向为left&…

HTTPS的工作过程

一、HTTPS 是什么 HTTPS 也是⼀个应用层协议&#xff0c;是在 HTTP 协议的基础上引入了⼀个加密层. HTTP 协议内容都是按照文本的方式明文传输的。这就导致在传输过程中出现⼀些被篡改的情况. 在互联网上, 明文传输是比较危险的事情!!! HTTPS 就是在 HTTP 的基础上进行了加密…

platform设备注册驱动模块的测试

一. 简介 上一篇文章编写了 platform设备注册代码&#xff0c;文章地址如下&#xff1a; 无设备树platform驱动实验&#xff1a;platform设备注册代码实现-CSDN博客 本文继续无设备树platform驱动实验&#xff0c;本文对编译好的 设备注册程序进行测试&#xff0c;测试所实…

(二)丶RabbitMQ的六大核心

一丶什么是MQ Message Queue(消息队列&#xff09;简称MQ&#xff0c;是一种应用程序对应用程序的消息通信机制。在MQ中&#xff0c;消息以队列形式存储&#xff0c;以便于异步传输&#xff0c;在MQ中&#xff0c;发布者&#xff08;生产者&#xff09;将消息放入队列&#xff…

LeetCode 面试经典150题 80.删除有序数组中的重复项II

题目&#xff1a; 给你一个有序数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使得出现次数超过两次的元素只出现两次 &#xff0c;返回删除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件…

百度paddleocr GPU版部署

显卡&#xff1a;NVIDIA GeForce RTX 4070&#xff0c;Nvidia驱动程序版本&#xff1a;537.13 Nvidia驱动程序能支持的最高cuda版本&#xff1a;12.2.138 Python&#xff1a;python3.10.11。试过python3.12&#xff0c;安装paddleocr失败&#xff0c;找不到相关模块。 飞桨版本…

Linux从0到1——Linux第一个小程序:进度条

Linux从0到1——Linux第一个小程序&#xff1a;进度条 1. 输出缓冲区2. 回车和换行的本质3. 实现进度条3.1 简单原理版本3.2 实际工程版本 1. 输出缓冲区 1. 小实验&#xff1a; 编写一个test.c文件&#xff0c;&#xff1a; #include <stdio.h> #include <unistd.h…

老电脑装什么系统流畅

对于一些老旧电脑来说&#xff0c;重装系统是提升电脑性能的最佳选择。那么&#xff0c;老电脑装什么系统流畅呢&#xff1f;推荐Windows 7系统&#xff0c;它对硬件的需求相对较低。配置较低的电脑运行Windows 7可以更好地利用系统资源&#xff0c;提高电脑的运行速度和响应能…

c语言实现https客户端 源码+详细注释(OpenSSL下载,visual studio编译器环境配置)

OpenSSL的下载和环境配置 请参考&#xff1a;openssl下载安装教程 步骤&#xff1a;官网下载->安装到选定目录->配置环境变量->打开命令窗口检查是否安装成功 注意&#xff1a; 打开命令窗口&#xff08;快捷键winr,在弹出窗口内输入cmd按回车&#xff09;&#xff0…

ChatGPT解决hmm...something seems to have gone wrong.

ChatGPT解决hmm…something seems to have gone wrong. 这里是官方社区的一种workaround办法。仅仅只是mark一下。 我这边遇到的现象是&#xff0c;ChatGPT 3.5是正常的&#xff0c;但是使用ChatGPT 4就会频繁的出现这样的输出。而且恶心的是&#xff0c;即使是这种输出&…

(三)丶RabbitMQ的四种类型交换机

前言&#xff1a;四大交换机工作原理及实战应用 1.交换机的概念 交换机可以理解成具有路由表的路由程序&#xff0c;仅此而已。每个消息都有一个称为路由键&#xff08;routing key&#xff09;的属性&#xff0c;就是一个简单的字符串。最新版本的RabbitMQ有四种交换机类型&a…

云计算2主从数据库

设置主从数据库的目的是将数据库1和数据库2分别建在两个虚拟机上&#xff0c;并实现数据互通访问 首先准备两个虚拟机&#xff0c;这里示例ip分别为&#xff1a; 192.168.200.10&#xff1b;192.168.200.20 修改主机名&#xff0c;一个是mysql1&#xff0c;一个是mysql2&#x…

vscode 运行 java 项目之解决“Build failed, do you want to continue”的问题

Visual Studio Code运行 java 起来似乎比 IDEA 更轻量、比 eclipse 更友好&#xff0c;是不可多得的现代编译法宝。 安装好官方推荐的 java 扩展包后&#xff0c;就可以运行 java 代码了。功能 比 code runner 强&#xff0c;支持 gradle、maven、普通java项目&#xff0c;运行…

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

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

力扣L12--- 125验证回文串(java版)-2024年3月15日

1.题目 2.知识点 注1&#xff1a;在 Java 中&#xff0c;toString() 方法用于将对象转换为字符串表示形式。对于数组对象&#xff0c;toString() 方法将返回数组的字符串表示形式&#xff0c;其中包含数组中每个元素的字符串表示形式&#xff0c;以逗号分隔&#xff0c;并且包…