文章

Unity导出Android 项目

Unity导出Android 项目

项目环境

  • mac mini
  • Unity Hub 6
  • 2022.3.62f1

Unity开发基础

  • unity 开发认识 https://www.cnblogs.com/didikee/p/17667073.html
  • 跨平台游戏引擎,支持 2D 和 3D 内容创作
  • 核心组件
    • GameObject 基本单位
    • Component
    • Project
    • Scene创建和编辑游戏场景
    • Inspector 窗口,查看和修改 GameObject 属性
  • 安装 UnityHub 下载 unity 2022.3.62f1版本时,jdk与 Android sdk 下载失败,打开项目之后发现无法导出,环境路径选择电脑上其他版本提示不支持,最关键的是Unity必须还要使用指定版本。

导出Android 项目

  • 导出 Android Studio 项目
  • Unity -> File -> Build Setting ->Android -> Export -> 选择新建空白文件夹
    • 提示报错Android SDK is missing build-tools.Android SDK Build-tools component is not found. Make sure all tools are installed in the SDK manager.
    • 打开 Unity -> Setting -> External Tools,发现 Android 配置部分有警告,必须安装JDK,Android SDK,Android NDK 且必须使用指定版本
    • 使用 Unity Hub 发现下载 Unity 版本时Android 部分配置虽然勾选了,但是下载出错了,没有成功将需要配置下载下来。
    • 自行下载
      • 发现NDK怎么也下不来,查源码库 https://github.com/android/ndk/wiki/Unsupported-Downloads,没有 r23b了,这问题无解了。
      • 下载了一个 r25 的版本尝试,结果提示
      • You are not using the recommended Android NDK, versions other than 23.1.7779620 are not officialy supported.
      • 最后从打开已经安装好的Android Studio 中的sdk 配置中下载了 ndk 的23.1.7779620版本,copy 到 Unity 指定的路径
      • 确认了/Applications/Unity/Hub/Editor/2022.3.62f1/PlaybackEngines/AndroidPlayer/路径下 SDK,NDK,OPENJDK 等版本无问题后,测试导出项目成功s Unity Build Setting
      • 导出的项目格式主要有两个模块,一个依赖库unityLibrary,一个可运行的 launcher module
    • 使用 Android Studio 打开导出的项目提示
      1
      
       org.gradle.api.plugins.UnknownPluginException: Plugin \[id: 'com.android.library', version: '7.4.2', apply: false\] was not found in any of the following sources:
      
    • Android 中 Gradle 版本 check https://developer.android.com/build/releases/gradle-plugin#updating-gradle
    • Android Studio -> Setting -> Build,Execution, Deployment -> Build Tools -> Gradle 选择 Gradle JDK 版本使用自带的 jdk 11
    • 发现还是构建报错,发现项目根路径下的 build.gradle缺少配置,增加 buildscript{…}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    buildscript {
        repositories {
            google()
            mavenCentral()
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:7.4.2'
        }
    }
    
    plugins {
        id 'com.android.application' version '7.4.2' apply false
        id 'com.android.library' version '7.4.2' apply false
    }
    
    task clean(type: Delete) {
        delete rootProject.buildDir
    }
  • 注意,如果是 mac 这里需要在 gradle-wrapper.properties 中请将
1
2
3
4
distributionUrl=https://services.gradle.org/distributions/gradle-7.5.1-bin.zip
设置成
distributionUrl=https://services.gradle.org/distributions/gradle-7.5.1-all.zip
同步 gradle 会自动下载相关环境
  • launcher 模块中的 build.gradle 配置也需要进行调整,具体可参考 UnityAndroidDemo
  • 最后同步 gradle 运行成功!

第一次配置这个 Unity 导出 Android 项目流程真的太繁琐了,即使借助 ai 也费了一些时间,大半时间浪费在了unity环境配置上,另外导出的 Android项目还可以优化一下。有些配置非常冗余,目前只是一个空项目,后面会写一下与 Android交互相关配置。

其他注意事项

  • 如果你的项目需要指定使用 jdk 1.8,需要降低 Gradle 版本,Gradle 版本和 wrapper 版本有对应关系,需要同步修改。
  • launcher基本上就是一个空项目,所以两个模块可以合并,但 unityLibrary 要设置成 application 结构
  • 导出的 ndk 架构要根据游戏适配的设备来加,一般默认以下四种,或者不考虑模拟器的去掉 x86与 x86_64,不加也可以但是某些三方库可能会受到兼容性风险,会增加Exception 几率了,见仁见智自行选择。
1
2
3
ndk {
    abiFilters 'armeabi-v7a','arm64-v8a','x86','x86_64'
}
本文由作者按照 CC BY 4.0 进行授权