环境说明
-
mac osx 10.12.6
-
unity 2017.4.6f1
步骤
- 安装相关的工具
brew install autoconf automake libtool pkg-config
- 克隆目录并跳转到目录下切换 unity 版本分支
git clone https://github.com/Unity-Technologies/mono.git
cd mono
git checkout unity-2017.4
-
初始化子模块
-
赋权并执行编译
./external/buildscripts/build_runtime_android.sh
- 遇到错误,赋权并运行 autogen.sh
./autogen.sh
- 遇到错误,安装 cmake
brew install cmake
- 再次运行 autogen.sh,经过漫长的刷屏编译
- 输入 make 进行编译
make
- 再次执行 build_runtime_android.sh 编译报错
- 查看日志
- 怀疑是 ndk 版本问题导致开始分析代码
定位到实际上是 build.pl 在搞鬼,mono 这里编译需要的 ndk 版本是 10e,但是 krait-signal-handler 要求的 ndk 版本是 13b,注释掉 krait-signal-handler 工程中的 PrepareAndroidSDK.pm 中 PrepareNDK 代码
-
再次执行 build_runtime_android.sh 编译成功
-
解决编译的 so 包大小问题
经过对比发现,编译出来的 so 很大,查了资料发现是 debug 版本,需要修改两个编译的 sh
build_runtime_android.sh
修改
CFLAGS="\
-DANDROID -DPLATFORM_ANDROID -DLINUX -D__linux__ \
-DHAVE_USR_INCLUDE_MALLOC_H -DPAGE_SIZE=0x1000 \
-D_POSIX_PATH_MAX=256 -DS_IWRITE=S_IWUSR \
-DHAVE_PTHREAD_MUTEX_TIMEDLOCK \
-fpic -O2 -funwind-tables \
-ffunction-sections -fdata-sections"
为了加快打包速度,注释掉
# clean_build "$CCFLAGS_ARMv5_CPU" "$LDFLAGS_ARMv5" "$OUTDIR/armv5"
# clean_build "$CCFLAGS_ARMv6_VFP" "$LDFLAGS_ARMv5" "$OUTDIR/armv6_vfp"
build_runtime_android_x86.sh
修改
CFLAGS="\
-DANDROID -DPLATFORM_ANDROID -DLINUX -D__linux__ \
-DHAVE_USR_INCLUDE_MALLOC_H -DPAGE_SIZE=0x1000 \
-D_POSIX_PATH_MAX=256 -DS_IWRITE=S_IWUSR \
-DHAVE_PTHREAD_MUTEX_TIMEDLOCK \
-fpic -O2 \
-ffunction-sections -fdata-sections"
- 重新编译即可,编译生成库文件在 builds/embedruntimes/android 目录下
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于