CPU架构适配需要注意哪些问题

CPU架构的指令兼容性

  • mips(已被废弃)

    • mips64
  • armeabi

    • armeabi-v7a
      • arm64-v8a
    • x86
      • X86_64

兼容模式运行的一些问题

  • 兼容模式运行的Native库无法获得最优性能

  • 兼容模式容易出现一些难以排查的内存问题

  • 系统优先加载对应架构目录下的so库

为App提供不同架构的Native库

例如:

  • libs

    • Armeabi-v7a

      • libmath.so

      • libmath_v8a.so

      • libui.so

线上监控问题,针对性提供Native库

非启动加载的库可云端加载

优化so体积

  • 默认隐藏所有符号,只公开必要的

    • fvisibility=hidden
  • 禁用C++Exception & RTTI

    • -fno-exceptions -fno-rtti
  • 不要使用iostream,优先使用Android Log
  • 使用gc-sections去除无用代码
    • LOCAL_CFLAGS +=-ffuntion-sections -fdata-sections
    • LOCAL_LDFLAGS += -Wl, –gc-sections

构建时分包

1
2
3
4
5
6
7
8
splits{
abi{
enable true
reset()
include 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
universalApk true
}
}

通过CPU架构分发安装包

开发者需要注意

  • 尽量不在Native层开发,降低问题跟踪维护成本
  • 尽量优化Native库体积,降低开发者的使用成本
  • 必须提供完整的CPU架构依赖