编译unity-mono( 写给超级初学者的朋友)

前言:看文章切忌心浮气躁.

为什么要编译mono?相比看到这篇文章的朋友应该都不需要再多问为什么,那么为了呼应标题,笔者还是想再简明扼要的阐述一下,以便不知道干啥的朋友还可以知道要干啥.

unity生成的apk包,实际上就是一个压缩文件,我们可以直接解压出来,解压出来之后我们可以找到这样的一个目录:assets\bin\Data\Managed,在这个目录之下都是一些dll,然后这些dll是什么呢?听笔者接着说,倘若我们在unity里边有使用到dll,使用到的dll就会被打包放到这里,再这之中你或许还会看到一个名为Assembly-CSharp的DLL,为什么我这里用或许这样的字眼,是因为倘若你的整个unity工程若是没有脚本文件就不会有这个dll的产生,什么叫做没有脚本文件?举个例子就是:新建一个unity工程,一个脚本都不创建,然后就打包。

那,有的读者可能就会想了,这和为什么要编译mono有什么关系呐!别着急,正在分析中ing

好了,有脚本才会有这个名为Assembly-CSharp的DLL,那么有的读者会不会就会联想是否我们所有的脚本文件都是被打包到这个DLL的。是的,没有错,就是在这个CSharp程序集中,那么我们的重点也随之来了,倘若别人把这个dll拿去反编译了,我们的代码岂不是分分钟就别别人看到,现在反编译DLL的工具那么多,那么牛逼,网上一搜一堆堆的,有兴趣的读者可以自行尝试一下。

到此,或许很多读者最直接想到的不是为什么要编译mono,映入脑海中的而是怎么样才能不让别人反编译出我们这个dll。实际上这两个问题是想关联的,为什么会这么说?其实道理很浅显,首先我们怎么才能防止我们的dll不被人看到里边的源码,这个很简单,既然反编译是读取dll,那我要是将dll的文件结构给破坏掉,反编译的工具还能读取出来?显然是不能的,这也就我们通常所说的加密或者混淆。至于具体怎么做,我下边会给出,仅作为参考... 。 哇咔咔卡

那好了,解决了dll不被人反编译出来的问题,也就是说这个Assembly-CSharp的DLL文件结构已经被破坏,那,我们的apk还能正常的启用? 注意,这里我说的是是否能正常启动并不是说是否能正常安装,修改过的apk必须要重新签名一下才能被正常的安装,否则是安装不上,至于为什么,读者可以自行百度,我的个人理解不一定对,但,要我实现的话这也算的上是一种策略:大致我们原本的app应该会有一个类似MD5的值保存在app内部,而当android系统安装该app的时候会计算这个app的MD5值与原始MD5值进行比对,match成功则判断没有改动过,就可以正常安装,而签名就是类似于一个篡改AppMD5值的过程,计算出修改过后app的MD5值替换掉原本的MD5,所以,修改过的App一定要经过签名才能使用。然而,我这里想说的是将Assembly-CSharp修改过后这个APP是否能正常启用。

其实,读者只要认真想想的话,根据上边阐述的,应该自行都能想到答案。

既然,Assembly-CSharp程序集仅仅是存储了我们的脚本文件,这个文件被损坏掉的话,顶多是所有脚本全部失效,应该是不会影响正常启用的。很聪明,能想到这里,没有错,确实是这样,感兴趣的读者可以去自行try一下,万一我是骗子呐。此时的我正在一阵阴冷冷的笑....

我是不是越来越跑题了,有木有读者这样想.但,其实不然,要相信我...

既然说Assembly-CSharp被修改了,所有的脚本就都失效了,那怎么样才能保证不失效呢?

这又得从那个月黑风高的夜晚说起,话说,unity为什么可以做到跨平台,是因为在unity中使用C#脚本开发的代码底层都是运行在一个统称为"运行时"的虚拟执行系统上,所有的C#代码都被这个“运行时”中的一个名为"即时编译器"的组件再编译为各个平台的原生代码,unity能跨平台的原因就是实现了各个平台的“即时编译器”(C#代码 ->中间语言->各个平台的原生代码,目前是这样,后

  • 10
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值