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

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.dtcms.com/a/354469.html

相关文章:

  • PDF压缩如何平衡质量与体积?
  • Electron 简介:Node.js 桌面开发的起点
  • 小鹏自动驾驶的BEV占用网络有哪些优势?
  • “矿山”自动驾驶“路网”编辑功能实现
  • Mip-splatting
  • 在docker 中拉取xxl-job以及配置数据库
  • 【Linux】Linux基础开发工具从入门到实践
  • Redis 哨兵(Sentinel)全面解析
  • JavaSE丨集合框架入门:从0掌握Collection与List核心用法
  • Two Knights (数学)
  • Feign整合Sentinel实现服务降级与Feign拦截器实战指南
  • uni-app 网络请求与后端交互完全指南:从基础到实战
  • 智能养花谁更优?WebIDE PLOY技术与装置的结合及实践价值 —— 精准养护的赋能路径
  • 【LeetCode】29. 两数相除(Divide Two Integers)
  • PhotoshopImageGenerator:基于Photoshop的自动化图像数据集生成工具
  • C# 操作 DXF 文件指南
  • WAF对比传统防火墙的优劣势
  • 从Cgroups精准调控到LXC容器全流程操作​:用pidstat/stress测试Cgroups限流,手把手玩转Ubuntu LXC容器全流程​
  • 打破存储局限:CS 创世 SD NAND 如何优化瑞芯微(RK)与北京君正平台的贴片式 SD 卡性能
  • 横扫SQL面试——流量与转化率分类
  • 机器人电源电感的认证和认证细节,知多少?
  • Spring Boot 整合 SSE, http长连接
  • odoo打印新解
  • lesson48:Ubuntu下Python与三大数据库实战:MySQL、MongoDB、Redis全攻略
  • 基于uni-app的iOS应用上架,从打包到分发的全流程
  • 算法题打卡力扣第15题:三数之和(mid)
  • 本地构建的 Docker 镜像迁移到另一台电脑上运行
  • Python自动化测试完整教程:pytest + selenium实战
  • Windows 环境下搭建移动端自动化测试环境(JDK + SDK + Node.js + Appium)
  • 【Rust】 4. 函数与闭包