命令行编译不包括路径集_编译Unity使用的libmono.so - K1_大大

因工作需要,对Unity项目使用的文件进行编译,至于原因众所周知就是为了加解密代码,整个过程实施起来并不复杂,只是在一些流程上每个人操作过程可能不一样,网上的资料会给比较多的困扰。下面记录一下完整的过程,希望对大家有所帮助。

参考资料,感谢作者:

https://blog.csdn.net/u011312774/article/details/106543862

https://www.cnblogs.com/wuxun1997/p/13364183.html?utm_source=tuicool

https://blog.csdn.net/yangyangyang20092010/article/details/46350519

https://www.cnblogs.com/yaukey/p/compile_unity_mono_source.html

1、编译平台的选择,网上资料大多数是Linux或者对应虚拟机编译,我这边是因为虚拟机的版本和网络问题放弃,使用了Win10+MinGW+MSYS来编译。

      MinGW,Minimalist GNU for Windows,windows最简化的GNU,就是一个C的编译工具集。同时,需要通过MSYS使用与编译相关的命令行,因此,需要同时安装MinGW和 MSYS。所以下面的步骤都只是针对该搭配组合

2、安装MinGW,下载对应的,我没用64位的,就32位也可以正常运行,这里重点提示一下,不要安装到带空格的目录或者中文目录,避免给自己带来无限的坑,如果经常使用命令行就知道,WINDOW下的空格目录害人不浅。

下载地址:

e69bbeff71e20f2442b90cfa64cc8dbf.png

或者官网: 

往下拉,看左边,我觉得sourceforge下载就挺好,因为其他很多配套资源也得去哪里下载,提前熟悉熟悉更方便。

35bd877c8aab8a234e8eed38237c5d18.png

MinGW我没找到离线的,在线安装也是比较慢的,只安装Basic包就行了 ,先选择,然后右列的全选,打上标记,之后再选菜单里面的Installation,在选择Apply,在线安装最大的坑就是不稳定,多试几次

3287ecba708731d8b3da67ac02cca74b.png

 adf8f3c720d8f93a3c5525263614d9e4.png

 如果实在不行就尝试使用命令行安装,用任务管理器把它kill掉,然后cmd或者powershell进入自己的安装目录,我是在D:\MinGW

然后执行命令:

mingw-get install gcc
mingw-get install g++
mingw-get install gdb
如果真的实在不行,那么就去官网去下载对应资源的离线包,就去sourceforge里面找资源了
路径一般是:MinGW/Extension/
缺少就去这个扩展包目录里找,一般找最新的,然后全部下载,坏处就是没整包下载,下完之后记得拷贝到D:\MinGW\var\cache\mingw-get\packages
也就是安装包的缓存目录,再执行对应的命令行就可以了。
如果顺利的话,其实过程还是比较容易,遇到的问题基本上按照上面的思路都可以解决。这样MinGW就安装完毕,把对应路径D:\MinGW\bin配置到环境变量里面,这一步安装就完成了。
可以测试一下,命令行输入 gcc -v,输出正确就OK了。

3. 安装 MSYS

鉴于在线安装实在太慢,所以建议先下载完毕然后离线安装msys

下载地址:   

这里选择一个比较新的就行了,区别不大,我选的是截图里面的。

da7a1cd65c86c2cbe96e297465323725.png

解压,然后拷贝到自己安装好的MinGW目录中,结构如下:

67f74a056b53dcaafe63fa16b693c0ea.png

 这样就完事了,可以测试一下,进入msys目录,找到,双击打开,可以使用Linux下命令行,比如where ls 等等,这里的where找到就是msys\bin里的

fe482bf62995be49a5cbd4aa9036fdf9.png

4、安装好上面的工具,下载JDK和NDK,JDK我这里用的是,NDK一定要使用r10e的版本,可以根据自己的系统来选择。官方下载地址(无需翻墙):32位 / 64位

这里需要提醒的一点是,要把解压好的ndk目录放到D:\MinGW\msys\home\xxx,路径,同时下一步下载的mono源码也是同理,意思是放到该账户的根目录。

86ffe63ef6ce3365a5ea28a0e137a220.png

5、可以进入正题了,下载使用Unity对应版本的libmono库,git地址:, 自行选择对应的版本就可以,有没有mbe的都无所谓,只是说不同版本下的mbe可以同时在编辑器和Player模式下使用,通过修改对应的配置,这里忽略了

因为要使用到git,可以用命令行或者github desktop,把资源clone下来,因为git默认是克隆的主干,也就是unity-master的,需要在本地进行分支切换,使用命令行操作

b143409f25cd79cd759e9224578e8795.png

git branch -r  查看对应远程分支版本

git checkout -b <本地分支名字,一般保持和远程一致> origin/<远程分支名>,这样就可以更新远程分支的资源,同时切换到该分支了

git checkout  <本地分支的名称>   切换到本地仓库

OK,到现在为止,我们的工具和资源就准备齐全,下面需要对编译脚本做一些修改。

6、要修改的内容并不多,建议简单理解一下,对应目录在mono\external\buildscripts里面,因为我们只编译安卓平台,主要是和

1)中添加ndk的环境变量,打开脚本,顶头位置添加一行 export ANDROID_NDK_ROOT=/home/xxxx/android-ndk-r10e

2)然后找到KRAIT_PATCH_PATH的设置,修改为KRAIT_PATCH_PATH="${CWD}/android_krait_signal_handler/build",在编译过程中会有git克隆资源,可以保证目录结构,当然你也可以提前clone下来,那么编译脚本会跳过克隆部分

f28c2006c014e4638c3b1585a4db16a0.png

3)修改文件 ,将 -fpic -g -funwind-tables \ 修改为 -fpic -O2 -funwind-tables \ 以便编译为 release 版本

9fb9383eea604c2e26d78cde56fb54db.png

4)修改文件 ,只保留 armv7的编译,注释掉armv5和armv6的选项

5e853818a9a6490f7a96af9b92d0bf7b.png

5)修改文件 ,将 -fpic -g \ 修改为 -fpic -O2

7f17de2ca7ae21aa1881ca754c4d7e18.png

6)修改文件 ,将 elsif(lc $^O eq 'cygwin'的地方修改为elsif(lc $^O eq 'cygwin' or lc $^O eq 'msys'),意思就是加上msys的模式

7)修改 android_krait_signal_handler 编译脚本,如果已经启动过第一次编译并且失败或者主动 clone 过,那么这里有两种修改方式,第一是修改mono\android_krait_signal_handler\build目录中拷贝过来的,

修改方式同上,改为 elsif(lc $^O eq 'cygwin' or lc $^O eq 'msys')。

或者修改对应的文件,参照截图修改:

d0ee689c6f559333ae0d6409b131ffdb.png

 因为生成的目录为armeabi-v7a,看下面截图,所以需要修改中对应的路径,下面第一个截图是中的

ede24f74323a69aa1d492cd06978de5f.png

 以下为sh脚本中的,其实一对照就很明白了。

03f4b03bf2e44ef789bf714f06e2e74f.png

至此,按照以上的步骤,所有过程中的坑基本上都是经历过了,可以轻松愉快的输入命令行进行编译了。

8)执行./external/buildscripts/,根据电脑时间长短不一,我的电脑时间还是比较久,起码在10分钟以上

9)生成目录为builds\embedruntimes\android\armv7a和x86下

 1d434a6c404433a4df7b30c81a50bddd.png

10)可以愉快的进行修改了,路径mono\metadata\,简单说一下,修改入口根据不同的mono版本,函数名字不同,mono_image_open_from_data_with_name或者mono_image_open_from_data_internal

修改时,做个name的判断,具体可以看网上的一些加密方式cae131301c1107be88b05ce0746f2610.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值