本文由 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中直接打包(流程不完整了))。