Unity自动打包工具——Mac上打包android

本文详细介绍了在Mac上配置Unity自动打包Android应用的过程。包括安装必要的开发工具、设置环境变量、编写Shell脚本实现自动打包及签名等功能,并解决了由于SIP特性导致的命令未找到的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前写过一篇Unity自动打包工具,偏重于讲述unity3d在Windows平台上打包wp和android。最近嫌在我电脑上打android包影响我的开发工作,就在mac上做了一下android打包。本来想着很简单的事情,但是最后折腾了我一天时间。因此记录一下,以作总结。

首先是安装开发环境java sdk/android sdk&ndk/ant/unity android support等。最近墙的很厉害,推荐在一个国内站点(http://android-studio.org/)安装android studio。装好之后启动android studio,点选Configure启动SDK Manager,然后在线装android sdk/ndk/build tools等。

装好之后,设置环境变量。打开/Users/YOUR_UASER_NAME/.bash_profile,如果没有创建。比如我的设置如下:

export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.8.0_91.jdk/Contents/Home"
export ANT_HOME="/Users/macmini3/Downloads/softwares/apache-ant-1.9.7"
export ANDROID_SDK_HOME="/Users/macmini3/Library/Android/sdk"
export ANDROID_NDK_ROOT="/Users/macmini3/Downloads/softwares/android/android-ndk-r10e"

export CLASSPATH=".:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar:$ANT_HOME/lib"

export PATH=".:$PATH:$JAVA_HOME/bin:$ANT_HOME/bin:$ANDROID_SDK_HOME/platform-tools:$ANDROID_SDK_HOME/tools:$ANDROID_SDK_HOME/build-tools/24.0.0:$ANDROID_NDK_ROOT"

保存之后执行生效,$source .bash_profile
然后再Unity->Preferences ->External tools设置sdk/jdk/ndk的路径。

然后写shell脚本,核心是对导出的android工程,调用下面几个命令,主要是用ant自动打包,然后签名、对齐等,最终生成apk

android list targets
android update project
ant release -buildfile $projdir/build.xml/
jarsigner
zipalign

写完之后我直接调用这个脚本,正常生成了apk。然后在打包工具里由C#调用它,竟然失败了,错误信息是android/ant/zipalign “command not found”。这是什么原因?前面不是已经在环境变量里设置了吗?百思不得其解,请教了一个linux高手,原来是需要在/usr/bin/目录建立一个软链接,比如

sudo ln -s -f /Users/macmini3/Library/Android/sdk/tools/android
sudo ln -s -f /Users/macmini3/Library/Android/sdk/build-tools/24.0.0/zipalign
sudo ln -s -f /Users/macmini3/Downloads/softwares/apache-ant-1.9.7/bin/ant

但是这样会提示“ln: Operation not permitted”。这是因为苹果在OS X 10.11中引入的SIP(System Integrity Protection)特性使得即使root权限也无法修改系统级的目录(也即rootless模式),所以需要关闭SIP。

重启,按着Command/Win+R,进入Recovery模式。然后在Utilities中选Terminal,执行#csrutil disable,重启就可以了。

现在终于可以愉快的一键出android包了!

相关链接:
1. Unity自动打包工具 http://blog.youkuaiyun.com/ynnmnm/article/details/36774715

Unity 中,通常情况下无法直接将 Android 项目打包为 EXE 文件。这是因为 Unity 的跨平台特性决定了不同目标平台会生成不同的可执行文件格式。对于 Android 平台,默认生成 APK 或 AAB 文件;而对于 Windows 平台,则生成 EXE 可执行文件。 然而,在某些特殊需求下,可以通过以下方法间接实现: --- ### 方法一:通过导出 Unity 工程并重新编译为目标平台 如果希望在一个 Android 应用中嵌入 Unity 游戏模块,并最终将其封装为一个 EXE 文件,可以按照以下方式操作: #### 导出 Unity 工程作为 Android Library 1. 在 Unity 编辑器中设置构建目标为 **Android**。 2. 进入 `File -> Build Settings`,点击 `Switch Platform` 切换至 Android。 3. 勾选 `Export Project` 复选框,然后点击 `Build` 将 Unity 工程导出为标准的 Android Studio 项目[^3]。 #### 使用工具链将 Android 工程转换为桌面应用 1. 将上述导出的 Android 工程导入到 Android Studio。 2. 修改 Gradle 配置文件以支持多平台兼容模式(例如使用第三方框架如 Electron 或其他桌面应用容器)。 3. 使用工具(如 Advanced Installer 或 Inno Setup)将整个 Android 工程及其依赖项打包为单个 EXE 文件。 此过程较为复杂,可能需要额外的技术栈支持。 --- ### 方法二:切换 Scripting Backend 至 Mono 后尝试交叉编译 尽管官方不推荐这种做法,但在特定场景下可以尝试调整 Scripting Backend 设置来解决部分兼容性问题: 1. 打开 Unity 项目的 `ProjectSettings/PlayerSettings.asset` 文件。 2. 将 `Scripting Backend` 选项从 IL2CPP 改为 Mono[^1]。 3. 调整目标平台为 PC/Mac/Linux Standalone (`Edit -> Project Settings -> Player`)。 4. 构建完成后,手动修改生成的 EXE 文件结构以适配 Android 内容资源的需求。 需要注意的是,这种方法可能会导致性能下降以及功能缺失的风险。 --- ### 方法三:利用 Resources 文件夹管理共享资产 为了简化流程,建议统一管理和分发必要的资源文件。Unity 提供了一个特殊的保留目录——Resources 文件夹,用于存储可以在运行时动态加载的数据[^4]。无论是在 Android 上还是 Windows 上部署,都可以借助该机制保持一致性。 具体步骤如下: 1. 创建名为 `Resources` 的文件夹放置于 Assets 下。 2. 添加所需素材到此文件夹内。 3. 使用 `Resources.Load<T>()` API 加载指定类型的对象实例。 这样即使后续迁移至其他平台也能轻松维护相同的逻辑架构。 --- ### 注意事项 - 如果涉及自定义签名证书,请提前准备好 `.keystore` 文件形式的身份验证凭证[^5]。 - 删除不必要的附属组件(比如 Burst Debug Information),有助于减少最终产物体积[^2]。 - 对于复杂的交互行为或者硬件特性的调用需谨慎评估差异影响。 --- ```python import os def check_resources_folder(): """检查是否存在有效的Resources文件夹""" resources_path = "./Assets/Resources" if not os.path.exists(resources_path): raise FileNotFoundError(f"The required folder does not exist at path {resources_path}. Please create it.") check_resources_folder() print("Resources folder is ready!") ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值