关于Apple M1的一点思考

最近苹果新出了个M1芯片,并有三款搭载该芯片的Mac设备上市,本人对其比较关注,对于该芯片,一点思考如下。

首先,ARM指令集主要有

  1. armv5
  2. armv6
  3. armv7
  4. armv7s
  5. armv8

v5/v6因为太老,已被放弃支持。

目前安卓阵营主流的还是armv7,即32位,少部分是armv8,即64位。armv8并不是纯64位,而是32+64,由32位指令集运行32位部分,64位指令集运行64位部分,纯64位不能运行32位程序。

安卓模拟器的平台类型主要有: x86, armeabi-v7a和arm64-v8a,主流的是armeabi-v7a,即32位。APK打包时必须选择包含相应的库才可以在相应的平台上运行,比如如果不选64位支持,则在纯64位系统上运行不了。Google预计在2022年推出纯64位系统Android S,按版本号算就是12。

苹果方面,移动设备iOS 11开始放弃32位程序支持,桌面设备则是High Sierra开始放弃32位程序支持,芯片上从A11开始抛弃32位指令集,所以从A11开始的SOC都是纯64位,当然包括新出的M1。

Linux操作系统方面,本人常用的是Ubuntu和CentOS,二者都同时有armv7和arm64版本。

之前在Android手机上用的Termux,其是基于Debian AArch64版本再编译的,通过pkg或apt安装的软件包也是arm64版本的。

综上,M1如果要运行ARM程序,须是arm64架构(原生或转译),Docker和虚拟机也应是64位,Docker和虚拟机里跑的程序也是。。。

希望常用软件的开发者及时跟进吧,至于被遗弃的x86_64,普通程序只能靠rosetta2转译,虚拟里的就要看虚拟机厂商的转化功力了。

2 thoughts on “关于Apple M1的一点思考”

  1. 您好,目前AS中自带的emulator好像只有arm64-v8a的ABI可以在M1上使用。同时不允许安装不支持armv8指令集的APK。但是在arm64-v8a的安卓设备里好像是能兼容arm64-v8a、armeabi-v7a、armeabi的,M1不兼容的原因是因为M1芯片是纯64位芯片吗?

  2. 我似乎找到了答案,https://stackoverflow.com/questions/69083758/android-studio-on-m1-macbook-pro-cannot-simulate-system-images-with-abi-armeabi

Leave a Comment

豫ICP备19001387号-1