关于手机架构的一点记录

参考

  • X86上的Android:性能与兼容可否兼得?
  • Androidndk开发打包时我们应该如何注意平台的兼容(x86,arm,arm-v7a)
  • armeabi-v7a armeabi arm64-v8a区别

关键信息摘抄

Unity中可选的架构

armeabi-v7a确实是可以兼容armeabi

x86是可以兼容armeabi平台运行的(包括armeabi和armeabi-v7a),同时带来的是性能上的损耗。

通常来说,针对ARM平台编译的二进制代码,x86的处理器是无法直接运行的。为了解决这一问题,Intel在推出Android手机系统的ATOM平台之初,就引入了“二进制转换”(Binary Translation)这一功能,来解决x86无法直接运行ARM库的问题。针对ARM编译的二进制代码会被ATOM处理器翻译成x86执行的代码,从而运行包含为ARM编译的原生代码的应用。
兼容运行ARM库相比原生执行x86代码,成绩下降了30%,平均的CPU占用率从58.9%提高到了73.4%,而平均电流从621mA提高到了717mA,增加了约100mA,相对来说CPU的功耗增加了约400mW。

二进制转换相比原生执行x86代码,损失的性能还是很可观的,在性能诉求的应用中,损失可高达50%以上。在一些游戏类应用中,也会带来约400mW的CPU功耗的增加。

一点结论

  目前市面上x86架构的手机非常少,粗看下来最新款的ATOM手机产于2015年Q3,可谓是老机型。
  我们游戏通常不考虑支持低端机,故果断舍弃了x86选项。带来的好处是IL2CPP打包的提速,跟包体减小。
  另外,很多模拟器还是基于x86的,但模拟器不在我们主要支持的
范围内,只要兼容模式能正常运行就好了。MuMu模拟器,在设置里有是否兼容ARM的选项,需要的时候可以打开。


MuMu开始ARM兼容模式

2020-10-12补充

  • 模拟器32位(即Mac处理器的指令集):i386
  • 模拟器64位(即Mac处理器的指令集):x86_64
  • 真机32位(即ARM处理器的指令集):armv7、armv7s
  • 真机64位(即ARM处理器的指令集):arm64(armv8)

你可能感兴趣的:(关于手机架构的一点记录)