安卓上为什么不能运行64位LuaJIT字节码
<h3 id="安卓上为什么不能运行64位LuaJIT字节码"><a href="#安卓上为什么不能运行64位LuaJIT字节码" class="headerlink" title="安卓上为什么不能运行64位LuaJIT字节码"></a>安卓上为什么不能运行64位LuaJIT字节码</h3><p>今天在测试安卓下是否可以运行64位的LuaJIT字节码时出现了一个报错。错误说加载了错误格式的字节码,而32位的字节码可以正常运行。这就很纳闷了,为啥64位的安卓应用依然只能读取32位的字节码呢?</p>
仔细查阅了一下以后发现,苹果在15年强制新提交的应用必须支持64位之后,Unity紧赶慢赶的在4.6.2以上的版本增加了对IOS64位的支持,但是Unity官方对于64位安卓应用的构建遥遥无期,一方面64位Android可以良好的兼容32位应用,再一个谷歌也没有强行的去推进这件事情,所以目前绝大多数的安卓应用还是32位的。
那么Unity目前在安卓上是否支持64位的应用呢,在官方文档中,我没有找到直接的描述,只是在Android Build Setting中找到了一个Device filer字段,它可以控制构建应用所支持的CPU架构。Device filer 支持x86/armv7/FAT(x86+armv7)这三种选项(这可能也是为什么xLua构建安卓库的时候只会构建出x86和armabi-v7a两个架构的.so文件,因为Unity就只支持这两个目标架构,=。= 纯属猜测),从选项就可以看出来,在2017.4之前,Unity是不支持构建64位安卓应用的。
不过在2017.4的官方文档中,增加了Target Architectures这个属性配置,它增加了arm64的构建选项,不过在2017.4这个版本,该字段还处于实验性质。Target Architectures在Unity2018中已经可以正式使用了,这代表着我们终于可以在Unity中构建64位的安卓应用了。
拓展阅读:Unity Android Plugin 目录下为什么会有那么多文件夹(有空对这一部分的内容做整理)
在不考虑包体的情况下,适配的CPU架构越多兼容性越好。(不用目录的.so库数量一定要一样,不然会出现找不到库的Bug,具体原因见–与.so有关的大坑)
针对于安卓平台上7中cpu指令集,以及其各自的兼容性,参见为何Twitter区别于微信、淘宝,只使用了armeabi-v7a?
</div>