当前位置: 首页 > ds >正文

Unity游戏打包——Android打包环境(Mac下)

本文由 NRatel 历史笔记整理而来,如有错误欢迎指正。

一、安卓打包需要:

JDK、AndroidSDK、NDK、Gradle

1、JDK

    若要使用 Gradle 打包,必须提前设置好环境变量 JAVA_HOME(否则会报错)
    若在 Mac 命令行中打包,应在 ~/.zshrc 配置 JAVA_HOME 环境变量:
    若使用 Jenkins 打包,还需额外在 Jenkins的环境变量中添加 JAVA_HOME
    最好一次到位,直接添加到系统级环境变量中 /etc/profile(这样可由 Jenkins 识别到)

    JAVA_HOME 的配置,通常会在安装 Jenkins(需要JAVA 8或11)时设置好。
    这里不再赘述 下载安装过程

2、AndroidSDK 和 NDK

    强烈建议直接使用 Unity 安卓支持中自带的 Android SDK 和 NDK 即可,无需单独下载安装
    在 Unity/Prefrences/ExternalTools 中可查看到路径
    两者会在 Unity工程导出后默认写入安卓工程的 local.properties 中

--如下(windows下):
--  sdk.dir=C\:\\Program Files\\Unity\\Hub\\Editor\\2021.3.4f1c1\\Editor\\Data\\PlaybackEngines\\AndroidPlayer\\SDK
--  ndk.dir=C\:/Program Files/Unity/Hub/Editor/2021.3.4f1c1/Editor/Data/PlaybackEngines/AndroidPlayer/NDK

3、Gradle

     (1)、安装

    安装指引文档:https://docs.gradle.org/current/userguide/installation.html

    根据文档,MacOS 中,可使用命令安装: brew install gradle 
    查看可选版本: brew search gradle (并没有细分版本)

    实际上,构建Unity项目有Grale版本的强制对应需求
    因此,手动下载安装细分版本安装:https://gradle.org/releases/

    (2)、Unity 与 gradle 对应关系

    注意!!!,Googleplay对安卓目标版本有要求。
    因此,在安卓打包时,不能选择过低的 Unity和Gradle版本!!!

    对应关系可查看:
    https://docs.unity3d.com/2021.3/Documentation/Manual/android-gradle-overview.html
    http:// https://docs.unity3d.com/Manual/android-gradle-overview.html

    也可在 Unity 导出安卓工程后,查看工程根目录 build.gradle 中 allprojects.buildscript.dependencies.classpath 定义的插件版本。
    再根据插件版本确定gradle版本可知。

    例如,Unity 2021.3.4f1c1 导出安卓工程后,其 classpath 为 'com.android.tools.build:gradle:4.0.1';
    对应关系见官方文档(https://developer.android.google.cn/studio/releases/gradle-plugin)
    已因太旧查不到了,需要看这里

    https://developer.android.google.cn/build/releases/past-releases?hl=zh-cn

    可知 gradle版本应使用 6.1.1。

 (3)、用 gradle 还是 gradlew?

    gradlew 的作用是:为了统一项目使用的gradle版本,有些机器没有gradle或需要的版本时,可以直接利用它安装
    但对于游戏打包来说,用专用打包机打包,可以一次配置好。
    除此之外,在将Unity工程导出为Android工程时,会每次都先清空,如果把gradlew安装在Android工程下,每次都要重新安装,会拖慢构建速度。
    所以直接用 gradle。

    更新:利用gradlew更新 或 手动下载并解压到C:\Users\Admin\.gradle\wrapper\dists下(https://services.gradle.org/distributions/)。

    若要使用 gradlew:
    用任意一个已有的 gradle 安装 gradlew:
        进入项目目录
        执行命令:gradle wrapper
   切换 gradle 版本:
       执行命令:./gradlew wrapper --gradle-version [要更新的版本号]
       或 修改 gradle/wrapper/gradle-wrapper.properties 中的 distributionUrl(下次gradlew使用时自动更新)


二、安卓工程调试环境

Android Studio

下载地址:https://developer.android.com/studio?hl=zh-cn

注意,Mac M4 芯片(其他M系芯片一样) 应选择 arm 版


三、相关报错

1、缺少 JAVA_HOME 报错:

--Starting a Gradle Daemon (subsequent builds will be faster)
--java.lang.NoClassDefFoundError: Could not initialize class org.codehaus.groovy.vmplugin.v7.Java7

-- * What went wrong:
-- Could not initialize class org.codehaus.groovy.reflection.ReflectionCache
-- > Exception java.lang.NoClassDefFoundError: Could not initialize class org.codehaus.groovy.vmplugin.v7.Java7 [in thread "Daemon worker"]

-- * Try:
-- Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

-- * Get more help at https://help.gradle.org


2、尝试在 Unity Assets/Plugins/Android/res 中创建/修改一个xml配置时,报错:

-- Error building Player: Exception: OBSOLETE - Providing Android resources in Assets/Plugins/Android/res was removed, 
-- please move your resources to an AAR or an Android Library. See "AAR plug-ins and Android Libraries" section of the Manual for more details.

原因:Unity 在 2021.2.x 后,不再从 Assets/Plugins/Android/res 拷贝文件到 安卓工程,见:
https://docs.unity3d.com/2021.2/Documentation/Manual/UpgradeGuide20212.html


可使用 AAR plug-in 或 Android Library Project,引入 res。
https://docs.unity3d.com/2021.2/Documentation/Manual/AndroidAARPlugins.html

AAR plug-in 方式
https://docs.unity3d.com/Manual/android-aar-import.html

Android Library Project 方式
https://docs.unity3d.com/Manual/android-library-project-import.html

创建 Android 库

https://developer.android.com/studio/projects/android-library?hl=zh-cn
或利用 IPostGenerateGradleAndroidProject,在生成安卓工程后创建 Res文件(推荐!!!)
优点:
1、仍然可由打包脚本控制;
2、仍然可在Unity中直接打包(若手动或由外部打包脚本修改导出的安卓工程,则意味着不能再在Unity中直接打包(流程不完整了))。

http://www.xdnf.cn/news/19162.html

相关文章:

  • 0828 C++基础
  • PhotoshopImageGenerator:基于Photoshop的自动化图像数据集生成工具
  • BGP路由协议(一):基本概念
  • 每日五个pyecharts可视化图表日历图和箱线图:从入门到精通
  • 基于matplotlib库的python可视化:以北京市各区降雨量为例
  • 【开题答辩全过程】以 基于Spring Boot农产品运输服务平台为例,包含答辩的问题和答案
  • [论文阅读] 人工智能 + 软件工程 | 告别“隐藏陷阱”:领域预训练模型SmartBERT如何赋能智能合约安全
  • LoRA modules_to_save解析及卸载适配器(62)
  • 怎样将Word转成高质量的DITA
  • 构建AI智能体:十六、构建本地化AI应用:基于ModelScope与向量数据库的文本向量化
  • RGW层Op的组织
  • 【大前端】React Native(RN)跨端的原理
  • Day16_【机器学习—模型拟合问题】
  • 【MySQL 为什么默认会给 id 建索引? MySQL 主键索引 = 聚簇索引?】
  • 【实战】连锁商超出口网络割接项目案例分享
  • 从CTFshow-pwn入门-pwn43理解栈溢出到底跳转call还是plt
  • 【Word】用 Python 轻松实现 Word 文档对比并生成可视化 HTML 报告
  • 深入 OpenHarmony 内核:设备待机管理模块的休眠调度与资源节能技术
  • 【SpringBoot 版本升级整合Redis异常解决】Unable to connect to 127.0.0.1:6379
  • 5G核心网的架构和功能详解
  • 浏览器访问 ASP.NET Core wwwroot 目录下静态资源的底层实现
  • 新手向:Python编写简易翻译工具
  • 实时标注+硬件加速 | Bandicam 8.2 屏幕录制软件特色功能
  • 局域网共享访问各种报错全记录:从「能 ping 不能进」到「IP/名称差异」一次说清
  • OpenAI重组受阻:微软“锁链”与生态博弈
  • 从 WPF 到 Avalonia 的迁移系列实战篇3:ResourceDictionary资源与样式的差异与迁移技巧
  • 使用 httpsok 工具全面排查网站安全配置
  • @HAProxy 介绍部署使用
  • Copilot、Cursor、Trae、ChatGPT 的“四件套”场景选择表
  • 5G相对于4G网络的优化对比